Merge "Fix selection expansion detection logic."
diff --git a/Android.mk b/Android.mk
index d22273c..137ef85 100644
--- a/Android.mk
+++ b/Android.mk
@@ -677,6 +677,16 @@
$(fwbase_dirs_to_document) \
$(non_base_dirs)
+###########################################################
+## Return all directories that have a 'NO_DOCS' file in
+## them, appending a '%' to them to form a pattern to
+## filter out files under those directories.
+## $(1): A list of base directories to look at.
+###########################################################
+define find-no-docs-pattern
+$(addsuffix %, $(dir $(foreach dir, $(1), $(shell cd $(LOCAL_PATH); find $(dir) -name NO_DOCS))))
+endef
+
# These are relative to frameworks/base
# FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk
dirs_to_document := \
@@ -684,6 +694,9 @@
$(addprefix ../../, $(FRAMEWORKS_DATA_BINDING_JAVA_SRC_DIRS)) \
$(addprefix ../../, $(FRAMEWORKS_SUPPORT_JAVA_SRC_DIRS)) \
+patterns_to_not_document := \
+ $(call find-no-docs-pattern, $(dirs_to_document))
+
# These are relative to frameworks/base
html_dirs := \
$(FRAMEWORKS_BASE_SUBDIRS) \
@@ -697,7 +710,7 @@
# These are relative to frameworks/base
framework_docs_LOCAL_SRC_FILES := \
- $(call find-other-java-files, $(dirs_to_document)) \
+ $(filter-out $(patterns_to_not_document), $(call find-other-java-files, $(dirs_to_document))) \
$(common_src_files)
# These are relative to frameworks/base
diff --git a/api/current.txt b/api/current.txt
index 7ddd5af..9d9b2f5 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -28,6 +28,7 @@
field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
field public static final java.lang.String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
+ field public static final java.lang.String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE";
field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
field public static final java.lang.String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
@@ -2727,6 +2728,7 @@
method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, java.lang.String);
+ method public android.os.Bundle finishSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
@@ -2772,6 +2774,7 @@
method public void clearPassword(android.accounts.Account);
method public android.accounts.AccountManagerFuture<android.os.Bundle> confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public android.accounts.AccountManagerFuture<android.os.Bundle> editProperties(java.lang.String, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+ method public android.accounts.AccountManagerFuture<android.os.Bundle> finishSession(android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public static android.accounts.AccountManager get(android.content.Context);
method public android.accounts.Account[] getAccounts();
method public android.accounts.Account[] getAccountsByType(java.lang.String);
@@ -3408,6 +3411,8 @@
method public android.view.Window getWindow();
method public android.view.WindowManager getWindowManager();
method public boolean hasWindowFocus();
+ method public boolean inMultiWindowMode();
+ method public boolean inPictureInPictureMode();
method public void invalidateOptionsMenu();
method public boolean isChangingConfigurations();
method public final boolean isChild();
@@ -3458,6 +3463,7 @@
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
+ method public void onMultiWindowModeChanged(boolean);
method public boolean onNavigateUp();
method public boolean onNavigateUpFromChild(android.app.Activity);
method protected void onNewIntent(android.content.Intent);
@@ -3465,6 +3471,7 @@
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPanelClosed(int, android.view.Menu);
method protected void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
method protected void onPostCreate(android.os.Bundle);
method public void onPostCreate(android.os.Bundle, android.os.PersistableBundle);
method protected void onPostResume();
@@ -5529,6 +5536,8 @@
method public void enableCarMode(int);
method public int getCurrentModeType();
method public int getNightMode();
+ method public boolean isNightModeLocked();
+ method public boolean isUiModeLocked();
method public void setNightMode(int);
field public static java.lang.String ACTION_ENTER_CAR_MODE;
field public static java.lang.String ACTION_ENTER_DESK_MODE;
@@ -5793,6 +5802,7 @@
method public void lockNow();
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
+ method public boolean removeKeyPair(android.content.ComponentName, java.lang.String);
method public boolean removeUser(android.content.ComponentName, android.os.UserHandle);
method public boolean resetPassword(java.lang.String, int);
method public void setAccountManagementDisabled(android.content.ComponentName, java.lang.String, boolean);
@@ -7441,12 +7451,16 @@
method public static boolean compareMimeTypes(java.lang.String, java.lang.String);
method public int describeContents();
method public java.lang.String[] filterMimeTypes(java.lang.String);
+ method public android.os.PersistableBundle getExtras();
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
method public boolean hasMimeType(java.lang.String);
+ method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.content.ClipDescription> CREATOR;
+ field public static final java.lang.String EXTRA_TARGET_COMPONENT_NAME = "android.content.extra.TARGET_COMPONENT_NAME";
+ field public static final java.lang.String EXTRA_USER_SERIAL_NUMBER = "android.content.extra.USER_SERIAL_NUMBER";
field public static final java.lang.String MIMETYPE_TEXT_HTML = "text/html";
field public static final java.lang.String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
field public static final java.lang.String MIMETYPE_TEXT_PLAIN = "text/plain";
@@ -7766,6 +7780,7 @@
method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public abstract deprecated void clearWallpaper() throws java.io.IOException;
method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public abstract android.content.Context createDeviceEncryptedStorageContext();
method public abstract android.content.Context createDisplayContext(android.view.Display);
method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] databaseList();
@@ -7789,7 +7804,6 @@
method public final android.content.res.ColorStateList getColorStateList(int);
method public abstract android.content.ContentResolver getContentResolver();
method public abstract java.io.File getDatabasePath(java.lang.String);
- method public abstract java.io.File getDeviceEncryptedFilesDir();
method public abstract java.io.File getDir(java.lang.String, int);
method public final android.graphics.drawable.Drawable getDrawable(int);
method public abstract java.io.File getExternalCacheDir();
@@ -7810,6 +7824,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -7821,6 +7836,7 @@
method public abstract deprecated int getWallpaperDesiredMinimumHeight();
method public abstract deprecated int getWallpaperDesiredMinimumWidth();
method public abstract void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public abstract boolean isDeviceEncryptedStorage();
method public boolean isRestricted();
method public final android.content.res.TypedArray obtainStyledAttributes(int[]);
method public final android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException;
@@ -7908,6 +7924,7 @@
field public static final int MODE_APPEND = 32768; // 0x8000
field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
field public static final deprecated int MODE_MULTI_PROCESS = 4; // 0x4
+ field public static final int MODE_NO_LOCALIZED_COLLATORS = 16; // 0x10
field public static final int MODE_PRIVATE = 0; // 0x0
field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1
field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2
@@ -7951,6 +7968,7 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public deprecated void clearWallpaper() throws java.io.IOException;
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -7973,7 +7991,6 @@
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -7993,6 +8010,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -8000,6 +8018,7 @@
method public deprecated int getWallpaperDesiredMinimumHeight();
method public deprecated int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -8244,6 +8263,7 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
+ field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8280,8 +8300,10 @@
field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
+ field public static final java.lang.String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN";
field public static final java.lang.String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+ field public static final java.lang.String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED = "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
@@ -8426,6 +8448,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
+ field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
@@ -9077,8 +9100,10 @@
field public java.lang.String backupAgentName;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
+ field public java.lang.String credentialEncryptedDataDir;
field public java.lang.String dataDir;
field public int descriptionRes;
+ field public java.lang.String deviceEncryptedDataDir;
field public boolean enabled;
field public int flags;
field public int largestWidthLimitDp;
@@ -9400,6 +9425,8 @@
method public abstract int getComponentEnabledSetting(android.content.ComponentName);
method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public abstract byte[] getEphemeralCookie();
+ method public abstract int getEphemeralCookieMaxSizeBytes();
method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public abstract java.lang.String getInstallerPackageName(java.lang.String);
@@ -9431,6 +9458,7 @@
method public abstract java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public abstract boolean hasSystemFeature(java.lang.String);
+ method public abstract boolean isEphemeralApplication();
method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public abstract boolean isSafeMode();
method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -9448,6 +9476,7 @@
method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
+ method public abstract boolean setEphemeralCookie(byte[]);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
method public abstract void verifyPendingInstall(int, int);
field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
@@ -11512,6 +11541,7 @@
field public static final int PRIVATE = 34; // 0x22
field public static final int RAW10 = 37; // 0x25
field public static final int RAW12 = 38; // 0x26
+ field public static final int RAW_PRIVATE = 36; // 0x24
field public static final int RAW_SENSOR = 32; // 0x20
field public static final int RGB_565 = 4; // 0x4
field public static final int UNKNOWN = 0; // 0x0
@@ -20703,6 +20733,7 @@
public static class MediaRouter.RouteInfo {
method public android.media.MediaRouter.RouteCategory getCategory();
method public java.lang.CharSequence getDescription();
+ method public int getDeviceType();
method public android.media.MediaRouter.RouteGroup getGroup();
method public android.graphics.drawable.Drawable getIconDrawable();
method public java.lang.CharSequence getName();
@@ -20721,6 +20752,10 @@
method public void requestSetVolume(int);
method public void requestUpdateVolume(int);
method public void setTag(java.lang.Object);
+ field public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
@@ -22922,7 +22957,9 @@
method public static void incrementOperationCount(int);
method public static void incrementOperationCount(int, int);
method public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
field public static final int UNSUPPORTED = -1; // 0xffffffff
}
@@ -28056,9 +28093,14 @@
method public android.os.Bundle getUserRestrictions();
method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
method public boolean hasUserRestriction(java.lang.String);
+ method public boolean isQuietModeEnabled(android.os.UserHandle);
method public boolean isSystemUser();
method public boolean isUserAGoat();
method public boolean isUserRunning(android.os.UserHandle);
+ method public boolean isUserRunningAndLocked();
+ method public boolean isUserRunningAndLocked(android.os.UserHandle);
+ method public boolean isUserRunningAndUnlocked();
+ method public boolean isUserRunningAndUnlocked(android.os.UserHandle);
method public boolean isUserRunningOrStopping(android.os.UserHandle);
method public deprecated boolean setRestrictionsChallenge(java.lang.String);
method public deprecated void setUserRestriction(java.lang.String, boolean);
@@ -28445,6 +28487,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -29625,6 +29668,7 @@
ctor public ContactsContract.CommonDataKinds.Callable();
field public static final android.net.Uri CONTENT_FILTER_URI;
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -29656,6 +29700,7 @@
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DISPLAY_NAME = "data4";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
@@ -29771,6 +29816,7 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -29950,7 +29996,7 @@
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard";
field public static final android.net.Uri CONTENT_VCARD_URI;
- field public static final android.net.Uri CORP_CONTENT_FILTER_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -30079,10 +30125,12 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories";
field public static final android.net.Uri CONTENT_URI;
- field public static final android.net.Uri CORP_CONTENT_URI;
field public static final long DEFAULT = 0L; // 0x0L
field public static final java.lang.String DIRECTORY_AUTHORITY = "authority";
field public static final java.lang.String DISPLAY_NAME = "displayName";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+ field public static final long ENTERPRISE_DEFAULT = 1000000000L; // 0x3b9aca00L
+ field public static final long ENTERPRISE_LOCAL_INVISIBLE = 1000000001L; // 0x3b9aca01L
field public static final java.lang.String EXPORT_SUPPORT = "exportSupport";
field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2
field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0
@@ -30429,6 +30477,7 @@
field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type";
field public static final java.lang.String COLUMN_SIZE = "_size";
field public static final java.lang.String COLUMN_SUMMARY = "summary";
+ field public static final int FLAG_ARCHIVE = 2048; // 0x800
field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10
field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20
field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
@@ -33142,6 +33191,35 @@
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService";
}
+ public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
+ ctor public NotificationAssistantService();
+ method public final void adjustImportance(java.lang.String, android.service.notification.NotificationAssistantService.Adjustment);
+ method public final void clearAnnotation(java.lang.String);
+ method public void onNotificationActionClick(java.lang.String, long, int);
+ method public void onNotificationClick(java.lang.String, long);
+ method public abstract android.service.notification.NotificationAssistantService.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public void onNotificationRemoved(java.lang.String, long, int);
+ method public void onNotificationVisibilityChanged(java.lang.String, long, boolean);
+ method public final void setAnnotation(java.lang.String, android.app.Notification);
+ field public static final int REASON_APP_CANCEL = 8; // 0x8
+ field public static final int REASON_APP_CANCEL_ALL = 9; // 0x9
+ field public static final int REASON_DELEGATE_CANCEL = 2; // 0x2
+ field public static final int REASON_DELEGATE_CANCEL_ALL = 3; // 0x3
+ field public static final int REASON_DELEGATE_CLICK = 1; // 0x1
+ field public static final int REASON_DELEGATE_ERROR = 4; // 0x4
+ field public static final int REASON_GROUP_OPTIMIZATION = 13; // 0xd
+ field public static final int REASON_GROUP_SUMMARY_CANCELED = 12; // 0xc
+ field public static final int REASON_LISTENER_CANCEL = 10; // 0xa
+ field public static final int REASON_LISTENER_CANCEL_ALL = 11; // 0xb
+ field public static final int REASON_PACKAGE_BANNED = 7; // 0x7
+ field public static final int REASON_PACKAGE_CHANGED = 5; // 0x5
+ field public static final int REASON_USER_STOPPED = 6; // 0x6
+ }
+
+ public class NotificationAssistantService.Adjustment {
+ ctor public NotificationAssistantService.Adjustment(int, java.lang.CharSequence, android.net.Uri);
+ }
+
public abstract class NotificationListenerService extends android.app.Service {
ctor public NotificationListenerService();
method public final void cancelAllNotifications();
@@ -33178,11 +33256,19 @@
public static class NotificationListenerService.Ranking {
ctor public NotificationListenerService.Ranking();
+ method public int getImportance();
+ method public java.lang.CharSequence getImportanceExplanation();
method public java.lang.String getKey();
method public int getRank();
method public int getSuppressedVisualEffects();
method public boolean isAmbient();
method public boolean matchesInterruptionFilter();
+ field public static final int IMPORTANCE_DEFAULT = 0; // 0x0
+ field public static final int IMPORTANCE_HIGH = 1; // 0x1
+ field public static final int IMPORTANCE_LOW = -1; // 0xffffffff
+ field public static final int IMPORTANCE_MAX = 2; // 0x2
+ field public static final int IMPORTANCE_NONE = -2; // 0xfffffffe
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
}
public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
@@ -33239,6 +33325,7 @@
method public void onStopListening();
method public void onTileAdded();
method public void onTileRemoved();
+ method public final void showDialog(android.app.Dialog);
field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
}
@@ -35135,6 +35222,7 @@
field public static final java.lang.String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
field public static final java.lang.String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
field public static final java.lang.String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
+ field public static final java.lang.String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN = "vvm_cellular_data_required";
field public static final java.lang.String KEY_VVM_DESTINATION_NUMBER_STRING = "vvm_destination_number_string";
field public static final java.lang.String KEY_VVM_PORT_NUMBER_INT = "vvm_port_number_int";
field public static final java.lang.String KEY_VVM_TYPE_STRING = "vvm_type_string";
@@ -36165,6 +36253,7 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public void clearWallpaper();
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -36186,7 +36275,6 @@
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -36206,6 +36294,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -36213,6 +36302,7 @@
method public int getWallpaperDesiredMinimumHeight();
method public int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -36336,6 +36426,8 @@
method public android.graphics.drawable.Drawable getDefaultActivityIcon();
method public java.lang.String getDefaultBrowserPackageName(int);
method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public byte[] getEphemeralCookie();
+ method public int getEphemeralCookieMaxSizeBytes();
method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public java.lang.String getInstallerPackageName(java.lang.String);
@@ -36366,6 +36458,7 @@
method public java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public boolean hasSystemFeature(java.lang.String);
+ method public boolean isEphemeralApplication();
method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public boolean isSafeMode();
method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -36384,6 +36477,7 @@
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public boolean setDefaultBrowserPackageName(java.lang.String, int);
+ method public boolean setEphemeralCookie(byte[]);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
method public void verifyPendingInstall(int, int);
}
@@ -38603,19 +38697,22 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList {
+ public final class LocaleList implements android.os.Parcelable {
ctor public LocaleList();
ctor public LocaleList(java.util.Locale);
ctor public LocaleList(java.util.Locale[]);
+ method public int describeContents();
method public static android.util.LocaleList forLanguageTags(java.lang.String);
method public java.util.Locale get(int);
- method public java.util.Locale getBestMatch(java.lang.String[]);
method public static android.util.LocaleList getDefault();
method public static android.util.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
method public java.util.Locale getPrimary();
method public boolean isEmpty();
method public int size();
method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
}
public final class Log {
@@ -40459,7 +40556,6 @@
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
method public void createContextMenu(android.view.ContextMenu);
method public void destroyDrawingCache();
- method public final boolean didLayoutParamsChange();
method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
method public void dispatchConfigurationChanged(android.content.res.Configuration);
method public void dispatchDisplayHint(int);
@@ -40685,7 +40781,6 @@
method public boolean isOpaque();
method protected boolean isPaddingOffsetRequired();
method public boolean isPaddingRelative();
- method public final boolean isPartialLayoutRequested();
method public boolean isPressed();
method public boolean isSaveEnabled();
method public boolean isSaveFromParentEnabled();
@@ -41297,7 +41392,6 @@
method protected void dispatchThawSelfOnly(android.util.SparseArray<android.os.Parcelable>);
method protected boolean drawChild(android.graphics.Canvas, android.view.View, long);
method public void endViewTransition(android.view.View);
- method public int findDependentLayoutAxes(android.view.View, int);
method public android.view.View focusSearch(android.view.View, int);
method public void focusableViewAvailable(android.view.View);
method public boolean gatherTransparentRegion(android.graphics.Region);
@@ -41364,8 +41458,6 @@
method public void requestChildFocus(android.view.View, android.view.View);
method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
method public void requestDisallowInterceptTouchEvent(boolean);
- method public void requestLayoutForChild(android.view.View);
- method public void requestPartialLayoutForChild(android.view.View);
method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void requestTransparentRegion(android.view.View);
method public void scheduleLayoutAnimation();
@@ -41480,7 +41572,6 @@
method public abstract void childHasTransientStateChanged(android.view.View, boolean);
method public abstract void clearChildFocus(android.view.View);
method public abstract void createContextMenu(android.view.ContextMenu);
- method public abstract int findDependentLayoutAxes(android.view.View, int);
method public abstract android.view.View focusSearch(android.view.View, int);
method public abstract void focusableViewAvailable(android.view.View);
method public abstract boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
@@ -41510,16 +41601,12 @@
method public abstract void requestDisallowInterceptTouchEvent(boolean);
method public abstract void requestFitSystemWindows();
method public abstract void requestLayout();
- method public abstract void requestLayoutForChild(android.view.View);
method public abstract boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public abstract void requestTransparentRegion(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View, float, float);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
- field public static final int FLAG_LAYOUT_AXIS_ANY = 3; // 0x3
- field public static final int FLAG_LAYOUT_AXIS_HORIZONTAL = 1; // 0x1
- field public static final int FLAG_LAYOUT_AXIS_VERTICAL = 2; // 0x2
}
public class ViewPropertyAnimator {
@@ -41750,8 +41837,7 @@
method public abstract void setContentView(int);
method public abstract void setContentView(android.view.View);
method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
- method public abstract void setDecorView(android.view.View);
- method public abstract void setDecorView(int);
+ method public abstract void setDecorCaptionShade(int);
method protected void setDefaultWindowFormat(int);
method public void setDimAmount(float);
method public void setElevation(float);
@@ -41772,6 +41858,8 @@
method public void setMediaController(android.media.session.MediaController);
method public abstract void setNavigationBarColor(int);
method public void setReenterTransition(android.transition.Transition);
+ method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
+ method public final void setRestrictedCaptionAreaListener(android.view.Window.RestrictedCaptionAreaListener);
method public void setReturnTransition(android.transition.Transition);
method public void setSharedElementEnterTransition(android.transition.Transition);
method public void setSharedElementExitTransition(android.transition.Transition);
@@ -41800,6 +41888,9 @@
method public abstract void takeKeyEvents(boolean);
method public abstract void takeSurface(android.view.SurfaceHolder.Callback2);
method public abstract void togglePanel(int, android.view.KeyEvent);
+ field public static final int DECOR_CAPTION_SHADE_AUTO = 0; // 0x0
+ field public static final int DECOR_CAPTION_SHADE_DARK = 2; // 0x2
+ field public static final int DECOR_CAPTION_SHADE_LIGHT = 1; // 0x1
field protected static final deprecated int DEFAULT_FEATURES = 65; // 0x41
field public static final int FEATURE_ACTION_BAR = 8; // 0x8
field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
@@ -41854,6 +41945,10 @@
method public abstract android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
}
+ public static abstract interface Window.RestrictedCaptionAreaListener {
+ method public abstract void onRestrictedCaptionAreaChanged(android.graphics.Rect);
+ }
+
public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
@@ -42899,6 +42994,7 @@
field public int initialSelStart;
field public int inputType;
field public java.lang.CharSequence label;
+ field public android.util.LocaleList locales;
field public java.lang.String packageName;
field public java.lang.String privateImeOptions;
}
@@ -43189,7 +43285,7 @@
}
public final class SpellCheckerSubtype implements android.os.Parcelable {
- ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String);
+ ctor public deprecated SpellCheckerSubtype(int, java.lang.String, java.lang.String);
method public boolean containsExtraValueKey(java.lang.String);
method public int describeContents();
method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
@@ -49844,7 +49940,6 @@
public abstract class Reference {
method public void clear();
method public boolean enqueue();
- method public final synchronized boolean enqueueInternal();
method public T get();
method public boolean isEnqueued();
}
diff --git a/api/system-current.txt b/api/system-current.txt
index edc9f18..f9c8137 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -41,6 +41,7 @@
field public static final java.lang.String BIND_KEYGUARD_APPWIDGET = "android.permission.BIND_KEYGUARD_APPWIDGET";
field public static final java.lang.String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
+ field public static final java.lang.String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE";
field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
field public static final java.lang.String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
@@ -100,6 +101,7 @@
field public static final java.lang.String GET_APP_OPS_STATS = "android.permission.GET_APP_OPS_STATS";
field public static final java.lang.String GET_PACKAGE_IMPORTANCE = "android.permission.GET_PACKAGE_IMPORTANCE";
field public static final java.lang.String GET_PACKAGE_SIZE = "android.permission.GET_PACKAGE_SIZE";
+ field public static final java.lang.String GET_PROCESS_STATE_AND_OOM_SCORE = "android.permission.GET_PROCESS_STATE_AND_OOM_SCORE";
field public static final deprecated java.lang.String GET_TASKS = "android.permission.GET_TASKS";
field public static final java.lang.String GET_TOP_ACTIVITY_INFO = "android.permission.GET_TOP_ACTIVITY_INFO";
field public static final java.lang.String GLOBAL_SEARCH = "android.permission.GLOBAL_SEARCH";
@@ -132,6 +134,7 @@
field public static final java.lang.String MODIFY_AUDIO_ROUTING = "android.permission.MODIFY_AUDIO_ROUTING";
field public static final java.lang.String MODIFY_AUDIO_SETTINGS = "android.permission.MODIFY_AUDIO_SETTINGS";
field public static final java.lang.String MODIFY_CELL_BROADCASTS = "android.permission.MODIFY_CELL_BROADCASTS";
+ field public static final java.lang.String MODIFY_DAY_NIGHT_MODE = "android.permission.MODIFY_DAY_NIGHT_MODE";
field public static final java.lang.String MODIFY_NETWORK_ACCOUNTING = "android.permission.MODIFY_NETWORK_ACCOUNTING";
field public static final java.lang.String MODIFY_PARENTAL_CONTROLS = "android.permission.MODIFY_PARENTAL_CONTROLS";
field public static final java.lang.String MODIFY_PHONE_STATE = "android.permission.MODIFY_PHONE_STATE";
@@ -2826,6 +2829,7 @@
method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, java.lang.String);
+ method public android.os.Bundle finishSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
@@ -2871,6 +2875,7 @@
method public void clearPassword(android.accounts.Account);
method public android.accounts.AccountManagerFuture<android.os.Bundle> confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public android.accounts.AccountManagerFuture<android.os.Bundle> editProperties(java.lang.String, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+ method public android.accounts.AccountManagerFuture<android.os.Bundle> finishSession(android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public static android.accounts.AccountManager get(android.content.Context);
method public android.accounts.Account[] getAccounts();
method public android.accounts.Account[] getAccountsByType(java.lang.String);
@@ -3509,6 +3514,8 @@
method public android.view.Window getWindow();
method public android.view.WindowManager getWindowManager();
method public boolean hasWindowFocus();
+ method public boolean inMultiWindowMode();
+ method public boolean inPictureInPictureMode();
method public void invalidateOptionsMenu();
method public boolean isBackgroundVisibleBehind();
method public boolean isChangingConfigurations();
@@ -3561,6 +3568,7 @@
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
+ method public void onMultiWindowModeChanged(boolean);
method public boolean onNavigateUp();
method public boolean onNavigateUpFromChild(android.app.Activity);
method protected void onNewIntent(android.content.Intent);
@@ -3568,6 +3576,7 @@
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPanelClosed(int, android.view.Menu);
method protected void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
method protected void onPostCreate(android.os.Bundle);
method public void onPostCreate(android.os.Bundle, android.os.PersistableBundle);
method protected void onPostResume();
@@ -5647,6 +5656,8 @@
method public void enableCarMode(int);
method public int getCurrentModeType();
method public int getNightMode();
+ method public boolean isNightModeLocked();
+ method public boolean isUiModeLocked();
method public void setNightMode(int);
field public static java.lang.String ACTION_ENTER_CAR_MODE;
field public static java.lang.String ACTION_ENTER_DESK_MODE;
@@ -5924,6 +5935,7 @@
method public void notifyPendingSystemUpdate(long);
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
+ method public boolean removeKeyPair(android.content.ComponentName, java.lang.String);
method public boolean removeUser(android.content.ComponentName, android.os.UserHandle);
method public boolean resetPassword(java.lang.String, int);
method public void setAccountManagementDisabled(android.content.ComponentName, java.lang.String, boolean);
@@ -7682,12 +7694,16 @@
method public static boolean compareMimeTypes(java.lang.String, java.lang.String);
method public int describeContents();
method public java.lang.String[] filterMimeTypes(java.lang.String);
+ method public android.os.PersistableBundle getExtras();
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
method public boolean hasMimeType(java.lang.String);
+ method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.content.ClipDescription> CREATOR;
+ field public static final java.lang.String EXTRA_TARGET_COMPONENT_NAME = "android.content.extra.TARGET_COMPONENT_NAME";
+ field public static final java.lang.String EXTRA_USER_SERIAL_NUMBER = "android.content.extra.USER_SERIAL_NUMBER";
field public static final java.lang.String MIMETYPE_TEXT_HTML = "text/html";
field public static final java.lang.String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
field public static final java.lang.String MIMETYPE_TEXT_PLAIN = "text/plain";
@@ -8008,6 +8024,8 @@
method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public abstract deprecated void clearWallpaper() throws java.io.IOException;
method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public abstract android.content.Context createCredentialEncryptedStorageContext();
+ method public abstract android.content.Context createDeviceEncryptedStorageContext();
method public abstract android.content.Context createDisplayContext(android.view.Display);
method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] databaseList();
@@ -8030,9 +8048,7 @@
method public final int getColor(int);
method public final android.content.res.ColorStateList getColorStateList(int);
method public abstract android.content.ContentResolver getContentResolver();
- method public abstract java.io.File getCredentialEncryptedFilesDir();
method public abstract java.io.File getDatabasePath(java.lang.String);
- method public abstract java.io.File getDeviceEncryptedFilesDir();
method public abstract java.io.File getDir(java.lang.String, int);
method public final android.graphics.drawable.Drawable getDrawable(int);
method public abstract java.io.File getExternalCacheDir();
@@ -8053,6 +8069,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -8064,6 +8081,8 @@
method public abstract deprecated int getWallpaperDesiredMinimumHeight();
method public abstract deprecated int getWallpaperDesiredMinimumWidth();
method public abstract void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public abstract boolean isCredentialEncryptedStorage();
+ method public abstract boolean isDeviceEncryptedStorage();
method public boolean isRestricted();
method public final android.content.res.TypedArray obtainStyledAttributes(int[]);
method public final android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException;
@@ -8155,6 +8174,7 @@
field public static final int MODE_APPEND = 32768; // 0x8000
field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
field public static final deprecated int MODE_MULTI_PROCESS = 4; // 0x4
+ field public static final int MODE_NO_LOCALIZED_COLLATORS = 16; // 0x10
field public static final int MODE_PRIVATE = 0; // 0x0
field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1
field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2
@@ -8202,6 +8222,8 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public deprecated void clearWallpaper() throws java.io.IOException;
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createCredentialEncryptedStorageContext();
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -8223,9 +8245,7 @@
method public java.lang.ClassLoader getClassLoader();
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
- method public java.io.File getCredentialEncryptedFilesDir();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -8245,6 +8265,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -8252,6 +8273,8 @@
method public deprecated int getWallpaperDesiredMinimumHeight();
method public deprecated int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isCredentialEncryptedStorage();
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -8498,6 +8521,7 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
+ field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8536,8 +8560,10 @@
field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
field public static final java.lang.String ACTION_INTENT_FILTER_NEEDS_VERIFICATION = "android.intent.action.INTENT_FILTER_NEEDS_VERIFICATION";
field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
+ field public static final java.lang.String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN";
field public static final java.lang.String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+ field public static final java.lang.String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED = "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
@@ -8688,6 +8714,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
+ field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
@@ -9339,8 +9366,10 @@
field public java.lang.String backupAgentName;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
+ field public java.lang.String credentialEncryptedDataDir;
field public java.lang.String dataDir;
field public int descriptionRes;
+ field public java.lang.String deviceEncryptedDataDir;
field public boolean enabled;
field public int flags;
field public int largestWidthLimitDp;
@@ -9690,6 +9719,8 @@
method public abstract int getComponentEnabledSetting(android.content.ComponentName);
method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public abstract byte[] getEphemeralCookie();
+ method public abstract int getEphemeralCookieMaxSizeBytes();
method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public abstract java.lang.String getInstallerPackageName(java.lang.String);
@@ -9723,6 +9754,7 @@
method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public abstract void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
method public abstract boolean hasSystemFeature(java.lang.String);
+ method public abstract boolean isEphemeralApplication();
method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public abstract boolean isSafeMode();
method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -9742,6 +9774,7 @@
method public abstract void revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
+ method public abstract boolean setEphemeralCookie(byte[]);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
method public abstract void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
method public abstract void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
@@ -11855,6 +11888,7 @@
field public static final int PRIVATE = 34; // 0x22
field public static final int RAW10 = 37; // 0x25
field public static final int RAW12 = 38; // 0x26
+ field public static final int RAW_PRIVATE = 36; // 0x24
field public static final int RAW_SENSOR = 32; // 0x20
field public static final int RGB_565 = 4; // 0x4
field public static final int UNKNOWN = 0; // 0x0
@@ -21382,7 +21416,6 @@
method public void setOnKeyStatusChangeListener(android.media.MediaDrm.OnKeyStatusChangeListener, android.os.Handler);
method public void setPropertyByteArray(java.lang.String, byte[]);
method public void setPropertyString(java.lang.String, java.lang.String);
- method public void unprovisionDevice();
field public static final int EVENT_KEY_EXPIRED = 3; // 0x3
field public static final int EVENT_KEY_REQUIRED = 2; // 0x2
field public static final deprecated int EVENT_PROVISION_REQUIRED = 1; // 0x1
@@ -21993,6 +22026,7 @@
public static class MediaRouter.RouteInfo {
method public android.media.MediaRouter.RouteCategory getCategory();
method public java.lang.CharSequence getDescription();
+ method public int getDeviceType();
method public android.media.MediaRouter.RouteGroup getGroup();
method public android.graphics.drawable.Drawable getIconDrawable();
method public java.lang.CharSequence getName();
@@ -22011,6 +22045,10 @@
method public void requestSetVolume(int);
method public void requestUpdateVolume(int);
method public void setTag(java.lang.Object);
+ field public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
@@ -24507,7 +24545,9 @@
method public static void setThreadStatsTagBackup();
method public static void setThreadStatsTagRestore();
method public static void setThreadStatsUid(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
field public static final int UNSUPPORTED = -1; // 0xffffffff
}
@@ -25517,10 +25557,12 @@
field public static final java.lang.String EXTRA_NETWORK_INFO = "networkInfo";
field public static final java.lang.String EXTRA_NEW_RSSI = "newRssi";
field public static final java.lang.String EXTRA_NEW_STATE = "newState";
+ field public static final java.lang.String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state";
field public static final java.lang.String EXTRA_PREVIOUS_WIFI_STATE = "previous_wifi_state";
field public static final java.lang.String EXTRA_RESULTS_UPDATED = "resultsUpdated";
field public static final java.lang.String EXTRA_SUPPLICANT_CONNECTED = "connected";
field public static final java.lang.String EXTRA_SUPPLICANT_ERROR = "supplicantError";
+ field public static final java.lang.String EXTRA_WIFI_AP_STATE = "wifi_state";
field public static final java.lang.String EXTRA_WIFI_CONFIGURATION = "wifiConfiguration";
field public static final java.lang.String EXTRA_WIFI_CREDENTIAL_EVENT_TYPE = "et";
field public static final java.lang.String EXTRA_WIFI_CREDENTIAL_SSID = "ssid";
@@ -25532,6 +25574,12 @@
field public static final java.lang.String SCAN_RESULTS_AVAILABLE_ACTION = "android.net.wifi.SCAN_RESULTS";
field public static final java.lang.String SUPPLICANT_CONNECTION_CHANGE_ACTION = "android.net.wifi.supplicant.CONNECTION_CHANGE";
field public static final java.lang.String SUPPLICANT_STATE_CHANGED_ACTION = "android.net.wifi.supplicant.STATE_CHANGE";
+ field public static final java.lang.String WIFI_AP_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_AP_STATE_CHANGED";
+ field public static final int WIFI_AP_STATE_DISABLED = 11; // 0xb
+ field public static final int WIFI_AP_STATE_DISABLING = 10; // 0xa
+ field public static final int WIFI_AP_STATE_ENABLED = 13; // 0xd
+ field public static final int WIFI_AP_STATE_ENABLING = 12; // 0xc
+ field public static final int WIFI_AP_STATE_FAILED = 14; // 0xe
field public static final java.lang.String WIFI_CREDENTIAL_CHANGED_ACTION = "android.net.wifi.WIFI_CREDENTIAL_CHANGED";
field public static final int WIFI_CREDENTIAL_FORGOT = 1; // 0x1
field public static final int WIFI_CREDENTIAL_SAVED = 0; // 0x0
@@ -30039,9 +30087,14 @@
method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
method public boolean hasUserRestriction(java.lang.String);
method public boolean isManagedProfile();
+ method public boolean isQuietModeEnabled(android.os.UserHandle);
method public boolean isSystemUser();
method public boolean isUserAGoat();
method public boolean isUserRunning(android.os.UserHandle);
+ method public boolean isUserRunningAndLocked();
+ method public boolean isUserRunningAndLocked(android.os.UserHandle);
+ method public boolean isUserRunningAndUnlocked();
+ method public boolean isUserRunningAndUnlocked(android.os.UserHandle);
method public boolean isUserRunningOrStopping(android.os.UserHandle);
method public deprecated boolean setRestrictionsChallenge(java.lang.String);
method public deprecated void setUserRestriction(java.lang.String, boolean);
@@ -30428,6 +30481,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -31608,6 +31662,7 @@
ctor public ContactsContract.CommonDataKinds.Callable();
field public static final android.net.Uri CONTENT_FILTER_URI;
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -31639,6 +31694,7 @@
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DISPLAY_NAME = "data4";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
@@ -31754,6 +31810,7 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -31933,7 +31990,7 @@
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard";
field public static final android.net.Uri CONTENT_VCARD_URI;
- field public static final android.net.Uri CORP_CONTENT_FILTER_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -32062,10 +32119,12 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories";
field public static final android.net.Uri CONTENT_URI;
- field public static final android.net.Uri CORP_CONTENT_URI;
field public static final long DEFAULT = 0L; // 0x0L
field public static final java.lang.String DIRECTORY_AUTHORITY = "authority";
field public static final java.lang.String DISPLAY_NAME = "displayName";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+ field public static final long ENTERPRISE_DEFAULT = 1000000000L; // 0x3b9aca00L
+ field public static final long ENTERPRISE_LOCAL_INVISIBLE = 1000000001L; // 0x3b9aca01L
field public static final java.lang.String EXPORT_SUPPORT = "exportSupport";
field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2
field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0
@@ -32442,6 +32501,7 @@
field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type";
field public static final java.lang.String COLUMN_SIZE = "_size";
field public static final java.lang.String COLUMN_SUMMARY = "summary";
+ field public static final int FLAG_ARCHIVE = 2048; // 0x800
field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10
field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20
field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
@@ -35258,6 +35318,35 @@
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService";
}
+ public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
+ ctor public NotificationAssistantService();
+ method public final void adjustImportance(java.lang.String, android.service.notification.NotificationAssistantService.Adjustment);
+ method public final void clearAnnotation(java.lang.String);
+ method public void onNotificationActionClick(java.lang.String, long, int);
+ method public void onNotificationClick(java.lang.String, long);
+ method public abstract android.service.notification.NotificationAssistantService.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public void onNotificationRemoved(java.lang.String, long, int);
+ method public void onNotificationVisibilityChanged(java.lang.String, long, boolean);
+ method public final void setAnnotation(java.lang.String, android.app.Notification);
+ field public static final int REASON_APP_CANCEL = 8; // 0x8
+ field public static final int REASON_APP_CANCEL_ALL = 9; // 0x9
+ field public static final int REASON_DELEGATE_CANCEL = 2; // 0x2
+ field public static final int REASON_DELEGATE_CANCEL_ALL = 3; // 0x3
+ field public static final int REASON_DELEGATE_CLICK = 1; // 0x1
+ field public static final int REASON_DELEGATE_ERROR = 4; // 0x4
+ field public static final int REASON_GROUP_OPTIMIZATION = 13; // 0xd
+ field public static final int REASON_GROUP_SUMMARY_CANCELED = 12; // 0xc
+ field public static final int REASON_LISTENER_CANCEL = 10; // 0xa
+ field public static final int REASON_LISTENER_CANCEL_ALL = 11; // 0xb
+ field public static final int REASON_PACKAGE_BANNED = 7; // 0x7
+ field public static final int REASON_PACKAGE_CHANGED = 5; // 0x5
+ field public static final int REASON_USER_STOPPED = 6; // 0x6
+ }
+
+ public class NotificationAssistantService.Adjustment {
+ ctor public NotificationAssistantService.Adjustment(int, java.lang.CharSequence, android.net.Uri);
+ }
+
public abstract class NotificationListenerService extends android.app.Service {
ctor public NotificationListenerService();
method public final void cancelAllNotifications();
@@ -35301,11 +35390,19 @@
public static class NotificationListenerService.Ranking {
ctor public NotificationListenerService.Ranking();
+ method public int getImportance();
+ method public java.lang.CharSequence getImportanceExplanation();
method public java.lang.String getKey();
method public int getRank();
method public int getSuppressedVisualEffects();
method public boolean isAmbient();
method public boolean matchesInterruptionFilter();
+ field public static final int IMPORTANCE_DEFAULT = 0; // 0x0
+ field public static final int IMPORTANCE_HIGH = 1; // 0x1
+ field public static final int IMPORTANCE_LOW = -1; // 0xffffffff
+ field public static final int IMPORTANCE_MAX = 2; // 0x2
+ field public static final int IMPORTANCE_NONE = -2; // 0xfffffffe
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
}
public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
@@ -35387,6 +35484,7 @@
method public void onStopListening();
method public void onTileAdded();
method public void onTileRemoved();
+ method public final void showDialog(android.app.Dialog);
field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
}
@@ -37323,6 +37421,8 @@
method public void notifyConfigChangedForSubId(int);
method public void updateConfigForPhoneId(int, java.lang.String);
field public static final java.lang.String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED";
+ field public static final java.lang.String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS = "bool_allow_emergency_video_calls";
+ field public static final java.lang.String BOOL_ALLOW_VIDEO_PAUSE = "bool_allow_video_pause";
field public static final java.lang.String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool";
field public static final java.lang.String KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
field public static final java.lang.String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
@@ -37395,6 +37495,7 @@
field public static final java.lang.String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
field public static final java.lang.String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
field public static final java.lang.String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
+ field public static final java.lang.String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN = "vvm_cellular_data_required";
field public static final java.lang.String KEY_VVM_DESTINATION_NUMBER_STRING = "vvm_destination_number_string";
field public static final java.lang.String KEY_VVM_PORT_NUMBER_INT = "vvm_port_number_int";
field public static final java.lang.String KEY_VVM_TYPE_STRING = "vvm_type_string";
@@ -38479,6 +38580,8 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public void clearWallpaper();
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createCredentialEncryptedStorageContext();
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -38499,9 +38602,7 @@
method public java.lang.ClassLoader getClassLoader();
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
- method public java.io.File getCredentialEncryptedFilesDir();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -38521,6 +38622,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -38528,6 +38630,8 @@
method public int getWallpaperDesiredMinimumHeight();
method public int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isCredentialEncryptedStorage();
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -38654,6 +38758,8 @@
method public android.graphics.drawable.Drawable getDefaultActivityIcon();
method public java.lang.String getDefaultBrowserPackageName(int);
method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public byte[] getEphemeralCookie();
+ method public int getEphemeralCookieMaxSizeBytes();
method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public java.lang.String getInstallerPackageName(java.lang.String);
@@ -38686,6 +38792,7 @@
method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public void grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle);
method public boolean hasSystemFeature(java.lang.String);
+ method public boolean isEphemeralApplication();
method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public boolean isSafeMode();
method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -38706,6 +38813,7 @@
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public boolean setDefaultBrowserPackageName(java.lang.String, int);
+ method public boolean setEphemeralCookie(byte[]);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
method public void updatePermissionFlags(java.lang.String, java.lang.String, int, int, android.os.UserHandle);
method public void verifyIntentFilter(int, int, java.util.List<java.lang.String>);
@@ -40927,19 +41035,22 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList {
+ public final class LocaleList implements android.os.Parcelable {
ctor public LocaleList();
ctor public LocaleList(java.util.Locale);
ctor public LocaleList(java.util.Locale[]);
+ method public int describeContents();
method public static android.util.LocaleList forLanguageTags(java.lang.String);
method public java.util.Locale get(int);
- method public java.util.Locale getBestMatch(java.lang.String[]);
method public static android.util.LocaleList getDefault();
method public static android.util.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
method public java.util.Locale getPrimary();
method public boolean isEmpty();
method public int size();
method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
}
public final class Log {
@@ -42783,7 +42894,6 @@
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
method public void createContextMenu(android.view.ContextMenu);
method public void destroyDrawingCache();
- method public final boolean didLayoutParamsChange();
method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
method public void dispatchConfigurationChanged(android.content.res.Configuration);
method public void dispatchDisplayHint(int);
@@ -43009,7 +43119,6 @@
method public boolean isOpaque();
method protected boolean isPaddingOffsetRequired();
method public boolean isPaddingRelative();
- method public final boolean isPartialLayoutRequested();
method public boolean isPressed();
method public boolean isSaveEnabled();
method public boolean isSaveFromParentEnabled();
@@ -43621,7 +43730,6 @@
method protected void dispatchThawSelfOnly(android.util.SparseArray<android.os.Parcelable>);
method protected boolean drawChild(android.graphics.Canvas, android.view.View, long);
method public void endViewTransition(android.view.View);
- method public int findDependentLayoutAxes(android.view.View, int);
method public android.view.View focusSearch(android.view.View, int);
method public void focusableViewAvailable(android.view.View);
method public boolean gatherTransparentRegion(android.graphics.Region);
@@ -43688,8 +43796,6 @@
method public void requestChildFocus(android.view.View, android.view.View);
method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
method public void requestDisallowInterceptTouchEvent(boolean);
- method public void requestLayoutForChild(android.view.View);
- method public void requestPartialLayoutForChild(android.view.View);
method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void requestTransparentRegion(android.view.View);
method public void scheduleLayoutAnimation();
@@ -43804,7 +43910,6 @@
method public abstract void childHasTransientStateChanged(android.view.View, boolean);
method public abstract void clearChildFocus(android.view.View);
method public abstract void createContextMenu(android.view.ContextMenu);
- method public abstract int findDependentLayoutAxes(android.view.View, int);
method public abstract android.view.View focusSearch(android.view.View, int);
method public abstract void focusableViewAvailable(android.view.View);
method public abstract boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
@@ -43834,16 +43939,12 @@
method public abstract void requestDisallowInterceptTouchEvent(boolean);
method public abstract void requestFitSystemWindows();
method public abstract void requestLayout();
- method public abstract void requestLayoutForChild(android.view.View);
method public abstract boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public abstract void requestTransparentRegion(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View, float, float);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
- field public static final int FLAG_LAYOUT_AXIS_ANY = 3; // 0x3
- field public static final int FLAG_LAYOUT_AXIS_HORIZONTAL = 1; // 0x1
- field public static final int FLAG_LAYOUT_AXIS_VERTICAL = 2; // 0x2
}
public class ViewPropertyAnimator {
@@ -44074,8 +44175,7 @@
method public abstract void setContentView(int);
method public abstract void setContentView(android.view.View);
method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
- method public abstract void setDecorView(android.view.View);
- method public abstract void setDecorView(int);
+ method public abstract void setDecorCaptionShade(int);
method protected void setDefaultWindowFormat(int);
method public void setDimAmount(float);
method public void setDisableWallpaperTouchEvents(boolean);
@@ -44097,6 +44197,8 @@
method public void setMediaController(android.media.session.MediaController);
method public abstract void setNavigationBarColor(int);
method public void setReenterTransition(android.transition.Transition);
+ method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
+ method public final void setRestrictedCaptionAreaListener(android.view.Window.RestrictedCaptionAreaListener);
method public void setReturnTransition(android.transition.Transition);
method public void setSharedElementEnterTransition(android.transition.Transition);
method public void setSharedElementExitTransition(android.transition.Transition);
@@ -44125,6 +44227,9 @@
method public abstract void takeKeyEvents(boolean);
method public abstract void takeSurface(android.view.SurfaceHolder.Callback2);
method public abstract void togglePanel(int, android.view.KeyEvent);
+ field public static final int DECOR_CAPTION_SHADE_AUTO = 0; // 0x0
+ field public static final int DECOR_CAPTION_SHADE_DARK = 2; // 0x2
+ field public static final int DECOR_CAPTION_SHADE_LIGHT = 1; // 0x1
field protected static final deprecated int DEFAULT_FEATURES = 65; // 0x41
field public static final int FEATURE_ACTION_BAR = 8; // 0x8
field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
@@ -44179,6 +44284,10 @@
method public abstract android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
}
+ public static abstract interface Window.RestrictedCaptionAreaListener {
+ method public abstract void onRestrictedCaptionAreaChanged(android.graphics.Rect);
+ }
+
public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
@@ -45226,6 +45335,7 @@
field public int initialSelStart;
field public int inputType;
field public java.lang.CharSequence label;
+ field public android.util.LocaleList locales;
field public java.lang.String packageName;
field public java.lang.String privateImeOptions;
}
@@ -45516,7 +45626,7 @@
}
public final class SpellCheckerSubtype implements android.os.Parcelable {
- ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String);
+ ctor public deprecated SpellCheckerSubtype(int, java.lang.String, java.lang.String);
method public boolean containsExtraValueKey(java.lang.String);
method public int describeContents();
method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
@@ -52484,7 +52594,6 @@
public abstract class Reference {
method public void clear();
method public boolean enqueue();
- method public final synchronized boolean enqueueInternal();
method public T get();
method public boolean isEnqueued();
}
diff --git a/api/test-current.txt b/api/test-current.txt
index 4838702..a59d03d 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -28,6 +28,7 @@
field public static final java.lang.String BIND_INPUT_METHOD = "android.permission.BIND_INPUT_METHOD";
field public static final java.lang.String BIND_MIDI_DEVICE_SERVICE = "android.permission.BIND_MIDI_DEVICE_SERVICE";
field public static final java.lang.String BIND_NFC_SERVICE = "android.permission.BIND_NFC_SERVICE";
+ field public static final java.lang.String BIND_NOTIFICATION_ASSISTANT_SERVICE = "android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE";
field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
field public static final java.lang.String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
@@ -2727,6 +2728,7 @@
method public android.os.Bundle addAccountFromCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle confirmCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle editProperties(android.accounts.AccountAuthenticatorResponse, java.lang.String);
+ method public android.os.Bundle finishSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountCredentialsForCloning(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public android.os.Bundle getAccountRemovalAllowed(android.accounts.AccountAuthenticatorResponse, android.accounts.Account) throws android.accounts.NetworkErrorException;
method public abstract android.os.Bundle getAuthToken(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException;
@@ -2772,6 +2774,7 @@
method public void clearPassword(android.accounts.Account);
method public android.accounts.AccountManagerFuture<android.os.Bundle> confirmCredentials(android.accounts.Account, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public android.accounts.AccountManagerFuture<android.os.Bundle> editProperties(java.lang.String, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
+ method public android.accounts.AccountManagerFuture<android.os.Bundle> finishSession(android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler);
method public static android.accounts.AccountManager get(android.content.Context);
method public android.accounts.Account[] getAccounts();
method public android.accounts.Account[] getAccountsByType(java.lang.String);
@@ -3408,6 +3411,8 @@
method public android.view.Window getWindow();
method public android.view.WindowManager getWindowManager();
method public boolean hasWindowFocus();
+ method public boolean inMultiWindowMode();
+ method public boolean inPictureInPictureMode();
method public void invalidateOptionsMenu();
method public boolean isChangingConfigurations();
method public final boolean isChild();
@@ -3458,6 +3463,7 @@
method public void onLowMemory();
method public boolean onMenuItemSelected(int, android.view.MenuItem);
method public boolean onMenuOpened(int, android.view.Menu);
+ method public void onMultiWindowModeChanged(boolean);
method public boolean onNavigateUp();
method public boolean onNavigateUpFromChild(android.app.Activity);
method protected void onNewIntent(android.content.Intent);
@@ -3465,6 +3471,7 @@
method public void onOptionsMenuClosed(android.view.Menu);
method public void onPanelClosed(int, android.view.Menu);
method protected void onPause();
+ method public void onPictureInPictureModeChanged(boolean);
method protected void onPostCreate(android.os.Bundle);
method public void onPostCreate(android.os.Bundle, android.os.PersistableBundle);
method protected void onPostResume();
@@ -5529,6 +5536,8 @@
method public void enableCarMode(int);
method public int getCurrentModeType();
method public int getNightMode();
+ method public boolean isNightModeLocked();
+ method public boolean isUiModeLocked();
method public void setNightMode(int);
field public static java.lang.String ACTION_ENTER_CAR_MODE;
field public static java.lang.String ACTION_ENTER_DESK_MODE;
@@ -5793,6 +5802,7 @@
method public void lockNow();
method public void removeActiveAdmin(android.content.ComponentName);
method public boolean removeCrossProfileWidgetProvider(android.content.ComponentName, java.lang.String);
+ method public boolean removeKeyPair(android.content.ComponentName, java.lang.String);
method public boolean removeUser(android.content.ComponentName, android.os.UserHandle);
method public boolean resetPassword(java.lang.String, int);
method public void setAccountManagementDisabled(android.content.ComponentName, java.lang.String, boolean);
@@ -7441,12 +7451,16 @@
method public static boolean compareMimeTypes(java.lang.String, java.lang.String);
method public int describeContents();
method public java.lang.String[] filterMimeTypes(java.lang.String);
+ method public android.os.PersistableBundle getExtras();
method public java.lang.CharSequence getLabel();
method public java.lang.String getMimeType(int);
method public int getMimeTypeCount();
method public boolean hasMimeType(java.lang.String);
+ method public void setExtras(android.os.PersistableBundle);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.content.ClipDescription> CREATOR;
+ field public static final java.lang.String EXTRA_TARGET_COMPONENT_NAME = "android.content.extra.TARGET_COMPONENT_NAME";
+ field public static final java.lang.String EXTRA_USER_SERIAL_NUMBER = "android.content.extra.USER_SERIAL_NUMBER";
field public static final java.lang.String MIMETYPE_TEXT_HTML = "text/html";
field public static final java.lang.String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
field public static final java.lang.String MIMETYPE_TEXT_PLAIN = "text/plain";
@@ -7766,6 +7780,7 @@
method public abstract int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public abstract deprecated void clearWallpaper() throws java.io.IOException;
method public abstract android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public abstract android.content.Context createDeviceEncryptedStorageContext();
method public abstract android.content.Context createDisplayContext(android.view.Display);
method public abstract android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public abstract java.lang.String[] databaseList();
@@ -7789,7 +7804,6 @@
method public final android.content.res.ColorStateList getColorStateList(int);
method public abstract android.content.ContentResolver getContentResolver();
method public abstract java.io.File getDatabasePath(java.lang.String);
- method public abstract java.io.File getDeviceEncryptedFilesDir();
method public abstract java.io.File getDir(java.lang.String, int);
method public final android.graphics.drawable.Drawable getDrawable(int);
method public abstract java.io.File getExternalCacheDir();
@@ -7810,6 +7824,7 @@
method public abstract android.content.res.Resources getResources();
method public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public abstract android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public abstract java.io.File getSharedPreferencesPath(java.lang.String);
method public final java.lang.String getString(int);
method public final java.lang.String getString(int, java.lang.Object...);
method public abstract java.lang.Object getSystemService(java.lang.String);
@@ -7821,6 +7836,7 @@
method public abstract deprecated int getWallpaperDesiredMinimumHeight();
method public abstract deprecated int getWallpaperDesiredMinimumWidth();
method public abstract void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public abstract boolean isDeviceEncryptedStorage();
method public boolean isRestricted();
method public final android.content.res.TypedArray obtainStyledAttributes(int[]);
method public final android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException;
@@ -7908,6 +7924,7 @@
field public static final int MODE_APPEND = 32768; // 0x8000
field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
field public static final deprecated int MODE_MULTI_PROCESS = 4; // 0x4
+ field public static final int MODE_NO_LOCALIZED_COLLATORS = 16; // 0x10
field public static final int MODE_PRIVATE = 0; // 0x0
field public static final deprecated int MODE_WORLD_READABLE = 1; // 0x1
field public static final deprecated int MODE_WORLD_WRITEABLE = 2; // 0x2
@@ -7951,6 +7968,7 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public deprecated void clearWallpaper() throws java.io.IOException;
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -7973,7 +7991,6 @@
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -7993,6 +8010,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -8000,6 +8018,7 @@
method public deprecated int getWallpaperDesiredMinimumHeight();
method public deprecated int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -8244,6 +8263,7 @@
field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
+ field public static final java.lang.String ACTION_AVAILABILITY_CHANGED = "android.intent.action.AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED";
field public static final java.lang.String ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW";
field public static final java.lang.String ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY";
@@ -8280,8 +8300,10 @@
field public static final java.lang.String ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT";
field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
+ field public static final java.lang.String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN";
field public static final java.lang.String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+ field public static final java.lang.String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED = "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED";
field public static final java.lang.String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
@@ -8426,6 +8448,7 @@
field public static final java.lang.String EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER";
field public static final java.lang.String EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT";
field public static final java.lang.String EXTRA_PROCESS_TEXT_READONLY = "android.intent.extra.PROCESS_TEXT_READONLY";
+ field public static final java.lang.String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
field public static final java.lang.String EXTRA_REFERRER = "android.intent.extra.REFERRER";
field public static final java.lang.String EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME";
field public static final java.lang.String EXTRA_REMOTE_INTENT_TOKEN = "android.intent.extra.remote_intent_token";
@@ -9077,8 +9100,10 @@
field public java.lang.String backupAgentName;
field public java.lang.String className;
field public int compatibleWidthLimitDp;
+ field public java.lang.String credentialEncryptedDataDir;
field public java.lang.String dataDir;
field public int descriptionRes;
+ field public java.lang.String deviceEncryptedDataDir;
field public boolean enabled;
field public int flags;
field public int largestWidthLimitDp;
@@ -9400,6 +9425,8 @@
method public abstract int getComponentEnabledSetting(android.content.ComponentName);
method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public abstract byte[] getEphemeralCookie();
+ method public abstract int getEphemeralCookieMaxSizeBytes();
method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public abstract java.lang.String getInstallerPackageName(java.lang.String);
@@ -9431,6 +9458,7 @@
method public abstract java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
method public abstract android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public abstract boolean hasSystemFeature(java.lang.String);
+ method public abstract boolean isEphemeralApplication();
method public abstract boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public abstract boolean isSafeMode();
method public abstract java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -9448,6 +9476,7 @@
method public abstract android.content.pm.ResolveInfo resolveService(android.content.Intent, int);
method public abstract void setApplicationEnabledSetting(java.lang.String, int, int);
method public abstract void setComponentEnabledSetting(android.content.ComponentName, int, int);
+ method public abstract boolean setEphemeralCookie(byte[]);
method public abstract void setInstallerPackageName(java.lang.String, java.lang.String);
method public abstract void verifyPendingInstall(int, int);
field public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; // 0x0
@@ -11512,6 +11541,7 @@
field public static final int PRIVATE = 34; // 0x22
field public static final int RAW10 = 37; // 0x25
field public static final int RAW12 = 38; // 0x26
+ field public static final int RAW_PRIVATE = 36; // 0x24
field public static final int RAW_SENSOR = 32; // 0x20
field public static final int RGB_565 = 4; // 0x4
field public static final int UNKNOWN = 0; // 0x0
@@ -20703,6 +20733,7 @@
public static class MediaRouter.RouteInfo {
method public android.media.MediaRouter.RouteCategory getCategory();
method public java.lang.CharSequence getDescription();
+ method public int getDeviceType();
method public android.media.MediaRouter.RouteGroup getGroup();
method public android.graphics.drawable.Drawable getIconDrawable();
method public java.lang.CharSequence getName();
@@ -20721,6 +20752,10 @@
method public void requestSetVolume(int);
method public void requestUpdateVolume(int);
method public void setTag(java.lang.Object);
+ field public static final int DEVICE_TYPE_BLUETOOTH = 3; // 0x3
+ field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
+ field public static final int DEVICE_TYPE_TV = 1; // 0x1
+ field public static final int DEVICE_TYPE_UNKNOWN = 0; // 0x0
field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
@@ -22922,7 +22957,9 @@
method public static void incrementOperationCount(int);
method public static void incrementOperationCount(int, int);
method public static void setThreadStatsTag(int);
+ method public static void tagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void tagSocket(java.net.Socket) throws java.net.SocketException;
+ method public static void untagDatagramSocket(java.net.DatagramSocket) throws java.net.SocketException;
method public static void untagSocket(java.net.Socket) throws java.net.SocketException;
field public static final int UNSUPPORTED = -1; // 0xffffffff
}
@@ -28056,9 +28093,14 @@
method public android.os.Bundle getUserRestrictions();
method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
method public boolean hasUserRestriction(java.lang.String);
+ method public boolean isQuietModeEnabled(android.os.UserHandle);
method public boolean isSystemUser();
method public boolean isUserAGoat();
method public boolean isUserRunning(android.os.UserHandle);
+ method public boolean isUserRunningAndLocked();
+ method public boolean isUserRunningAndLocked(android.os.UserHandle);
+ method public boolean isUserRunningAndUnlocked();
+ method public boolean isUserRunningAndUnlocked(android.os.UserHandle);
method public boolean isUserRunningOrStopping(android.os.UserHandle);
method public deprecated boolean setRestrictionsChallenge(java.lang.String);
method public deprecated void setUserRestriction(java.lang.String, boolean);
@@ -28445,6 +28487,7 @@
method public android.preference.PreferenceScreen createPreferenceScreen(android.content.Context);
method public android.preference.Preference findPreference(java.lang.CharSequence);
method public static android.content.SharedPreferences getDefaultSharedPreferences(android.content.Context);
+ method public static java.lang.String getDefaultSharedPreferencesName(android.content.Context);
method public android.content.SharedPreferences getSharedPreferences();
method public int getSharedPreferencesMode();
method public java.lang.String getSharedPreferencesName();
@@ -29627,6 +29670,7 @@
ctor public ContactsContract.CommonDataKinds.Callable();
field public static final android.net.Uri CONTENT_FILTER_URI;
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -29658,6 +29702,7 @@
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/email_v2";
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String DISPLAY_NAME = "data4";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final android.net.Uri ENTERPRISE_CONTENT_LOOKUP_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
@@ -29773,6 +29818,7 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/phone_v2";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/phone_v2";
field public static final android.net.Uri CONTENT_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -29952,7 +29998,7 @@
field public static final android.net.Uri CONTENT_URI;
field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard";
field public static final android.net.Uri CONTENT_VCARD_URI;
- field public static final android.net.Uri CORP_CONTENT_FILTER_URI;
+ field public static final android.net.Uri ENTERPRISE_CONTENT_FILTER_URI;
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS";
field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES";
@@ -30081,10 +30127,12 @@
field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory";
field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories";
field public static final android.net.Uri CONTENT_URI;
- field public static final android.net.Uri CORP_CONTENT_URI;
field public static final long DEFAULT = 0L; // 0x0L
field public static final java.lang.String DIRECTORY_AUTHORITY = "authority";
field public static final java.lang.String DISPLAY_NAME = "displayName";
+ field public static final android.net.Uri ENTERPRISE_CONTENT_URI;
+ field public static final long ENTERPRISE_DEFAULT = 1000000000L; // 0x3b9aca00L
+ field public static final long ENTERPRISE_LOCAL_INVISIBLE = 1000000001L; // 0x3b9aca01L
field public static final java.lang.String EXPORT_SUPPORT = "exportSupport";
field public static final int EXPORT_SUPPORT_ANY_ACCOUNT = 2; // 0x2
field public static final int EXPORT_SUPPORT_NONE = 0; // 0x0
@@ -30431,6 +30479,7 @@
field public static final java.lang.String COLUMN_MIME_TYPE = "mime_type";
field public static final java.lang.String COLUMN_SIZE = "_size";
field public static final java.lang.String COLUMN_SUMMARY = "summary";
+ field public static final int FLAG_ARCHIVE = 2048; // 0x800
field public static final int FLAG_DIR_PREFERS_GRID = 16; // 0x10
field public static final int FLAG_DIR_PREFERS_LAST_MODIFIED = 32; // 0x20
field public static final int FLAG_DIR_SUPPORTS_CREATE = 8; // 0x8
@@ -33144,6 +33193,35 @@
field public static final java.lang.String SERVICE_INTERFACE = "android.service.notification.ConditionProviderService";
}
+ public abstract class NotificationAssistantService extends android.service.notification.NotificationListenerService {
+ ctor public NotificationAssistantService();
+ method public final void adjustImportance(java.lang.String, android.service.notification.NotificationAssistantService.Adjustment);
+ method public final void clearAnnotation(java.lang.String);
+ method public void onNotificationActionClick(java.lang.String, long, int);
+ method public void onNotificationClick(java.lang.String, long);
+ method public abstract android.service.notification.NotificationAssistantService.Adjustment onNotificationEnqueued(android.service.notification.StatusBarNotification, int, boolean);
+ method public void onNotificationRemoved(java.lang.String, long, int);
+ method public void onNotificationVisibilityChanged(java.lang.String, long, boolean);
+ method public final void setAnnotation(java.lang.String, android.app.Notification);
+ field public static final int REASON_APP_CANCEL = 8; // 0x8
+ field public static final int REASON_APP_CANCEL_ALL = 9; // 0x9
+ field public static final int REASON_DELEGATE_CANCEL = 2; // 0x2
+ field public static final int REASON_DELEGATE_CANCEL_ALL = 3; // 0x3
+ field public static final int REASON_DELEGATE_CLICK = 1; // 0x1
+ field public static final int REASON_DELEGATE_ERROR = 4; // 0x4
+ field public static final int REASON_GROUP_OPTIMIZATION = 13; // 0xd
+ field public static final int REASON_GROUP_SUMMARY_CANCELED = 12; // 0xc
+ field public static final int REASON_LISTENER_CANCEL = 10; // 0xa
+ field public static final int REASON_LISTENER_CANCEL_ALL = 11; // 0xb
+ field public static final int REASON_PACKAGE_BANNED = 7; // 0x7
+ field public static final int REASON_PACKAGE_CHANGED = 5; // 0x5
+ field public static final int REASON_USER_STOPPED = 6; // 0x6
+ }
+
+ public class NotificationAssistantService.Adjustment {
+ ctor public NotificationAssistantService.Adjustment(int, java.lang.CharSequence, android.net.Uri);
+ }
+
public abstract class NotificationListenerService extends android.app.Service {
ctor public NotificationListenerService();
method public final void cancelAllNotifications();
@@ -33180,11 +33258,19 @@
public static class NotificationListenerService.Ranking {
ctor public NotificationListenerService.Ranking();
+ method public int getImportance();
+ method public java.lang.CharSequence getImportanceExplanation();
method public java.lang.String getKey();
method public int getRank();
method public int getSuppressedVisualEffects();
method public boolean isAmbient();
method public boolean matchesInterruptionFilter();
+ field public static final int IMPORTANCE_DEFAULT = 0; // 0x0
+ field public static final int IMPORTANCE_HIGH = 1; // 0x1
+ field public static final int IMPORTANCE_LOW = -1; // 0xffffffff
+ field public static final int IMPORTANCE_MAX = 2; // 0x2
+ field public static final int IMPORTANCE_NONE = -2; // 0xfffffffe
+ field public static final int IMPORTANCE_UNSPECIFIED = -1000; // 0xfffffc18
}
public static class NotificationListenerService.RankingMap implements android.os.Parcelable {
@@ -33241,6 +33327,7 @@
method public void onStopListening();
method public void onTileAdded();
method public void onTileRemoved();
+ method public final void showDialog(android.app.Dialog);
field public static final java.lang.String ACTION_QS_TILE = "android.service.quicksettings.action.QS_TILE";
}
@@ -35137,6 +35224,7 @@
field public static final java.lang.String KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL = "voicemail_notification_persistent_bool";
field public static final java.lang.String KEY_VOICE_PRIVACY_DISABLE_UI_BOOL = "voice_privacy_disable_ui_bool";
field public static final java.lang.String KEY_VOLTE_REPLACEMENT_RAT_INT = "volte_replacement_rat_int";
+ field public static final java.lang.String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN = "vvm_cellular_data_required";
field public static final java.lang.String KEY_VVM_DESTINATION_NUMBER_STRING = "vvm_destination_number_string";
field public static final java.lang.String KEY_VVM_PORT_NUMBER_INT = "vvm_port_number_int";
field public static final java.lang.String KEY_VVM_TYPE_STRING = "vvm_type_string";
@@ -36167,6 +36255,7 @@
method public int checkUriPermission(android.net.Uri, java.lang.String, java.lang.String, int, int, int);
method public void clearWallpaper();
method public android.content.Context createConfigurationContext(android.content.res.Configuration);
+ method public android.content.Context createDeviceEncryptedStorageContext();
method public android.content.Context createDisplayContext(android.view.Display);
method public android.content.Context createPackageContext(java.lang.String, int) throws android.content.pm.PackageManager.NameNotFoundException;
method public java.lang.String[] databaseList();
@@ -36188,7 +36277,6 @@
method public java.io.File getCodeCacheDir();
method public android.content.ContentResolver getContentResolver();
method public java.io.File getDatabasePath(java.lang.String);
- method public java.io.File getDeviceEncryptedFilesDir();
method public java.io.File getDir(java.lang.String, int);
method public java.io.File getExternalCacheDir();
method public java.io.File[] getExternalCacheDirs();
@@ -36208,6 +36296,7 @@
method public android.content.res.Resources getResources();
method public android.content.SharedPreferences getSharedPreferences(java.lang.String, int);
method public android.content.SharedPreferences getSharedPreferences(java.io.File, int);
+ method public java.io.File getSharedPreferencesPath(java.lang.String);
method public java.lang.Object getSystemService(java.lang.String);
method public java.lang.String getSystemServiceName(java.lang.Class<?>);
method public android.content.res.Resources.Theme getTheme();
@@ -36215,6 +36304,7 @@
method public int getWallpaperDesiredMinimumHeight();
method public int getWallpaperDesiredMinimumWidth();
method public void grantUriPermission(java.lang.String, android.net.Uri, int);
+ method public boolean isDeviceEncryptedStorage();
method public java.io.FileInputStream openFileInput(java.lang.String) throws java.io.FileNotFoundException;
method public java.io.FileOutputStream openFileOutput(java.lang.String, int) throws java.io.FileNotFoundException;
method public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase.CursorFactory);
@@ -36338,6 +36428,8 @@
method public android.graphics.drawable.Drawable getDefaultActivityIcon();
method public java.lang.String getDefaultBrowserPackageName(int);
method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
+ method public byte[] getEphemeralCookie();
+ method public int getEphemeralCookieMaxSizeBytes();
method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
method public java.lang.String getInstallerPackageName(java.lang.String);
@@ -36368,6 +36460,7 @@
method public java.lang.CharSequence getUserBadgedLabel(java.lang.CharSequence, android.os.UserHandle);
method public android.content.res.XmlResourceParser getXml(java.lang.String, int, android.content.pm.ApplicationInfo);
method public boolean hasSystemFeature(java.lang.String);
+ method public boolean isEphemeralApplication();
method public boolean isPermissionRevokedByPolicy(java.lang.String, java.lang.String);
method public boolean isSafeMode();
method public java.util.List<android.content.pm.ResolveInfo> queryBroadcastReceivers(android.content.Intent, int);
@@ -36386,6 +36479,7 @@
method public void setApplicationEnabledSetting(java.lang.String, int, int);
method public void setComponentEnabledSetting(android.content.ComponentName, int, int);
method public boolean setDefaultBrowserPackageName(java.lang.String, int);
+ method public boolean setEphemeralCookie(byte[]);
method public void setInstallerPackageName(java.lang.String, java.lang.String);
method public void verifyPendingInstall(int, int);
}
@@ -38605,19 +38699,22 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList {
+ public final class LocaleList implements android.os.Parcelable {
ctor public LocaleList();
ctor public LocaleList(java.util.Locale);
ctor public LocaleList(java.util.Locale[]);
+ method public int describeContents();
method public static android.util.LocaleList forLanguageTags(java.lang.String);
method public java.util.Locale get(int);
- method public java.util.Locale getBestMatch(java.lang.String[]);
method public static android.util.LocaleList getDefault();
method public static android.util.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
method public java.util.Locale getPrimary();
method public boolean isEmpty();
method public int size();
method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
}
public final class Log {
@@ -40461,7 +40558,6 @@
method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
method public void createContextMenu(android.view.ContextMenu);
method public void destroyDrawingCache();
- method public final boolean didLayoutParamsChange();
method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
method public void dispatchConfigurationChanged(android.content.res.Configuration);
method public void dispatchDisplayHint(int);
@@ -40687,7 +40783,6 @@
method public boolean isOpaque();
method protected boolean isPaddingOffsetRequired();
method public boolean isPaddingRelative();
- method public final boolean isPartialLayoutRequested();
method public boolean isPressed();
method public boolean isSaveEnabled();
method public boolean isSaveFromParentEnabled();
@@ -41299,7 +41394,6 @@
method protected void dispatchThawSelfOnly(android.util.SparseArray<android.os.Parcelable>);
method protected boolean drawChild(android.graphics.Canvas, android.view.View, long);
method public void endViewTransition(android.view.View);
- method public int findDependentLayoutAxes(android.view.View, int);
method public android.view.View focusSearch(android.view.View, int);
method public void focusableViewAvailable(android.view.View);
method public boolean gatherTransparentRegion(android.graphics.Region);
@@ -41366,8 +41460,6 @@
method public void requestChildFocus(android.view.View, android.view.View);
method public boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
method public void requestDisallowInterceptTouchEvent(boolean);
- method public void requestLayoutForChild(android.view.View);
- method public void requestPartialLayoutForChild(android.view.View);
method public boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public void requestTransparentRegion(android.view.View);
method public void scheduleLayoutAnimation();
@@ -41482,7 +41574,6 @@
method public abstract void childHasTransientStateChanged(android.view.View, boolean);
method public abstract void clearChildFocus(android.view.View);
method public abstract void createContextMenu(android.view.ContextMenu);
- method public abstract int findDependentLayoutAxes(android.view.View, int);
method public abstract android.view.View focusSearch(android.view.View, int);
method public abstract void focusableViewAvailable(android.view.View);
method public abstract boolean getChildVisibleRect(android.view.View, android.graphics.Rect, android.graphics.Point);
@@ -41512,16 +41603,12 @@
method public abstract void requestDisallowInterceptTouchEvent(boolean);
method public abstract void requestFitSystemWindows();
method public abstract void requestLayout();
- method public abstract void requestLayoutForChild(android.view.View);
method public abstract boolean requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
method public abstract void requestTransparentRegion(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View);
method public abstract boolean showContextMenuForChild(android.view.View, float, float);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
method public abstract android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback, int);
- field public static final int FLAG_LAYOUT_AXIS_ANY = 3; // 0x3
- field public static final int FLAG_LAYOUT_AXIS_HORIZONTAL = 1; // 0x1
- field public static final int FLAG_LAYOUT_AXIS_VERTICAL = 2; // 0x2
}
public class ViewPropertyAnimator {
@@ -41752,8 +41839,7 @@
method public abstract void setContentView(int);
method public abstract void setContentView(android.view.View);
method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
- method public abstract void setDecorView(android.view.View);
- method public abstract void setDecorView(int);
+ method public abstract void setDecorCaptionShade(int);
method protected void setDefaultWindowFormat(int);
method public void setDimAmount(float);
method public void setElevation(float);
@@ -41774,6 +41860,8 @@
method public void setMediaController(android.media.session.MediaController);
method public abstract void setNavigationBarColor(int);
method public void setReenterTransition(android.transition.Transition);
+ method public abstract void setResizingCaptionDrawable(android.graphics.drawable.Drawable);
+ method public final void setRestrictedCaptionAreaListener(android.view.Window.RestrictedCaptionAreaListener);
method public void setReturnTransition(android.transition.Transition);
method public void setSharedElementEnterTransition(android.transition.Transition);
method public void setSharedElementExitTransition(android.transition.Transition);
@@ -41802,6 +41890,9 @@
method public abstract void takeKeyEvents(boolean);
method public abstract void takeSurface(android.view.SurfaceHolder.Callback2);
method public abstract void togglePanel(int, android.view.KeyEvent);
+ field public static final int DECOR_CAPTION_SHADE_AUTO = 0; // 0x0
+ field public static final int DECOR_CAPTION_SHADE_DARK = 2; // 0x2
+ field public static final int DECOR_CAPTION_SHADE_LIGHT = 1; // 0x1
field protected static final deprecated int DEFAULT_FEATURES = 65; // 0x41
field public static final int FEATURE_ACTION_BAR = 8; // 0x8
field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
@@ -41856,6 +41947,10 @@
method public abstract android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback, int);
}
+ public static abstract interface Window.RestrictedCaptionAreaListener {
+ method public abstract void onRestrictedCaptionAreaChanged(android.graphics.Rect);
+ }
+
public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
@@ -42901,6 +42996,7 @@
field public int initialSelStart;
field public int inputType;
field public java.lang.CharSequence label;
+ field public android.util.LocaleList locales;
field public java.lang.String packageName;
field public java.lang.String privateImeOptions;
}
@@ -43191,7 +43287,7 @@
}
public final class SpellCheckerSubtype implements android.os.Parcelable {
- ctor public SpellCheckerSubtype(int, java.lang.String, java.lang.String);
+ ctor public deprecated SpellCheckerSubtype(int, java.lang.String, java.lang.String);
method public boolean containsExtraValueKey(java.lang.String);
method public int describeContents();
method public java.lang.CharSequence getDisplayName(android.content.Context, java.lang.String, android.content.pm.ApplicationInfo);
@@ -49846,7 +49942,6 @@
public abstract class Reference {
method public void clear();
method public boolean enqueue();
- method public final synchronized boolean enqueueInternal();
method public T get();
method public boolean isEnqueued();
}
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index daf01ec..4f7a109 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -142,6 +142,7 @@
" am clear-debug-app\n" +
" am set-watch-heap <PROCESS> <MEM-LIMIT>\n" +
" am clear-watch-heap\n" +
+ " am bug-report [--progress]\n" +
" am monitor [--gdb <port>]\n" +
" am hang [--allow-restart]\n" +
" am restart\n" +
@@ -154,7 +155,7 @@
" am switch-user <USER_ID>\n" +
" am start-user <USER_ID>\n" +
" am unlock-user <USER_ID> [TOKEN_HEX]\n" +
- " am stop-user [-w] <USER_ID>\n" +
+ " am stop-user [-w] [-f] <USER_ID>\n" +
" am stack start <DISPLAY_ID> <INTENT>\n" +
" am stack movetask <TASK_ID> <STACK_ID> [true|false]\n" +
" am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" +
@@ -258,8 +259,9 @@
"\n" +
"am clear-watch-heap: clear the previously set-watch-heap.\n" +
"\n" +
- "am bug-report: request bug report generation; will launch UI\n" +
- " when done to select where it should be delivered.\n" +
+ "am bug-report: request bug report generation; will launch a notification\n" +
+ " when done to select where it should be delivered. Options are: \n" +
+ " --progress: will launch a notification right away to show its progress.\n" +
"\n" +
"am monitor: start monitoring for crashes or ANRs.\n" +
" --gdb: start gdbserv on the given port at crash/ANR\n" +
@@ -290,6 +292,7 @@
"am stop-user: stop execution of USER_ID, not allowing it to run any\n" +
" code until a later explicit start or switch to it.\n" +
" -w: wait for stop-user to complete.\n" +
+ " -f: force stop even if there are related users that cannot be stopped.\n" +
"\n" +
"am stack start: start a new activity on <DISPLAY_ID> using <INTENT>.\n" +
"\n" +
@@ -1071,7 +1074,17 @@
}
private void runBugReport() throws Exception {
- mAm.requestBugReport();
+ String opt;
+ boolean progress = false;
+ while ((opt=nextOption()) != null) {
+ if (opt.equals("--progress")) {
+ progress = true;
+ } else {
+ System.err.println("Error: Unknown option: " + opt);
+ return;
+ }
+ }
+ mAm.requestBugReport(progress);
System.out.println("Your lovely bug report is being created; please be patient.");
}
@@ -1131,10 +1144,13 @@
private void runStopUser() throws Exception {
boolean wait = false;
- String opt = null;
+ boolean force = false;
+ String opt;
while ((opt = nextOption()) != null) {
if ("-w".equals(opt)) {
wait = true;
+ } else if ("-f".equals(opt)) {
+ force = true;
} else {
System.err.println("Error: unknown option: " + opt);
return;
@@ -1143,7 +1159,7 @@
int user = Integer.parseInt(nextArgRequired());
StopUserCallback callback = wait ? new StopUserCallback() : null;
- int res = mAm.stopUser(user, callback);
+ int res = mAm.stopUser(user, force, callback);
if (res != ActivityManager.USER_OP_SUCCESS) {
String txt = "";
switch (res) {
@@ -1153,6 +1169,13 @@
case ActivityManager.USER_OP_UNKNOWN_USER:
txt = " (Unknown user " + user + ")";
break;
+ case ActivityManager.USER_OP_ERROR_IS_SYSTEM:
+ txt = " (System user cannot be stopped)";
+ break;
+ case ActivityManager.USER_OP_ERROR_RELATED_USERS_CANNOT_STOP:
+ txt = " (Can't stop user " + user
+ + " - one of its related users can't be stopped)";
+ break;
}
System.err.println("Switch failed: " + res + txt);
} else if (callback != null) {
diff --git a/cmds/dpm/src/com/android/commands/dpm/Dpm.java b/cmds/dpm/src/com/android/commands/dpm/Dpm.java
index ea53009..6dc3cd1 100644
--- a/cmds/dpm/src/com/android/commands/dpm/Dpm.java
+++ b/cmds/dpm/src/com/android/commands/dpm/Dpm.java
@@ -16,6 +16,8 @@
package com.android.commands.dpm;
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
import android.app.admin.IDevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
@@ -51,19 +53,21 @@
public void onShowUsage(PrintStream out) {
out.println(
"usage: dpm [subcommand] [options]\n" +
- "usage: dpm set-active-admin [ --user <USER_ID> ] <COMPONENT>\n" +
+ "usage: dpm set-active-admin [ --user <USER_ID> | current ] <COMPONENT>\n" +
// STOPSHIP Finalize it
- "usage: dpm set-device-owner [ --user <USER_ID> *EXPERIMENTAL* ] [ --name <NAME> ] <COMPONENT>\n" +
- "usage: dpm set-profile-owner [ --user <USER_ID> ] [ --name <NAME> ] <COMPONENT>\n" +
+ "usage: dpm set-device-owner [ --user <USER_ID> | current *EXPERIMENTAL* ] " +
+ "[ --name <NAME> ] <COMPONENT>\n" +
+ "usage: dpm set-profile-owner [ --user <USER_ID> | current ] [ --name <NAME> ] " +
+ "<COMPONENT>\n" +
"\n" +
"dpm set-active-admin: Sets the given component as active admin" +
" for an existing user.\n" +
"\n" +
- "dpm set-device-owner: Sets the given component as active admin, and its\n" +
- " package as device owner.\n" +
+ "dpm set-device-owner: Sets the given component as active admin, and its" +
+ " package as device owner.\n" +
"\n" +
"dpm set-profile-owner: Sets the given component as active admin and profile" +
- " owner for an existing user.\n");
+ " owner for an existing user.\n");
}
@Override
@@ -91,11 +95,24 @@
}
}
- private void parseArgs(boolean canHaveUser, boolean canHaveName) {
+ private void parseArgs(boolean canHaveName) {
String opt;
while ((opt = nextOption()) != null) {
- if (canHaveUser && "--user".equals(opt)) {
- mUserId = parseInt(nextArgRequired());
+ if ("--user".equals(opt)) {
+ String arg = nextArgRequired();
+ if ("current".equals(arg) || "cur".equals(arg)) {
+ mUserId = UserHandle.USER_CURRENT;
+ } else {
+ mUserId = parseInt(arg);
+ }
+ if (mUserId == UserHandle.USER_CURRENT) {
+ IActivityManager activityManager = ActivityManagerNative.getDefault();
+ try {
+ mUserId = activityManager.getCurrentUser().id;
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
+ }
} else if (canHaveName && "--name".equals(opt)) {
mName = nextArgRequired();
} else {
@@ -106,14 +123,14 @@
}
private void runSetActiveAdmin() throws RemoteException {
- parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ false);
+ parseArgs(/*canHaveName=*/ false);
mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
System.out.println("Success: Active admin set to component " + mComponent.toShortString());
}
private void runSetDeviceOwner() throws RemoteException {
- parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ true);
+ parseArgs(/*canHaveName=*/ true);
mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
try {
@@ -131,7 +148,7 @@
}
private void runSetProfileOwner() throws RemoteException {
- parseArgs(/*canHaveUser=*/ true, /*canHaveName=*/ true);
+ parseArgs(/*canHaveName=*/ true);
mDevicePolicyManager.setActiveAdmin(mComponent, true /*refreshing*/, mUserId);
try {
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 659dc73..ad1b3b5 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -16,11 +16,11 @@
package com.android.commands.pm;
-import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
-import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK;
+import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ASK;
import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER;
+import static android.content.pm.PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED;
import android.accounts.IAccountManager;
import android.app.ActivityManager;
@@ -139,19 +139,19 @@
}
if ("install-create".equals(op)) {
- return runInstallSession();
+ return runInstallCreate();
}
if ("install-write".equals(op)) {
- return runInstallSession();
+ return runInstallWrite();
}
if ("install-commit".equals(op)) {
- return runInstallSession();
+ return runInstallCommit();
}
if ("install-abandon".equals(op) || "install-destroy".equals(op)) {
- return runInstallSession();
+ return runInstallAbandon();
}
if ("set-installer".equals(op)) {
@@ -346,21 +346,203 @@
throw new IllegalArgumentException("ABI " + abi + " not supported on this device");
}
- private void writeSessionFile(int sessionId, String path, long sizeBytes) throws RemoteException {
+ /*
+ * Keep this around to support existing users of the "pm install" command that may not be
+ * able to be updated [or, at least informed the API has changed] such as ddmlib.
+ *
+ * Moving the implementation of "pm install" to "cmd package install" changes the executing
+ * context. Instead of being a stand alone process, "cmd package install" runs in the
+ * system_server process. Due to SELinux rules, system_server cannot access many directories;
+ * one of which being the package install staging directory [/data/local/tmp].
+ *
+ * The use of "adb install" or "cmd package install" over "pm install" is highly encouraged.
+ */
+ private int runInstall() throws RemoteException {
+ final InstallParams params = makeInstallParams();
+ final int sessionId = doCreateSession(params.sessionParams,
+ params.installerPackageName, params.userId);
+
+ try {
+ final String inPath = nextArg();
+ if (inPath == null && params.sessionParams.sizeBytes == 0) {
+ System.err.println("Error: must either specify a package size or an APK file");
+ return 1;
+ }
+ if (doWriteSession(sessionId, inPath, params.sessionParams.sizeBytes, "base.apk",
+ false /*logSuccess*/) != PackageInstaller.STATUS_SUCCESS) {
+ return 1;
+ }
+ if (doCommitSession(sessionId, false /*logSuccess*/)
+ != PackageInstaller.STATUS_SUCCESS) {
+ return 1;
+ }
+ return 0;
+ } finally {
+ try {
+ mInstaller.abandonSession(sessionId);
+ } catch (Exception ignore) {
+ }
+ }
+ }
+
+ private int runInstallAbandon() throws RemoteException {
+ final int sessionId = Integer.parseInt(nextArg());
+ return doAbandonSession(sessionId, true /*logSuccess*/);
+ }
+
+ private int runInstallCommit() throws RemoteException {
+ final int sessionId = Integer.parseInt(nextArg());
+ return doCommitSession(sessionId, true /*logSuccess*/);
+ }
+
+ private int runInstallCreate() throws RemoteException {
+ final InstallParams installParams = makeInstallParams();
+ final int sessionId = doCreateSession(installParams.sessionParams,
+ installParams.installerPackageName, installParams.userId);
+
+ // NOTE: adb depends on parsing this string
+ System.out.println("Success: created install session [" + sessionId + "]");
+ return PackageInstaller.STATUS_SUCCESS;
+ }
+
+ private int runInstallWrite() throws RemoteException {
+ long sizeBytes = -1;
+
+ String opt;
+ while ((opt = nextOption()) != null) {
+ if (opt.equals("-S")) {
+ sizeBytes = Long.parseLong(nextArg());
+ } else {
+ throw new IllegalArgumentException("Unknown option: " + opt);
+ }
+ }
+
+ final int sessionId = Integer.parseInt(nextArg());
+ final String splitName = nextArg();
+ final String path = nextArg();
+ return doWriteSession(sessionId, path, sizeBytes, splitName, true /*logSuccess*/);
+ }
+
+ private static class InstallParams {
+ SessionParams sessionParams;
+ String installerPackageName;
+ int userId = UserHandle.USER_ALL;
+ }
+
+ private InstallParams makeInstallParams() {
+ final SessionParams sessionParams = new SessionParams(SessionParams.MODE_FULL_INSTALL);
+ final InstallParams params = new InstallParams();
+ params.sessionParams = sessionParams;
+ String opt;
+ while ((opt = nextOption()) != null) {
+ switch (opt) {
+ case "-l":
+ sessionParams.installFlags |= PackageManager.INSTALL_FORWARD_LOCK;
+ break;
+ case "-r":
+ sessionParams.installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
+ break;
+ case "-i":
+ params.installerPackageName = nextArg();
+ if (params.installerPackageName == null) {
+ throw new IllegalArgumentException("Missing installer package");
+ }
+ break;
+ case "-t":
+ sessionParams.installFlags |= PackageManager.INSTALL_ALLOW_TEST;
+ break;
+ case "-s":
+ sessionParams.installFlags |= PackageManager.INSTALL_EXTERNAL;
+ break;
+ case "-f":
+ sessionParams.installFlags |= PackageManager.INSTALL_INTERNAL;
+ break;
+ case "-d":
+ sessionParams.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
+ break;
+ case "-g":
+ sessionParams.installFlags |= PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS;
+ break;
+ case "--originating-uri":
+ sessionParams.originatingUri = Uri.parse(nextOptionData());
+ break;
+ case "--referrer":
+ sessionParams.referrerUri = Uri.parse(nextOptionData());
+ break;
+ case "-p":
+ sessionParams.mode = SessionParams.MODE_INHERIT_EXISTING;
+ sessionParams.appPackageName = nextOptionData();
+ if (sessionParams.appPackageName == null) {
+ throw new IllegalArgumentException("Missing inherit package name");
+ }
+ break;
+ case "-S":
+ sessionParams.setSize(Long.parseLong(nextOptionData()));
+ break;
+ case "--abi":
+ sessionParams.abiOverride = checkAbiArgument(nextOptionData());
+ break;
+ case "--ephemeral":
+ sessionParams.installFlags |= PackageManager.INSTALL_EPHEMERAL;
+ break;
+ case "--user":
+ params.userId = UserHandle.parseUserArg(nextOptionData());
+ break;
+ case "--install-location":
+ sessionParams.installLocation = Integer.parseInt(nextOptionData());
+ break;
+ case "--force-uuid":
+ sessionParams.installFlags |= PackageManager.INSTALL_FORCE_VOLUME_UUID;
+ sessionParams.volumeUuid = nextOptionData();
+ if ("internal".equals(sessionParams.volumeUuid)) {
+ sessionParams.volumeUuid = null;
+ }
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown option " + opt);
+ }
+ }
+ return params;
+ }
+
+ private int doCreateSession(SessionParams params, String installerPackageName, int userId)
+ throws RemoteException {
+ userId = translateUserId(userId, "runInstallCreate");
+ if (userId == UserHandle.USER_ALL) {
+ userId = UserHandle.USER_SYSTEM;
+ params.installFlags |= PackageManager.INSTALL_ALL_USERS;
+ }
+
+ final int sessionId = mInstaller.createSession(params, installerPackageName, userId);
+ return sessionId;
+ }
+
+ private int doWriteSession(int sessionId, String inPath, long sizeBytes, String splitName,
+ boolean logSuccess) throws RemoteException {
+ if ("-".equals(inPath)) {
+ inPath = null;
+ } else if (inPath != null) {
+ final File file = new File(inPath);
+ if (file.isFile()) {
+ sizeBytes = file.length();
+ }
+ }
+
final SessionInfo info = mInstaller.getSessionInfo(sessionId);
PackageInstaller.Session session = null;
InputStream in = null;
OutputStream out = null;
try {
- session = new PackageInstaller.Session(mInstaller.openSession(sessionId));
+ session = new PackageInstaller.Session(
+ mInstaller.openSession(sessionId));
- if (path == null) {
- in = new SizedInputStream(System.in, sizeBytes);
+ if (inPath != null) {
+ in = new FileInputStream(inPath);
} else {
- in = new FileInputStream(path);
+ in = new SizedInputStream(System.in, sizeBytes);
}
- out = session.openWrite("base.apk", 0, sizeBytes);
+ out = session.openWrite(splitName, 0, sizeBytes);
int total = 0;
byte[] buffer = new byte[65536];
@@ -375,7 +557,14 @@
}
}
session.fsync(out);
- } catch (IOException ignore) {
+
+ if (logSuccess) {
+ System.out.println("Success: streamed " + total + " bytes");
+ }
+ return PackageInstaller.STATUS_SUCCESS;
+ } catch (IOException e) {
+ System.err.println("Error: failed to write; " + e.getMessage());
+ return PackageInstaller.STATUS_FAILURE;
} finally {
IoUtils.closeQuietly(out);
IoUtils.closeQuietly(in);
@@ -383,10 +572,11 @@
}
}
- private int commitSessionFile(int sessionId) throws RemoteException {
+ private int doCommitSession(int sessionId, boolean logSuccess) throws RemoteException {
PackageInstaller.Session session = null;
try {
- session = new PackageInstaller.Session(mInstaller.openSession(sessionId));
+ session = new PackageInstaller.Session(
+ mInstaller.openSession(sessionId));
final LocalIntentReceiver receiver = new LocalIntentReceiver();
session.commit(receiver.getIntentSender());
@@ -395,10 +585,13 @@
final int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS,
PackageInstaller.STATUS_FAILURE);
if (status == PackageInstaller.STATUS_SUCCESS) {
- System.out.println("Success");
+ if (logSuccess) {
+ System.out.println("Success");
+ }
} else {
System.err.println("Failure ["
+ result.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE) + "]");
+ System.err.println("Failure details: " + result.getExtras());
}
return status;
} finally {
@@ -406,98 +599,18 @@
}
}
- /*
- * Keep this around to support existing users of the "pm install" command that may not be
- * able to be updated [or, at least informed the API has changed] such as ddmlib.
- *
- * Moving the implementation of "pm install" to "cmd package install" changes the executing
- * context. Instead of being a stand alone process, "cmd package install" runs in the
- * system_server process. Due to SELinux rules, system_server cannot access many directories;
- * one of which being the package install staging directory [/data/local/tmp].
- *
- * The use of "adb install" or "cmd package install" over "pm install" is highly encouraged.
- */
- private int runInstall() throws RemoteException {
- int userId = UserHandle.USER_ALL;
- String installerPackageName = null;
-
- final SessionParams params = new SessionParams(SessionParams.MODE_FULL_INSTALL);
-
- String opt;
- while ((opt = nextOption()) != null) {
- if (opt.equals("-l")) {
- params.installFlags |= PackageManager.INSTALL_FORWARD_LOCK;
- } else if (opt.equals("-r")) {
- params.installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
- } else if (opt.equals("-i")) {
- installerPackageName = nextArg();
- if (installerPackageName == null) {
- throw new IllegalArgumentException("Missing installer package");
- }
- } else if (opt.equals("-t")) {
- params.installFlags |= PackageManager.INSTALL_ALLOW_TEST;
- } else if (opt.equals("-s")) {
- params.installFlags |= PackageManager.INSTALL_EXTERNAL;
- } else if (opt.equals("-f")) {
- params.installFlags |= PackageManager.INSTALL_INTERNAL;
- } else if (opt.equals("-d")) {
- params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
- } else if (opt.equals("-g")) {
- params.installFlags |= PackageManager.INSTALL_GRANT_RUNTIME_PERMISSIONS;
- } else if (opt.equals("--originating-uri")) {
- params.originatingUri = Uri.parse(nextOptionData());
- } else if (opt.equals("--referrer")) {
- params.referrerUri = Uri.parse(nextOptionData());
- } else if (opt.equals("-p")) {
- params.mode = SessionParams.MODE_INHERIT_EXISTING;
- params.appPackageName = nextOptionData();
- if (params.appPackageName == null) {
- throw new IllegalArgumentException("Missing inherit package name");
- }
- } else if (opt.equals("-S")) {
- params.setSize(Long.parseLong(nextOptionData()));
- } else if (opt.equals("--abi")) {
- params.abiOverride = checkAbiArgument(nextOptionData());
- } else if (opt.equals("--user")) {
- userId = Integer.parseInt(nextOptionData());
- } else if (opt.equals("--install-location")) {
- params.installLocation = Integer.parseInt(nextOptionData());
- } else if (opt.equals("--force-uuid")) {
- params.installFlags |= PackageManager.INSTALL_FORCE_VOLUME_UUID;
- params.volumeUuid = nextOptionData();
- if ("internal".equals(params.volumeUuid)) {
- params.volumeUuid = null;
- }
- } else {
- throw new IllegalArgumentException("Unknown option " + opt);
+ private int doAbandonSession(int sessionId, boolean logSuccess) throws RemoteException {
+ PackageInstaller.Session session = null;
+ try {
+ session = new PackageInstaller.Session(mInstaller.openSession(sessionId));
+ session.abandon();
+ if (logSuccess) {
+ System.out.println("Success");
}
+ return PackageInstaller.STATUS_SUCCESS;
+ } finally {
+ IoUtils.closeQuietly(session);
}
-
- userId = translateUserId(userId, "runInstallCreate");
- if (userId == UserHandle.USER_ALL) {
- userId = UserHandle.USER_SYSTEM;
- params.installFlags |= PackageManager.INSTALL_ALL_USERS;
- }
-
- long sizeBytes = params.sizeBytes;
- String path = nextArg();
- if ("-".equals(path)) {
- path = null;
- } else if (path != null) {
- final File file = new File(path);
- if (file.isFile()) {
- sizeBytes = file.length();
- }
- }
-
- final int sessionId = mInstaller.createSession(params, installerPackageName, userId);
-
- writeSessionFile(sessionId, path, sizeBytes);
- return commitSessionFile(sessionId);
- }
-
- private int runInstallSession() {
- return runShellCommand("package", mArgs);
}
/**
@@ -796,6 +909,10 @@
flags |= UserInfo.FLAG_MANAGED_PROFILE;
} else if ("--restricted".equals(opt)) {
flags |= UserInfo.FLAG_RESTRICTED;
+ } else if ("--ephemeral".equals(opt)) {
+ flags |= UserInfo.FLAG_EPHEMERAL;
+ } else if ("--guest".equals(opt)) {
+ flags |= UserInfo.FLAG_GUEST;
} else {
System.err.println("Error: unknown option " + opt);
return showUsage();
@@ -1354,7 +1471,7 @@
System.err.println(" pm get-install-location");
System.err.println(" pm set-permission-enforced PERMISSION [true|false]");
System.err.println(" pm trim-caches DESIRED_FREE_SPACE [internal|UUID]");
- System.err.println(" pm create-user [--profileOf USER_ID] [--managed] [--restricted] USER_NAME");
+ System.err.println(" pm create-user [--profileOf USER_ID] [--managed] [--restricted] [--ephemeral] [--guest] USER_NAME");
System.err.println(" pm remove-user USER_ID");
System.err.println(" pm get-max-users");
System.err.println("");
diff --git a/cmds/settings/src/com/android/commands/settings/SettingsCmd.java b/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
index 726167e..e63a1f5 100644
--- a/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
+++ b/cmds/settings/src/com/android/commands/settings/SettingsCmd.java
@@ -76,7 +76,12 @@
// --user specified more than once; invalid
break;
}
- mUser = Integer.parseInt(nextArg());
+ arg = nextArg();
+ if ("current".equals(arg) || "cur".equals(arg)) {
+ mUser = UserHandle.USER_CURRENT;
+ } else {
+ mUser = Integer.parseInt(arg);
+ }
} else if (mVerb == CommandVerb.UNSPECIFIED) {
if ("get".equalsIgnoreCase(arg)) {
mVerb = CommandVerb.GET;
@@ -129,12 +134,14 @@
}
if (valid) {
- if (mUser < 0) {
- mUser = UserHandle.USER_SYSTEM;
- }
-
try {
IActivityManager activityManager = ActivityManagerNative.getDefault();
+ if (mUser == UserHandle.USER_CURRENT) {
+ mUser = activityManager.getCurrentUser().id;
+ }
+ if (mUser < 0) {
+ mUser = UserHandle.USER_SYSTEM;
+ }
IContentProvider provider = null;
IBinder token = new Binder();
try {
@@ -286,13 +293,13 @@
}
private static void printUsage() {
- System.err.println("usage: settings [--user NUM] get namespace key");
- System.err.println(" settings [--user NUM] put namespace key value");
- System.err.println(" settings [--user NUM] delete namespace key");
- System.err.println(" settings [--user NUM] list namespace");
+ System.err.println("usage: settings [--user <USER_ID> | current] get namespace key");
+ System.err.println(" settings [--user <USER_ID> | current] put namespace key value");
+ System.err.println(" settings [--user <USER_ID> | current] delete namespace key");
+ System.err.println(" settings [--user <USER_ID> | current] list namespace");
System.err.println("\n'namespace' is one of {system, secure, global}, case-insensitive");
- System.err.println("If '--user NUM' is not given, the operations are performed on the "
- + "system user.");
+ System.err.println("If '--user <USER_ID> | current' is not given, the operations are "
+ + "performed on the system user.");
}
public static String resolveCallingPackage() {
diff --git a/core/java/android/accounts/AbstractAccountAuthenticator.java b/core/java/android/accounts/AbstractAccountAuthenticator.java
index 041f591..a312e3f 100644
--- a/core/java/android/accounts/AbstractAccountAuthenticator.java
+++ b/core/java/android/accounts/AbstractAccountAuthenticator.java
@@ -18,6 +18,7 @@
import android.os.Bundle;
import android.os.RemoteException;
+import android.text.TextUtils;
import android.os.Binder;
import android.os.IBinder;
import android.content.pm.PackageManager;
@@ -121,24 +122,28 @@
* This is used in the default implementation of
* {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}.
*/
- private static final String KEY_AUTH_TOKEN_TYPE = "android.accounts.KEY_AUTH_TOKEN_TYPE";
+ private static final String KEY_AUTH_TOKEN_TYPE =
+ "android.accounts.AbstractAccountAuthenticato.KEY_AUTH_TOKEN_TYPE";
/**
* Bundle key used for the {@link String} array of required features in
* session bundle. This is used in the default implementation of
* {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}.
*/
- private static final String KEY_REQUIRED_FEATURES = "android.accounts.AbstractAccountAuthenticator.KEY_REQUIRED_FEATURES";
+ private static final String KEY_REQUIRED_FEATURES =
+ "android.accounts.AbstractAccountAuthenticator.KEY_REQUIRED_FEATURES";
/**
* Bundle key used for the {@link Bundle} options in session bundle. This is
* used in default implementation of {@link #startAddAccountSession} and
* {@link startUpdateCredentialsSession}.
*/
- private static final String KEY_OPTIONS = "android.accounts.AbstractAccountAuthenticator.KEY_OPTIONS";
+ private static final String KEY_OPTIONS =
+ "android.accounts.AbstractAccountAuthenticator.KEY_OPTIONS";
/**
* Bundle key used for the {@link Account} account in session bundle. This is used
* used in default implementation of {@link startUpdateCredentialsSession}.
*/
- private static final String KEY_ACCOUNT = "android.accounts.AbstractAccountAuthenticator.KEY_ACCOUNT";
+ private static final String KEY_ACCOUNT =
+ "android.accounts.AbstractAccountAuthenticator.KEY_ACCOUNT";
private final Context mContext;
@@ -418,6 +423,7 @@
}
Log.v(TAG, "startUpdateCredentialsSession: result "
+ AccountManager.sanitizeResult(result));
+
}
if (result != null) {
response.onResult(result);
@@ -425,6 +431,33 @@
} catch (Exception e) {
handleException(response, "startUpdateCredentialsSession",
account.toString() + "," + authTokenType, e);
+
+ }
+ }
+
+ public void finishSession(
+ IAccountAuthenticatorResponse response,
+ String accountType,
+ Bundle sessionBundle) throws RemoteException {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "finishSession: accountType " + accountType);
+ }
+ checkBinderPermission();
+ try {
+ final Bundle result = AbstractAccountAuthenticator.this.finishSession(
+ new AccountAuthenticatorResponse(response), accountType, sessionBundle);
+ if (result != null) {
+ result.keySet(); // force it to be unparcelled
+ }
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "finishSession: result " + AccountManager.sanitizeResult(result));
+ }
+ if (result != null) {
+ response.onResult(result);
+ }
+ } catch (Exception e) {
+ handleException(response, "finishSession", accountType, e);
+
}
}
}
@@ -697,7 +730,13 @@
/**
* Starts the add account session to authenticate user to an account of the
- * specified accountType.
+ * specified accountType. No file I/O should be performed in this call.
+ * Account should be added to device only when {@link #finishSession} is
+ * called after this.
+ * <p>
+ * Note: when overriding this method, {@link #finishSession} should be
+ * overridden too.
+ * </p>
*
* @param response to send the result back to the AccountManager, will never
* be null
@@ -722,9 +761,13 @@
* </ul>
* @throws NetworkErrorException if the authenticator could not honor the
* request due to a network error
+ * @see #finishSession(AccountAuthenticatorResponse, String, Bundle)
*/
- public Bundle startAddAccountSession(final AccountAuthenticatorResponse response,
- final String accountType, final String authTokenType, final String[] requiredFeatures,
+ public Bundle startAddAccountSession(
+ final AccountAuthenticatorResponse response,
+ final String accountType,
+ final String authTokenType,
+ final String[] requiredFeatures,
final Bundle options)
throws NetworkErrorException {
new Thread(new Runnable() {
@@ -744,34 +787,43 @@
}
/**
- * Asks user to re-authenticate for an account but defers updating the locally stored
- * credentials.
+ * Asks user to re-authenticate for an account but defers updating the
+ * locally stored credentials. No file I/O should be performed in this call.
+ * Local credentials should be updated only when {@link #finishSession} is
+ * called after this.
+ * <p>
+ * Note: when overriding this method, {@link #finishSession} should be
+ * overridden too.
+ * </p>
*
* @param response to send the result back to the AccountManager, will never
* be null
* @param account the account whose credentials are to be updated, will
* never be null
* @param authTokenType the type of auth token to retrieve after updating
- * the credentials, may be null (TODO)
+ * the credentials, may be null
* @param options a Bundle of authenticator-specific options, may be null
* @return a Bundle result or null if the result is to be returned via the
* response. The result will contain either:
* <ul>
* <li>{@link AccountManager#KEY_INTENT}, or
- * <li>{@link AccountManager#KEY_ACCOUNT_SESSION_BUNDLE} for updating the
- * locally stored credentials later, and if account is
- * re-authenticated, {@link AccountManager#KEY_PASSWORD} and
- * {@link AccountManager#KEY_ACCOUNT_STATUS_TOKEN} for checking the
- * status of the account later, or
+ * <li>{@link AccountManager#KEY_ACCOUNT_SESSION_BUNDLE} for
+ * updating the locally stored credentials later, and if account is
+ * re-authenticated, optional {@link AccountManager#KEY_PASSWORD}
+ * and {@link AccountManager#KEY_ACCOUNT_STATUS_TOKEN} for checking
+ * the status of the account later, or
* <li>{@link AccountManager#KEY_ERROR_CODE} and
* {@link AccountManager#KEY_ERROR_MESSAGE} to indicate an error
* </ul>
* @throws NetworkErrorException if the authenticator could not honor the
* request due to a network error
+ * @see #finishSession(AccountAuthenticatorResponse, String, Bundle)
*/
- public Bundle startUpdateCredentialsSession(final AccountAuthenticatorResponse response,
- final Account account, final String authTokenType, final Bundle options)
- throws NetworkErrorException {
+ public Bundle startUpdateCredentialsSession(
+ final AccountAuthenticatorResponse response,
+ final Account account,
+ final String authTokenType,
+ final Bundle options) throws NetworkErrorException {
new Thread(new Runnable() {
@Override
public void run() {
@@ -787,4 +839,102 @@
}).start();
return null;
}
+
+ /**
+ * Finishes the session started by #startAddAccountSession or
+ * #startUpdateCredentials by installing the account to device with
+ * AccountManager, or updating the local credentials. File I/O may be
+ * performed in this call.
+ * <p>
+ * Note: when overriding this method, {@link #startAddAccountSession} and
+ * {@link #startUpdateCredentialsSession} should be overridden too.
+ * </p>
+ *
+ * @param response to send the result back to the AccountManager, will never
+ * be null
+ * @param accountType the type of account to authenticate with, will never
+ * be null
+ * @param sessionBundle a bundle of session data created by
+ * {@link #startAddAccountSession} used for adding account to
+ * device, or by {@link #startUpdateCredentialsSession} used for
+ * updating local credentials.
+ * @return a Bundle result or null if the result is to be returned via the
+ * response. The result will contain either:
+ * <ul>
+ * <li>{@link AccountManager#KEY_INTENT}, or
+ * <li>{@link AccountManager#KEY_ACCOUNT_NAME} and
+ * {@link AccountManager#KEY_ACCOUNT_TYPE} of the account that was
+ * added or local credentials were updated, or
+ * <li>{@link AccountManager#KEY_ERROR_CODE} and
+ * {@link AccountManager#KEY_ERROR_MESSAGE} to indicate an error
+ * </ul>
+ * @throws NetworkErrorException
+ * @see #startAddAccountSession and #startUpdateCredentialsSession
+ */
+ public Bundle finishSession(
+ final AccountAuthenticatorResponse response,
+ final String accountType,
+ final Bundle sessionBundle) throws NetworkErrorException {
+ if (TextUtils.isEmpty(accountType)) {
+ Log.e(TAG, "Account type cannot be empty.");
+ Bundle result = new Bundle();
+ result.putInt(AccountManager.KEY_ERROR_CODE, AccountManager.ERROR_CODE_BAD_ARGUMENTS);
+ result.putString(AccountManager.KEY_ERROR_MESSAGE,
+ "accountType cannot be empty.");
+ return result;
+ }
+
+ if (sessionBundle == null) {
+ Log.e(TAG, "Session bundle cannot be null.");
+ Bundle result = new Bundle();
+ result.putInt(AccountManager.KEY_ERROR_CODE, AccountManager.ERROR_CODE_BAD_ARGUMENTS);
+ result.putString(AccountManager.KEY_ERROR_MESSAGE,
+ "sessionBundle cannot be null.");
+ return result;
+ }
+
+ if (!sessionBundle.containsKey(KEY_AUTH_TOKEN_TYPE)) {
+ // We cannot handle Session bundle not created by default startAddAccountSession(...)
+ // nor startUpdateCredentialsSession(...) implementation. Return error.
+ Bundle result = new Bundle();
+ result.putInt(AccountManager.KEY_ERROR_CODE,
+ AccountManager.ERROR_CODE_UNSUPPORTED_OPERATION);
+ result.putString(AccountManager.KEY_ERROR_MESSAGE,
+ "Authenticator must override finishSession if startAddAccountSession"
+ + " or startUpdateCredentialsSession is overridden.");
+ response.onResult(result);
+ return result;
+ }
+ String authTokenType = sessionBundle.getString(KEY_AUTH_TOKEN_TYPE);
+ Bundle options = sessionBundle.getBundle(KEY_OPTIONS);
+ String[] requiredFeatures = sessionBundle.getStringArray(KEY_REQUIRED_FEATURES);
+ Account account = sessionBundle.getParcelable(KEY_ACCOUNT);
+ boolean containsKeyAccount = sessionBundle.containsKey(KEY_ACCOUNT);
+
+ // Actual options passed to add account or update credentials flow.
+ Bundle sessionOptions = new Bundle(sessionBundle);
+ // Remove redundant extras in session bundle before passing it to addAccount(...) or
+ // updateCredentials(...).
+ sessionOptions.remove(KEY_AUTH_TOKEN_TYPE);
+ sessionOptions.remove(KEY_REQUIRED_FEATURES);
+ sessionOptions.remove(KEY_OPTIONS);
+ sessionOptions.remove(KEY_ACCOUNT);
+
+ if (options != null) {
+ // options may contains old system info such as
+ // AccountManager.KEY_ANDROID_PACKAGE_NAME required by the add account flow or update
+ // credentials flow, we should replace with the new values of the current call added
+ // to sessionBundle by AccountManager or AccountManagerService.
+ options.putAll(sessionOptions);
+ sessionOptions = options;
+ }
+
+ // Session bundle created by startUpdateCredentialsSession default implementation should
+ // contain KEY_ACCOUNT.
+ if (containsKeyAccount) {
+ return updateCredentials(response, account, authTokenType, options);
+ }
+ // Otherwise, session bundle was created by startAddAccountSession default implementation.
+ return addAccount(response, accountType, authTokenType, requiredFeatures, sessionOptions);
+ }
}
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 5557905..ada1ac2 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -2617,7 +2617,8 @@
* <p>
* <p>
* <b>NOTE:</b> The account will not be installed to the device by calling
- * this api alone.
+ * this api alone. #finishSession should be called after this to install the
+ * account on device.
*
* @param accountType The type of account to add; must not be null
* @param authTokenType The type of auth token (see {@link #getAuthToken})
@@ -2665,6 +2666,7 @@
* problem creating a new account, usually because of network
* trouble
* </ul>
+ * @see #finishSession
*/
public AccountManagerFuture<Bundle> startAddAccountSession(
final String accountType,
@@ -2697,14 +2699,14 @@
/**
* Asks the user to enter a new password for an account but not updating the
- * saved credentials for the account until finishSession is
- * called.
+ * saved credentials for the account until {@link #finishSession} is called.
* <p>
* This method may be called from any thread, but the returned
* {@link AccountManagerFuture} must not be used on the main thread.
* <p>
* <b>NOTE:</b> The saved credentials for the account alone will not be
- * updated by calling this API alone .
+ * updated by calling this API alone. #finishSession should be called after
+ * this to update local credentials
*
* @param account The account to update credentials for
* @param authTokenType The credentials entered must allow an auth token of
@@ -2723,15 +2725,14 @@
* the main thread
* @return An {@link AccountManagerFuture} which resolves to a Bundle with
* these fields if an activity was supplied and user was
- * successfully re-authenticated to the account (TODO: default impl
- * only returns escorw?):
+ * successfully re-authenticated to the account:
* <ul>
* <li>{@link #KEY_ACCOUNT_SESSION_BUNDLE} - encrypted Bundle for
* updating the local credentials on device later.
- * <li>{@link #KEY_PASSWORD} - optional, the password or password hash of the
- * account
- * <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check status of
- * the account
+ * <li>{@link #KEY_PASSWORD} - optional, the password or password
+ * hash of the account
+ * <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check
+ * status of the account
* </ul>
* If no activity was specified, the returned Bundle contains
* {@link #KEY_INTENT} with the {@link Intent} needed to launch the
@@ -2747,6 +2748,7 @@
* problem verifying the password, usually because of network
* trouble
* </ul>
+ * @see #finishSession
*/
public AccountManagerFuture<Bundle> startUpdateCredentialsSession(
final Account account,
@@ -2770,4 +2772,71 @@
}
}.start();
}
+
+ /**
+ * Finishes the session started by {@link #startAddAccountSession} or
+ * {@link #startUpdateCredentialsSession}. This will either add the account
+ * to AccountManager or update the local credentials stored.
+ * <p>
+ * This method may be called from any thread, but the returned
+ * {@link AccountManagerFuture} must not be used on the main thread.
+ *
+ * @param sessionBundle a {@link Bundle} created by {@link #startAddAccountSession} or
+ * {@link #startUpdateCredentialsSession}
+ * @param activity The {@link Activity} context to use for launching a new
+ * authenticator-defined sub-Activity to prompt the user to
+ * create an account or reauthenticate existing account; used
+ * only to call startActivity(); if null, the prompt will not
+ * be launched directly, but the necessary {@link Intent} will
+ * be returned to the caller instead
+ * @param callback Callback to invoke when the request completes, null for
+ * no callback
+ * @param handler {@link Handler} identifying the callback thread, null for
+ * the main thread
+ * @return An {@link AccountManagerFuture} which resolves to a Bundle with
+ * these fields if an activity was supplied and an account was added
+ * to device or local credentials were updated::
+ * <ul>
+ * <li>{@link #KEY_ACCOUNT_NAME} - the name of the account created
+ * <li>{@link #KEY_ACCOUNT_TYPE} - the type of the account
+ * </ul>
+ * If no activity was specified and additional information is needed
+ * from user, the returned Bundle may contains only
+ * {@link #KEY_INTENT} with the {@link Intent} needed to launch the
+ * actual account creation process. If an error occurred,
+ * {@link AccountManagerFuture#getResult()} throws:
+ * <ul>
+ * <li>{@link AuthenticatorException} if no authenticator was
+ * registered for this account type or the authenticator failed to
+ * respond
+ * <li>{@link OperationCanceledException} if the operation was
+ * canceled for any reason, including the user canceling the
+ * creation process or adding accounts (of this type) has been
+ * disabled by policy
+ * <li>{@link IOException} if the authenticator experienced an I/O
+ * problem creating a new account, usually because of network
+ * trouble
+ * </ul>
+ * @see #startAddAccountSession and #startUpdateCredentialsSession
+ */
+ public AccountManagerFuture<Bundle> finishSession(
+ final Bundle sessionBundle,
+ final Activity activity,
+ AccountManagerCallback<Bundle> callback,
+ Handler handler) {
+ if (sessionBundle == null) {
+ throw new IllegalArgumentException("sessionBundle is null");
+ }
+
+ /* Add information required by add account flow */
+ final Bundle appInfo = new Bundle();
+ appInfo.putString(KEY_ANDROID_PACKAGE_NAME, mContext.getPackageName());
+
+ return new AmsTask(activity, handler, callback) {
+ @Override
+ public void doWork() throws RemoteException {
+ mService.finishSession(mResponse, sessionBundle, activity != null, appInfo);
+ }
+ }.start();
+ }
}
diff --git a/core/java/android/accounts/IAccountAuthenticator.aidl b/core/java/android/accounts/IAccountAuthenticator.aidl
index 921fb19..6bda800 100644
--- a/core/java/android/accounts/IAccountAuthenticator.aidl
+++ b/core/java/android/accounts/IAccountAuthenticator.aidl
@@ -96,4 +96,12 @@
*/
void startUpdateCredentialsSession(in IAccountAuthenticatorResponse response, in Account account,
String authTokenType, in Bundle options);
+
+ /**
+ * Finishes the session started by startAddAccountSession(...) or
+ * startUpdateCredentialsSession(...) by adding account to or updating local credentials
+ * in the IAccountManager.
+ */
+ void finishSession(in IAccountAuthenticatorResponse response, String accountType,
+ in Bundle sessionBundle);
}
diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl
index 8489e47..4af9f33 100644
--- a/core/java/android/accounts/IAccountManager.aidl
+++ b/core/java/android/accounts/IAccountManager.aidl
@@ -91,4 +91,8 @@
/* Update credentials in two steps. */
void startUpdateCredentialsSession(in IAccountManagerResponse response, in Account account,
String authTokenType, boolean expectActivityLaunch, in Bundle options);
+
+ /* Finish session started by startAddAccountSession(...) or startUpdateCredentialsSession(...) */
+ void finishSession(in IAccountManagerResponse response, in Bundle sessionBundle,
+ boolean expectActivityLaunch, in Bundle appInfo);
}
diff --git a/core/java/android/annotation/BinderThread.java b/core/java/android/annotation/BinderThread.java
index c69ba10..6f85e04 100644
--- a/core/java/android/annotation/BinderThread.java
+++ b/core/java/android/annotation/BinderThread.java
@@ -29,10 +29,10 @@
* on the binder thread.
* <p>
* Example:
- * <pre>{@code
- * (@BinderThread
+ * <pre><code>
+ * @BinderThread
* public BeamShareData createBeamShareData() { ... }
- * }</pre>
+ * </code></pre>
*
* {@hide}
*/
diff --git a/core/java/android/annotation/CallSuper.java b/core/java/android/annotation/CallSuper.java
index 82e2723..b10a28a 100644
--- a/core/java/android/annotation/CallSuper.java
+++ b/core/java/android/annotation/CallSuper.java
@@ -25,10 +25,10 @@
* Denotes that any overriding methods should invoke this method as well.
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @CallSuper
* public abstract void onFocusLost();
- * }</pre>
+ * </code></pre>
*
* @hide
*/
diff --git a/core/java/android/annotation/CheckResult.java b/core/java/android/annotation/CheckResult.java
index 787514e..97d031a 100644
--- a/core/java/android/annotation/CheckResult.java
+++ b/core/java/android/annotation/CheckResult.java
@@ -29,7 +29,7 @@
* <p>
* Example:
* <pre>{@code
- * public @CheckResult String trim(String s) { return s.trim(); }
+ * public @CheckResult String trim(String s) { return s.trim(); }
* ...
* s.trim(); // this is probably an error
* s = s.trim(); // ok
diff --git a/core/java/android/annotation/ColorInt.java b/core/java/android/annotation/ColorInt.java
index 69d196c..4671b1b 100644
--- a/core/java/android/annotation/ColorInt.java
+++ b/core/java/android/annotation/ColorInt.java
@@ -31,7 +31,7 @@
* <p>
* Example:
* <pre>{@code
- * public abstract void setTextColor(@ColorInt int color);
+ * public abstract void setTextColor(@ColorInt int color);
* }</pre>
*
* @hide
diff --git a/core/java/android/annotation/FloatRange.java b/core/java/android/annotation/FloatRange.java
index 3a7c150..05b51680 100644
--- a/core/java/android/annotation/FloatRange.java
+++ b/core/java/android/annotation/FloatRange.java
@@ -28,12 +28,12 @@
* Denotes that the annotated element should be a float or double in the given range
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @FloatRange(from=0.0,to=1.0)
* public float getAlpha() {
* ...
* }
- * }</pre>
+ * </code></pre>
*
* @hide
*/
diff --git a/core/java/android/annotation/IntDef.java b/core/java/android/annotation/IntDef.java
index 3cae9c5..a18bfa5 100644
--- a/core/java/android/annotation/IntDef.java
+++ b/core/java/android/annotation/IntDef.java
@@ -27,25 +27,24 @@
* named constants. If the {@link #flag()} attribute is set to true,
* multiple constants can be combined.
* <p>
- * Example:
- * <pre>{@code
- * @Retention(CLASS)
- * @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
- * public @interface NavigationMode {}
+ * <pre><code>
+ * @Retention(SOURCE)
+ * @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
+ * public @interface NavigationMode {}
* public static final int NAVIGATION_MODE_STANDARD = 0;
* public static final int NAVIGATION_MODE_LIST = 1;
* public static final int NAVIGATION_MODE_TABS = 2;
* ...
- * public abstract void setNavigationMode(@NavigationMode int mode);
+ * public abstract void setNavigationMode(@NavigationMode int mode);
* @NavigationMode
* public abstract int getNavigationMode();
- * }</pre>
+ * </code></pre>
* For a flag, set the flag attribute:
- * <pre>{@code
+ * <pre><code>
* @IntDef(
* flag = true
- * value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
- * }</pre>
+ * value = {NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
+ * </code></pre>
*
* @hide
*/
diff --git a/core/java/android/annotation/IntRange.java b/core/java/android/annotation/IntRange.java
index b489c01..c043e2d 100644
--- a/core/java/android/annotation/IntRange.java
+++ b/core/java/android/annotation/IntRange.java
@@ -29,12 +29,12 @@
* Denotes that the annotated element should be an int or long in the given range
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @IntRange(from=0,to=255)
* public int getAlpha() {
* ...
* }
- * }</pre>
+ * </code></pre>
*
* @hide
*/
diff --git a/core/java/android/annotation/MainThread.java b/core/java/android/annotation/MainThread.java
index 18a4283..52f8dfb 100644
--- a/core/java/android/annotation/MainThread.java
+++ b/core/java/android/annotation/MainThread.java
@@ -29,10 +29,10 @@
* on the main thread.
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @MainThread
* public void deliverResult(D data) { ... }
- * }</pre>
+ * </code></pre>
*
* {@hide}
*/
diff --git a/core/java/android/annotation/RequiresPermission.java b/core/java/android/annotation/RequiresPermission.java
index 113c055..59d419f 100644
--- a/core/java/android/annotation/RequiresPermission.java
+++ b/core/java/android/annotation/RequiresPermission.java
@@ -32,26 +32,26 @@
* <p/>
* Example of requiring a single permission:
* <pre>{@code
- * @RequiresPermission(Manifest.permission.SET_WALLPAPER)
+ * {@literal @}RequiresPermission(Manifest.permission.SET_WALLPAPER)
* public abstract void setWallpaper(Bitmap bitmap) throws IOException;
*
- * @RequiresPermission(ACCESS_COARSE_LOCATION)
+ * {@literal @}RequiresPermission(ACCESS_COARSE_LOCATION)
* public abstract Location getLastKnownLocation(String provider);
* }</pre>
* Example of requiring at least one permission from a set:
* <pre>{@code
- * @RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
+ * {@literal @}RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
* public abstract Location getLastKnownLocation(String provider);
* }</pre>
* Example of requiring multiple permissions:
* <pre>{@code
- * @RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
+ * {@literal @}RequiresPermission(allOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
* public abstract Location getLastKnownLocation(String provider);
* }</pre>
* Example of requiring separate read and write permissions for a content provider:
* <pre>{@code
- * @RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS))
- * @RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS))
+ * {@literal @}RequiresPermission.Read(@RequiresPermission(READ_HISTORY_BOOKMARKS))
+ * {@literal @}RequiresPermission.Write(@RequiresPermission(WRITE_HISTORY_BOOKMARKS))
* public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks");
* }</pre>
* <p>
@@ -59,7 +59,7 @@
* a permission which depends on the value of the parameter. For example, consider
* {@link android.app.Activity#startActivity(Intent)}:
* <pre>{@code
- * public void startActivity(@RequiresPermission Intent intent) { ... }
+ * public void startActivity(@RequiresPermission Intent intent) { ... }
* }</pre>
* Notice how there are no actual permission names listed in the annotation. The actual
* permissions required will depend on the particular intent passed in. For example,
@@ -71,7 +71,7 @@
* and the actual permission requirement for this particular intent is described on
* the Intent name itself:
* <pre>{@code
- * @RequiresPermission(Manifest.permission.CALL_PHONE)
+ * {@literal @}RequiresPermission(Manifest.permission.CALL_PHONE)
* public static final String ACTION_CALL = "android.intent.action.CALL";
* }</pre>
*
@@ -115,7 +115,7 @@
* When specified on a parameter, the annotation indicates that the method requires
* a permission which depends on the value of the parameter (and typically
* the corresponding field passed in will be one of a set of constants which have
- * been annotated with a {@code @RequiresPermission} annotation.)
+ * been annotated with a <code>@RequiresPermission</code> annotation.)
*/
@Target({FIELD, METHOD, PARAMETER})
@interface Read {
@@ -128,7 +128,7 @@
* When specified on a parameter, the annotation indicates that the method requires
* a permission which depends on the value of the parameter (and typically
* the corresponding field passed in will be one of a set of constants which have
- * been annotated with a {@code @RequiresPermission} annotation.)
+ * been annotated with a <code>@RequiresPermission</code> annotation.)
*/
@Target({FIELD, METHOD, PARAMETER})
@interface Write {
diff --git a/core/java/android/annotation/Size.java b/core/java/android/annotation/Size.java
index 389b819..7c3e70f 100644
--- a/core/java/android/annotation/Size.java
+++ b/core/java/android/annotation/Size.java
@@ -31,7 +31,7 @@
* <p>
* Example:
* <pre>{@code
- * public void getLocationInWindow(@Size(2) int[] location) {
+ * public void getLocationInWindow(@Size(2) int[] location) {
* ...
* }
* }</pre>
diff --git a/core/java/android/annotation/StringDef.java b/core/java/android/annotation/StringDef.java
index 5f7f380..8c8d5d8 100644
--- a/core/java/android/annotation/StringDef.java
+++ b/core/java/android/annotation/StringDef.java
@@ -26,20 +26,20 @@
* type and that its value should be one of the explicitly named constants.
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @Retention(SOURCE)
- * @StringDef({
+ * @StringDef({
* POWER_SERVICE,
* WINDOW_SERVICE,
* LAYOUT_INFLATER_SERVICE
- * })
- * public @interface ServiceName {}
+ * })
+ * public @interface ServiceName {}
* public static final String POWER_SERVICE = "power";
* public static final String WINDOW_SERVICE = "window";
* public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
* ...
- * public abstract Object getSystemService(@ServiceName String name);
- * }</pre>
+ * public abstract Object getSystemService(@ServiceName String name);
+ * </code></pre>
*
* @hide
*/
diff --git a/core/java/android/annotation/UiThread.java b/core/java/android/annotation/UiThread.java
index b814600..53121e7 100644
--- a/core/java/android/annotation/UiThread.java
+++ b/core/java/android/annotation/UiThread.java
@@ -29,10 +29,10 @@
* on the UI thread.
* <p>
* Example:
- * <pre>{@code
+ * <pre><code>
* @UiThread
- * public abstract void setText(@NonNull String text) { ... }
- * }</pre>
+ * public abstract void setText(@NonNull String text) { ... }
+ * </code></pre>
*
* {@hide}
*/
diff --git a/core/java/android/annotation/WorkerThread.java b/core/java/android/annotation/WorkerThread.java
index dd12e05..0d2c43e 100644
--- a/core/java/android/annotation/WorkerThread.java
+++ b/core/java/android/annotation/WorkerThread.java
@@ -29,10 +29,10 @@
* on a worker thread.
* <p>
* Example:
- * <pre>{@code
- * (@WorkerThread
+ * <pre><code>
+ * @WorkerThread
* protected abstract FilterResults performFiltering(CharSequence constraint);
- * }</pre>
+ * </code></pre>
*
* {@hide}
*/
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 8bb0ff5..93c6bef 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1727,6 +1727,57 @@
}
/**
+ * Called by the system when the activity changes from fullscreen mode to multi-window mode and
+ * visa-versa.
+ * @see android.R.attr#resizeableActivity
+ *
+ * @param multiWindowMode True if the activity is in multi-window mode.
+ */
+ public void onMultiWindowModeChanged(boolean multiWindowMode) {
+ if (DEBUG_LIFECYCLE) Slog.v(TAG,
+ "onMultiWindowModeChanged " + this + ": " + multiWindowMode);
+ }
+
+ /**
+ * Returns true if the activity is currently in multi-window mode.
+ * @see android.R.attr#resizeableActivity
+ *
+ * @return True if the activity is in multi-window mode.
+ */
+ public boolean inMultiWindowMode() {
+ try {
+ return ActivityManagerNative.getDefault().inMultiWindowMode(mToken);
+ } catch (RemoteException e) {
+ }
+ return false;
+ }
+
+ /**
+ * Called by the system when the activity changes to and from picture-in-picture mode.
+ * @see android.R.attr#supportsPictureInPicture
+ *
+ * @param pictureInPictureMode True if the activity is in picture-in-picture mode.
+ */
+ public void onPictureInPictureModeChanged(boolean pictureInPictureMode) {
+ if (DEBUG_LIFECYCLE) Slog.v(TAG,
+ "onPictureInPictureModeChanged " + this + ": " + pictureInPictureMode);
+ }
+
+ /**
+ * Returns true if the activity is currently in picture-in-picture mode.
+ * @see android.R.attr#supportsPictureInPicture
+ *
+ * @return True if the activity is in picture-in-picture mode.
+ */
+ public boolean inPictureInPictureMode() {
+ try {
+ return ActivityManagerNative.getDefault().inPictureInPictureMode(mToken);
+ } catch (RemoteException e) {
+ }
+ return false;
+ }
+
+ /**
* Called by the system when the device configuration changes while your
* activity is running. Note that this will <em>only</em> be called if
* you have selected configurations you would like to handle with the
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index f1a7de8..81fe23c 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -81,9 +81,9 @@
/**
* <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
+ * <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
- * signed with the same certificate as the one declaring the {@code <meta-data>}.
+ * signed with the same certificate as the one declaring the {@code <meta-data>}.
*/
public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
@@ -265,6 +265,12 @@
/** @hide User operation call: given user id is the current user, can't be stopped. */
public static final int USER_OP_IS_CURRENT = -2;
+ /** @hide User operation call: system user can't be stopped. */
+ public static final int USER_OP_ERROR_IS_SYSTEM = -3;
+
+ /** @hide User operation call: one of related users cannot be stopped. */
+ public static final int USER_OP_ERROR_RELATED_USERS_CANNOT_STOP = -4;
+
/** @hide Process does not exist. */
public static final int PROCESS_STATE_NONEXISTENT = -1;
@@ -537,6 +543,30 @@
return stackId == FREEFORM_WORKSPACE_STACK_ID
|| stackId == FULLSCREEN_WORKSPACE_STACK_ID || stackId == DOCKED_STACK_ID;
}
+
+ /** Returns true if the windows in the stack can receive input keys. */
+ public static boolean canReceiveKeys(int stackId) {
+ return stackId != PINNED_STACK_ID;
+ }
+
+ /**
+ * Returns true if the stack can be visible above lockscreen.
+ */
+ public static boolean isAllowedOverLockscreen(int stackId) {
+ return stackId == HOME_STACK_ID || stackId == FULLSCREEN_WORKSPACE_STACK_ID;
+ }
+
+ public static boolean isAlwaysOnTop(int stackId) {
+ return stackId == PINNED_STACK_ID;
+ }
+
+ /**
+ * Returns true if the application windows in this stack should be displayed above all
+ * other application windows, including during the animation.
+ */
+ public static boolean shouldIncreaseApplicationWindowLayer(int stackId) {
+ return stackId == PINNED_STACK_ID || stackId == DOCKED_STACK_ID;
+ }
}
/**
@@ -2102,7 +2132,9 @@
public int[] taskIds;
public String[] taskNames;
public Rect[] taskBounds;
+ public int[] taskUserIds;
public int displayId;
+ public int userId;
@Override
public int describeContents() {
@@ -2126,7 +2158,9 @@
dest.writeInt(taskBounds[i].right);
dest.writeInt(taskBounds[i].bottom);
}
+ dest.writeIntArray(taskUserIds);
dest.writeInt(displayId);
+ dest.writeInt(userId);
}
public void readFromParcel(Parcel source) {
@@ -2146,7 +2180,9 @@
} else {
taskBounds = null;
}
+ taskUserIds = source.createIntArray();
displayId = source.readInt();
+ userId = source.readInt();
}
public static final Creator<StackInfo> CREATOR = new Creator<StackInfo>() {
@@ -2172,6 +2208,7 @@
sb.append(prefix); sb.append("Stack id="); sb.append(stackId);
sb.append(" bounds="); sb.append(bounds.toShortString());
sb.append(" displayId="); sb.append(displayId);
+ sb.append(" userId="); sb.append(userId);
sb.append("\n");
prefix = prefix + " ";
for (int i = 0; i < taskIds.length; ++i) {
@@ -2180,6 +2217,7 @@
if (taskBounds != null) {
sb.append(" bounds="); sb.append(taskBounds[i].toShortString());
}
+ sb.append(" userId=").append(taskUserIds[i]);
sb.append("\n");
}
return sb.toString();
@@ -3085,6 +3123,8 @@
public static final int FLAG_OR_STOPPED = 1 << 0;
/** {@hide} */
public static final int FLAG_AND_LOCKED = 1 << 1;
+ /** {@hide} */
+ public static final int FLAG_AND_UNLOCKED = 1 << 2;
/**
* Return whether the given user is actively running. This means that
@@ -3095,9 +3135,29 @@
* @param userid the user's id. Zero indicates the default user.
* @hide
*/
- public boolean isUserRunning(int userid) {
+ public boolean isUserRunning(int userId) {
try {
- return ActivityManagerNative.getDefault().isUserRunning(userid, 0);
+ return ActivityManagerNative.getDefault().isUserRunning(userId, 0);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /** {@hide} */
+ public boolean isUserRunningAndLocked(int userId) {
+ try {
+ return ActivityManagerNative.getDefault().isUserRunning(userId,
+ ActivityManager.FLAG_AND_LOCKED);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /** {@hide} */
+ public boolean isUserRunningAndUnlocked(int userId) {
+ try {
+ return ActivityManagerNative.getDefault().isUserRunning(userId,
+ ActivityManager.FLAG_AND_UNLOCKED);
} catch (RemoteException e) {
return false;
}
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 19d9fc2..f3242a7 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1981,9 +1981,10 @@
case STOP_USER_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
int userid = data.readInt();
+ boolean force = data.readInt() != 0;
IStopUserCallback callback = IStopUserCallback.Stub.asInterface(
data.readStrongBinder());
- int result = stopUser(userid, callback);
+ int result = stopUser(userid, force, callback);
reply.writeNoException();
reply.writeInt(result);
return true;
@@ -2227,7 +2228,8 @@
case REQUEST_BUG_REPORT_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
- requestBugReport();
+ boolean progress = data.readInt() != 0;
+ requestBugReport(progress);
reply.writeNoException();
return true;
}
@@ -2732,6 +2734,22 @@
reply.writeInt(res);
return true;
}
+ case IN_MULTI_WINDOW_MODE_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ final IBinder token = data.readStrongBinder();
+ final boolean multiWindowMode = inMultiWindowMode(token);
+ reply.writeNoException();
+ reply.writeInt(multiWindowMode ? 1 : 0);
+ return true;
+ }
+ case IN_PICTURE_IN_PICTURE_MODE_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ final IBinder token = data.readStrongBinder();
+ final boolean pipMode = inPictureInPictureMode(token);
+ reply.writeNoException();
+ reply.writeInt(pipMode ? 1 : 0);
+ return true;
+ }
}
return super.onTransact(code, data, reply, flags);
@@ -5287,11 +5305,13 @@
return result;
}
- public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
+ public int stopUser(int userid, boolean force, IStopUserCallback callback)
+ throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
data.writeInt(userid);
+ data.writeInt(force ? 1 : 0);
data.writeStrongInterface(callback);
mRemote.transact(STOP_USER_TRANSACTION, data, reply, 0);
reply.readException();
@@ -5597,10 +5617,11 @@
reply.recycle();
}
- public void requestBugReport() throws RemoteException {
+ public void requestBugReport(boolean progress) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeInt(progress ? 1 : 0);
mRemote.transact(REQUEST_BUG_REPORT_TRANSACTION, data, reply, 0);
reply.readException();
data.recycle();
@@ -6363,5 +6384,33 @@
return res;
}
+ @Override
+ public boolean inMultiWindowMode(IBinder token) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(IN_MULTI_WINDOW_MODE_TRANSACTION, data, reply, 0);
+ reply.readException();
+ final boolean multiWindowMode = reply.readInt() == 1 ? true : false;
+ data.recycle();
+ reply.recycle();
+ return multiWindowMode;
+ }
+
+ @Override
+ public boolean inPictureInPictureMode(IBinder token) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(token);
+ mRemote.transact(IN_PICTURE_IN_PICTURE_MODE_TRANSACTION, data, reply, 0);
+ reply.readException();
+ final boolean pipMode = reply.readInt() == 1 ? true : false;
+ data.recycle();
+ reply.recycle();
+ return pipMode;
+ }
+
private IBinder mRemote;
}
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 802880d..f3539ff 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -83,7 +83,6 @@
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.EventLog;
-import android.util.IntArray;
import android.util.Log;
import android.util.LogPrinter;
import android.util.Pair;
@@ -92,7 +91,7 @@
import android.util.SparseIntArray;
import android.util.SuperNotCalledException;
import android.view.Display;
-import android.view.HardwareRenderer;
+import android.view.ThreadedRenderer;
import android.view.View;
import android.view.ViewDebug;
import android.view.ViewManager;
@@ -184,6 +183,9 @@
private static final int USER_LEAVING = 1;
private static final int DONT_REPORT = 2;
+ // Whether to invoke an activity callback after delivering new configuration.
+ private static final boolean REPORT_TO_ACTIVITY = true;
+
private ContextImpl mSystemContext;
static IPackageManager sPackageManager;
@@ -943,9 +945,9 @@
@Override
public void scheduleActivityConfigurationChanged(
- IBinder token, Configuration overrideConfig) {
+ IBinder token, Configuration overrideConfig, boolean reportToActivity) {
sendMessage(H.ACTIVITY_CONFIGURATION_CHANGED,
- new ActivityConfigChangeData(token, overrideConfig));
+ new ActivityConfigChangeData(token, overrideConfig), reportToActivity ? 1 : 0);
}
@Override
@@ -1273,6 +1275,18 @@
} catch (IOException e) {
}
}
+
+ @Override
+ public void scheduleMultiWindowModeChanged(IBinder token, boolean multiWindowMode)
+ throws RemoteException {
+ sendMessage(H.MULTI_WINDOW_MODE_CHANGED, token, multiWindowMode ? 1 : 0);
+ }
+
+ @Override
+ public void schedulePictureInPictureModeChanged(IBinder token, boolean pipMode)
+ throws RemoteException {
+ sendMessage(H.PICTURE_IN_PICTURE_MODE_CHANGED, token, pipMode ? 1 : 0);
+ }
}
private int getLifecycleSeq() {
@@ -1334,6 +1348,8 @@
public static final int ENTER_ANIMATION_COMPLETE = 149;
public static final int START_BINDER_TRACKING = 150;
public static final int STOP_BINDER_TRACKING_AND_DUMP = 151;
+ public static final int MULTI_WINDOW_MODE_CHANGED = 152;
+ public static final int PICTURE_IN_PICTURE_MODE_CHANGED = 153;
String codeToString(int code) {
if (DEBUG_MESSAGES) {
@@ -1387,6 +1403,8 @@
case CANCEL_VISIBLE_BEHIND: return "CANCEL_VISIBLE_BEHIND";
case BACKGROUND_VISIBLE_BEHIND_CHANGED: return "BACKGROUND_VISIBLE_BEHIND_CHANGED";
case ENTER_ANIMATION_COMPLETE: return "ENTER_ANIMATION_COMPLETE";
+ case MULTI_WINDOW_MODE_CHANGED: return "MULTI_WINDOW_MODE_CHANGED";
+ case PICTURE_IN_PICTURE_MODE_CHANGED: return "PICTURE_IN_PICTURE_MODE_CHANGED";
}
}
return Integer.toString(code);
@@ -1537,7 +1555,8 @@
break;
case ACTIVITY_CONFIGURATION_CHANGED:
Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityConfigChanged");
- handleActivityConfigurationChanged((ActivityConfigChangeData)msg.obj);
+ handleActivityConfigurationChanged((ActivityConfigChangeData) msg.obj,
+ msg.arg1 == 1 ? REPORT_TO_ACTIVITY : !REPORT_TO_ACTIVITY);
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
break;
case PROFILER_CONTROL:
@@ -1629,6 +1648,12 @@
case STOP_BINDER_TRACKING_AND_DUMP:
handleStopBinderTrackingAndDump((ParcelFileDescriptor) msg.obj);
break;
+ case MULTI_WINDOW_MODE_CHANGED:
+ handleMultiWindowModeChanged((IBinder) msg.obj, msg.arg1 == 1);
+ break;
+ case PICTURE_IN_PICTURE_MODE_CHANGED:
+ handlePictureInPictureModeChanged((IBinder) msg.obj, msg.arg1 == 1);
+ break;
}
Object obj = msg.obj;
if (obj instanceof SomeArgs) {
@@ -2811,6 +2836,20 @@
}
}
+ private void handleMultiWindowModeChanged(IBinder token, boolean multiWindowMode) {
+ final ActivityClientRecord r = mActivities.get(token);
+ if (r != null) {
+ r.activity.onMultiWindowModeChanged(multiWindowMode);
+ }
+ }
+
+ private void handlePictureInPictureModeChanged(IBinder token, boolean pipMode) {
+ final ActivityClientRecord r = mActivities.get(token);
+ if (r != null) {
+ r.activity.onPictureInPictureModeChanged(pipMode);
+ }
+ }
+
private static final ThreadLocal<Intent> sCurrentBroadcastIntent = new ThreadLocal<Intent>();
/**
@@ -3347,7 +3386,7 @@
}
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Resuming activity "
+ r.activityInfo.name + " with newConfig " + r.tmpConfig);
- performConfigurationChanged(r.activity, r.tmpConfig);
+ performConfigurationChanged(r.activity, r.tmpConfig, REPORT_TO_ACTIVITY);
freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(r.tmpConfig));
r.newConfig = null;
}
@@ -3687,7 +3726,7 @@
}
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Updating activity vis "
+ r.activityInfo.name + " with new config " + r.tmpConfig);
- performConfigurationChanged(r.activity, r.tmpConfig);
+ performConfigurationChanged(r.activity, r.tmpConfig, REPORT_TO_ACTIVITY);
freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(r.tmpConfig));
r.newConfig = null;
}
@@ -4340,7 +4379,8 @@
return callbacks;
}
- private static void performConfigurationChanged(ComponentCallbacks2 cb, Configuration config) {
+ private static void performConfigurationChanged(ComponentCallbacks2 cb, Configuration config,
+ boolean reportToActivity) {
// Only for Activity objects, check that they actually call up to their
// superclass implementation. ComponentCallbacks2 is an interface, so
// we check the runtime type and act accordingly.
@@ -4371,10 +4411,12 @@
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Config callback " + cb
+ ": shouldChangeConfig=" + shouldChangeConfig);
if (shouldChangeConfig) {
- cb.onConfigurationChanged(config);
+ if (reportToActivity) {
+ cb.onConfigurationChanged(config);
+ }
if (activity != null) {
- if (!activity.mCalled) {
+ if (reportToActivity && !activity.mCalled) {
throw new SuperNotCalledException(
"Activity " + activity.getLocalClassName() +
" did not call through to super.onConfigurationChanged()");
@@ -4449,7 +4491,7 @@
if (callbacks != null) {
final int N = callbacks.size();
for (int i=0; i<N; i++) {
- performConfigurationChanged(callbacks.get(i), config);
+ performConfigurationChanged(callbacks.get(i), config, REPORT_TO_ACTIVITY);
}
}
}
@@ -4465,21 +4507,22 @@
}
}
- final void handleActivityConfigurationChanged(ActivityConfigChangeData data) {
+ final void handleActivityConfigurationChanged(ActivityConfigChangeData data,
+ boolean reportToActivity) {
ActivityClientRecord r = mActivities.get(data.activityToken);
if (r == null || r.activity == null) {
return;
}
if (DEBUG_CONFIGURATION) Slog.v(TAG, "Handle activity config changed: "
- + r.activityInfo.name);
+ + r.activityInfo.name + ", with callback=" + reportToActivity);
r.tmpConfig.setTo(mCompatConfiguration);
if (data.overrideConfig != null) {
r.overrideConfig = data.overrideConfig;
r.tmpConfig.updateFrom(data.overrideConfig);
}
- performConfigurationChanged(r.activity, r.tmpConfig);
+ performConfigurationChanged(r.activity, r.tmpConfig, reportToActivity);
freeTextLayoutCachesIfNeeded(r.activity.mCurrentConfig.diff(mCompatConfiguration));
@@ -4612,7 +4655,7 @@
// If there are several packages in this application we won't
// initialize the graphics disk caches
if (packages != null && packages.length == 1) {
- HardwareRenderer.setupDiskCache(cacheDir);
+ ThreadedRenderer.setupDiskCache(cacheDir);
RenderScriptCacheDir.setupDiskCache(cacheDir);
}
} catch (RemoteException e) {
@@ -4659,7 +4702,7 @@
// use hardware accelerated drawing, since this can add too much
// overhead to the process.
if (!ActivityManager.isHighEndGfx()) {
- HardwareRenderer.disable(false);
+ ThreadedRenderer.disable(false);
}
}
@@ -4841,7 +4884,7 @@
if (ii != null) {
final ApplicationInfo instrApp = new ApplicationInfo();
ii.copyTo(instrApp);
-
+ instrApp.initForUser(UserHandle.myUserId());
final LoadedApk pi = getPackageInfo(instrApp, data.compatInfo,
appContext.getClassLoader(), false, true, false);
final ContextImpl instrContext = ContextImpl.createAppContext(this, pi);
@@ -5529,9 +5572,9 @@
// accelerated drawing, since this can add too much overhead to the
// process.
if (!ActivityManager.isHighEndGfx()) {
- HardwareRenderer.disable(true);
+ ThreadedRenderer.disable(true);
} else {
- HardwareRenderer.enableForegroundTrimming();
+ ThreadedRenderer.enableForegroundTrimming();
}
ActivityThread thread = new ActivityThread();
thread.attach(true);
diff --git a/core/java/android/app/AlarmManager.java b/core/java/android/app/AlarmManager.java
index bf2e13a..b569416 100644
--- a/core/java/android/app/AlarmManager.java
+++ b/core/java/android/app/AlarmManager.java
@@ -25,7 +25,6 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
-import android.os.SystemClock;
import android.os.UserHandle;
import android.os.WorkSource;
import android.text.TextUtils;
@@ -869,13 +868,19 @@
* {@link Intent#filterEquals}), will be canceled.
*
* @param operation IntentSender which matches a previously added
- * IntentSender.
+ * IntentSender. This parameter must not be {@code null}.
*
* @see #set
*/
public void cancel(PendingIntent operation) {
if (operation == null) {
- throw new NullPointerException("operation");
+ final String msg = "cancel() called with a null PendingIntent";
+ if (mTargetSdkVersion >= Build.VERSION_CODES.N) {
+ throw new NullPointerException(msg);
+ } else {
+ Log.e(TAG, msg);
+ return;
+ }
}
try {
@@ -891,7 +896,7 @@
*/
public void cancel(OnAlarmListener listener) {
if (listener == null) {
- throw new NullPointerException("listener");
+ throw new NullPointerException("cancel() called with a null OnAlarmListener");
}
ListenerWrapper wrapper = null;
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index e500e15..460e68c 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -30,6 +30,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.ContainerEncryptionParams;
+import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IPackageDataObserver;
@@ -85,9 +86,11 @@
import com.android.internal.os.SomeArgs;
import com.android.internal.util.Preconditions;
import com.android.internal.util.UserIcons;
+import libcore.util.EmptyArray;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -98,6 +101,8 @@
private static final String TAG = "ApplicationPackageManager";
private final static boolean DEBUG_ICONS = false;
+ private static final int DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES = 16384; // 16KB
+
// Default flags to use with PackageManager when no flags are given.
private final static int sDefaultFlags = PackageManager.GET_SHARED_LIBRARY_FILES;
@@ -626,6 +631,80 @@
}
}
+ /** @hide */
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<EphemeralApplicationInfo> getEphemeralApplications() {
+ try {
+ ParceledListSlice<EphemeralApplicationInfo> slice =
+ mPM.getEphemeralApplications(mContext.getUserId());
+ if (slice != null) {
+ return slice.getList();
+ }
+ return Collections.emptyList();
+ } catch (RemoteException e) {
+ throw new RuntimeException("Package manager has died", e);
+ }
+ }
+
+ /** @hide */
+ @Override
+ public Drawable getEphemeralApplicationIcon(String packageName) {
+ try {
+ Bitmap bitmap = mPM.getEphemeralApplicationIcon(
+ packageName, mContext.getUserId());
+ if (bitmap != null) {
+ return new BitmapDrawable(null, bitmap);
+ }
+ return null;
+ } catch (RemoteException e) {
+ throw new RuntimeException("Package manager has died", e);
+ }
+ }
+
+ @Override
+ public boolean isEphemeralApplication() {
+ try {
+ return mPM.isEphemeralApplication(
+ mContext.getPackageName(), mContext.getUserId());
+ } catch (RemoteException e) {
+ Log.e(TAG, "System server is dead", e);
+ }
+ return false;
+ }
+
+ @Override
+ public int getEphemeralCookieMaxSizeBytes() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.EPHEMERAL_COOKIE_MAX_SIZE_BYTES,
+ DEFAULT_EPHEMERAL_COOKIE_MAX_SIZE_BYTES);
+ }
+
+ @Override
+ public @NonNull byte[] getEphemeralCookie() {
+ try {
+ final byte[] cookie = mPM.getEphemeralApplicationCookie(
+ mContext.getPackageName(), mContext.getUserId());
+ if (cookie != null) {
+ return cookie;
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "System server is dead", e);
+ }
+ return EmptyArray.BYTE;
+ }
+
+ @Override
+ public boolean setEphemeralCookie(@NonNull byte[] cookie) {
+ try {
+ return mPM.setEphemeralApplicationCookie(
+ mContext.getPackageName(), cookie, mContext.getUserId());
+ } catch (RemoteException e) {
+ Log.e(TAG, "System server is dead", e);
+ }
+ return false;
+ }
+
@Override
public ResolveInfo resolveActivity(Intent intent, int flags) {
return resolveActivityAsUser(intent, flags, mContext.getUserId());
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index bfd9ca5..5951c8d 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -420,7 +420,8 @@
if (data.readInt() != 0) {
overrideConfig = Configuration.CREATOR.createFromParcel(data);
}
- scheduleActivityConfigurationChanged(b, overrideConfig);
+ final boolean reportToActivity = data.readInt() == 1;
+ scheduleActivityConfigurationChanged(b, overrideConfig, reportToActivity);
return true;
}
@@ -719,6 +720,24 @@
return true;
}
+ case SCHEDULE_MULTI_WINDOW_MODE_CHANGED_TRANSACTION:
+ {
+ data.enforceInterface(IApplicationThread.descriptor);
+ final IBinder b = data.readStrongBinder();
+ final boolean multiWindowMode = data.readInt() != 0;
+ scheduleMultiWindowModeChanged(b, multiWindowMode);
+ return true;
+ }
+
+ case SCHEDULE_PICTURE_IN_PICTURE_MODE_CHANGED_TRANSACTION:
+ {
+ data.enforceInterface(IApplicationThread.descriptor);
+ final IBinder b = data.readStrongBinder();
+ final boolean pipMode = data.readInt() != 0;
+ schedulePictureInPictureModeChanged(b, pipMode);
+ return true;
+ }
+
}
return super.onTransact(code, data, reply, flags);
@@ -1169,8 +1188,8 @@
}
@Override
- public final void scheduleActivityConfigurationChanged(
- IBinder token, Configuration overrideConfig) throws RemoteException {
+ public final void scheduleActivityConfigurationChanged(IBinder token,
+ Configuration overrideConfig, boolean reportToActivity) throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeStrongBinder(token);
@@ -1180,6 +1199,7 @@
} else {
data.writeInt(0);
}
+ data.writeInt(reportToActivity ? 1 : 0);
mRemote.transact(SCHEDULE_ACTIVITY_CONFIGURATION_CHANGED_TRANSACTION, data, null,
IBinder.FLAG_ONEWAY);
data.recycle();
@@ -1452,4 +1472,28 @@
IBinder.FLAG_ONEWAY);
data.recycle();
}
+
+ @Override
+ public final void scheduleMultiWindowModeChanged(
+ IBinder token, boolean multiWindowMode) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ data.writeInterfaceToken(IApplicationThread.descriptor);
+ data.writeStrongBinder(token);
+ data.writeInt(multiWindowMode ? 1 : 0);
+ mRemote.transact(SCHEDULE_MULTI_WINDOW_MODE_CHANGED_TRANSACTION, data, null,
+ IBinder.FLAG_ONEWAY);
+ data.recycle();
+ }
+
+ @Override
+ public final void schedulePictureInPictureModeChanged(IBinder token, boolean pipMode)
+ throws RemoteException {
+ Parcel data = Parcel.obtain();
+ data.writeInterfaceToken(IApplicationThread.descriptor);
+ data.writeStrongBinder(token);
+ data.writeInt(pipMode ? 1 : 0);
+ mRemote.transact(SCHEDULE_PICTURE_IN_PICTURE_MODE_CHANGED_TRANSACTION, data, null,
+ IBinder.FLAG_ONEWAY);
+ data.recycle();
+ }
}
diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java
index b24bce3..984a186 100644
--- a/core/java/android/app/BackStackRecord.java
+++ b/core/java/android/app/BackStackRecord.java
@@ -1005,6 +1005,7 @@
for (int i = 0; i < count; i++) {
final Fragment fragment = lastInFragments.valueAt(i);
if (fragment.mState < Fragment.CREATED) {
+ mManager.makeActive(fragment);
mManager.moveToState(fragment, Fragment.CREATED, 0, 0, false);
}
}
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index c661107..d90ed9f6 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -61,6 +61,7 @@
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.Log;
@@ -74,6 +75,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Objects;
class ReceiverRestrictedContext extends ContextWrapper {
ReceiverRestrictedContext(Context base) {
@@ -148,7 +150,7 @@
private final Display mDisplay; // may be null if default display
private final DisplayAdjustments mDisplayAdjustments = new DisplayAdjustments();
- private final boolean mRestricted;
+ private final int mFlags;
private Context mOuterContext;
private int mThemeResource = 0;
@@ -321,11 +323,6 @@
}
@Override
- public File getSharedPrefsFile(String name) {
- return makeFilename(getPreferencesDir(), name + ".xml");
- }
-
- @Override
public SharedPreferences getSharedPreferences(String name, int mode) {
// At least one application in the world actually passes in a null
// name. This happened to work because when we generated the file name
@@ -337,7 +334,7 @@
}
}
- final File file = getSharedPrefsFile(name);
+ final File file = getSharedPreferencesPath(name);
return getSharedPreferences(file, mode);
}
@@ -448,22 +445,6 @@
}
@Override
- public File getDeviceEncryptedFilesDir() {
- if (mPackageInfo != null) {
- return mPackageInfo.getDeviceEncryptedDataDirFile();
- }
- throw new RuntimeException("Not supported in system context");
- }
-
- @Override
- public File getCredentialEncryptedFilesDir() {
- if (mPackageInfo != null) {
- return mPackageInfo.getCredentialEncryptedDataDirFile();
- }
- throw new RuntimeException("Not supported in system context");
- }
-
- @Override
public File getNoBackupFilesDir() {
synchronized (mSync) {
if (mNoBackupFilesDir == null) {
@@ -571,6 +552,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ return makeFilename(getPreferencesDir(), name + ".xml");
+ }
+
+ @Override
public String[] fileList() {
final String[] list = getFilesDir().list();
return (list != null) ? list : EMPTY_STRING_ARRAY;
@@ -589,6 +575,9 @@
if ((mode & MODE_ENABLE_WRITE_AHEAD_LOGGING) != 0) {
flags |= SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING;
}
+ if ((mode & MODE_NO_LOCALIZED_COLLATORS) != 0) {
+ flags |= SQLiteDatabase.NO_LOCALIZED_COLLATORS;
+ }
SQLiteDatabase db = SQLiteDatabase.openDatabase(f.getPath(), factory, flags, errorHandler);
setFilePermissionsFromMode(f.getPath(), mode, 0);
return db;
@@ -1681,9 +1670,8 @@
LoadedApk pi = mMainThread.getPackageInfo(application, mResources.getCompatibilityInfo(),
flags | CONTEXT_REGISTER_PACKAGE);
if (pi != null) {
- final boolean restricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED;
ContextImpl c = new ContextImpl(this, mMainThread, pi, mActivityToken,
- new UserHandle(UserHandle.getUserId(application.uid)), restricted,
+ new UserHandle(UserHandle.getUserId(application.uid)), flags,
mDisplay, null, Display.INVALID_DISPLAY);
if (c.mResources != null) {
return c;
@@ -1704,17 +1692,16 @@
@Override
public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
throws NameNotFoundException {
- final boolean restricted = (flags & CONTEXT_RESTRICTED) == CONTEXT_RESTRICTED;
if (packageName.equals("system") || packageName.equals("android")) {
return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken,
- user, restricted, mDisplay, null, Display.INVALID_DISPLAY);
+ user, flags, mDisplay, null, Display.INVALID_DISPLAY);
}
LoadedApk pi = mMainThread.getPackageInfo(packageName, mResources.getCompatibilityInfo(),
flags | CONTEXT_REGISTER_PACKAGE, user.getIdentifier());
if (pi != null) {
ContextImpl c = new ContextImpl(this, mMainThread, pi, mActivityToken,
- user, restricted, mDisplay, null, Display.INVALID_DISPLAY);
+ user, flags, mDisplay, null, Display.INVALID_DISPLAY);
if (c.mResources != null) {
return c;
}
@@ -1732,7 +1719,7 @@
}
return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken,
- mUser, mRestricted, mDisplay, overrideConfiguration, Display.INVALID_DISPLAY);
+ mUser, mFlags, mDisplay, overrideConfiguration, Display.INVALID_DISPLAY);
}
@Override
@@ -1742,7 +1729,7 @@
}
return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken,
- mUser, mRestricted, display, null, Display.INVALID_DISPLAY);
+ mUser, mFlags, display, null, Display.INVALID_DISPLAY);
}
Display getDisplay() {
@@ -1758,8 +1745,38 @@
}
@Override
+ public Context createDeviceEncryptedStorageContext() {
+ if (!StorageManager.isFileBasedEncryptionEnabled()) {
+ return null;
+ }
+
+ final int flags = (mFlags & ~Context.CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE)
+ | Context.CONTEXT_DEVICE_ENCRYPTED_STORAGE;
+ return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken,
+ mUser, flags, mDisplay, null, Display.INVALID_DISPLAY);
+ }
+
+ @Override
+ public Context createCredentialEncryptedStorageContext() {
+ final int flags = (mFlags & ~Context.CONTEXT_DEVICE_ENCRYPTED_STORAGE)
+ | Context.CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE;
+ return new ContextImpl(this, mMainThread, mPackageInfo, mActivityToken,
+ mUser, flags, mDisplay, null, Display.INVALID_DISPLAY);
+ }
+
+ @Override
public boolean isRestricted() {
- return mRestricted;
+ return (mFlags & Context.CONTEXT_RESTRICTED) != 0;
+ }
+
+ @Override
+ public boolean isDeviceEncryptedStorage() {
+ return (mFlags & Context.CONTEXT_DEVICE_ENCRYPTED_STORAGE) != 0;
+ }
+
+ @Override
+ public boolean isCredentialEncryptedStorage() {
+ return (mFlags & Context.CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE) != 0;
}
@Override
@@ -1769,7 +1786,13 @@
private File getDataDirFile() {
if (mPackageInfo != null) {
- return mPackageInfo.getDataDirFile();
+ if (isCredentialEncryptedStorage()) {
+ return mPackageInfo.getCredentialEncryptedDataDirFile();
+ } else if (isDeviceEncryptedStorage()) {
+ return mPackageInfo.getDeviceEncryptedDataDirFile();
+ } else {
+ return mPackageInfo.getDataDirFile();
+ }
}
throw new RuntimeException("Not supported in system context");
}
@@ -1795,7 +1818,7 @@
static ContextImpl createSystemContext(ActivityThread mainThread) {
LoadedApk packageInfo = new LoadedApk(mainThread);
ContextImpl context = new ContextImpl(null, mainThread,
- packageInfo, null, null, false, null, null, Display.INVALID_DISPLAY);
+ packageInfo, null, null, 0, null, null, Display.INVALID_DISPLAY);
context.mResources.updateConfiguration(context.mResourcesManager.getConfiguration(),
context.mResourcesManager.getDisplayMetricsLocked());
return context;
@@ -1804,24 +1827,36 @@
static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo) {
if (packageInfo == null) throw new IllegalArgumentException("packageInfo");
return new ContextImpl(null, mainThread,
- packageInfo, null, null, false, null, null, Display.INVALID_DISPLAY);
+ packageInfo, null, null, 0, null, null, Display.INVALID_DISPLAY);
}
static ContextImpl createActivityContext(ActivityThread mainThread,
LoadedApk packageInfo, int displayId, Configuration overrideConfiguration) {
if (packageInfo == null) throw new IllegalArgumentException("packageInfo");
- return new ContextImpl(null, mainThread, packageInfo, null, null, false,
+ return new ContextImpl(null, mainThread, packageInfo, null, null, 0,
null, overrideConfiguration, displayId);
}
private ContextImpl(ContextImpl container, ActivityThread mainThread,
- LoadedApk packageInfo, IBinder activityToken, UserHandle user, boolean restricted,
+ LoadedApk packageInfo, IBinder activityToken, UserHandle user, int flags,
Display display, Configuration overrideConfiguration, int createDisplayWithId) {
mOuterContext = this;
+ // If creator didn't specify which storage to use, use the default
+ // location for application.
+ if ((flags & (Context.CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE
+ | Context.CONTEXT_DEVICE_ENCRYPTED_STORAGE)) == 0) {
+ final File dataDir = packageInfo.getDataDirFile();
+ if (Objects.equals(dataDir, packageInfo.getCredentialEncryptedDataDirFile())) {
+ flags |= Context.CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE;
+ } else if (Objects.equals(dataDir, packageInfo.getDeviceEncryptedDataDirFile())) {
+ flags |= Context.CONTEXT_DEVICE_ENCRYPTED_STORAGE;
+ }
+ }
+
mMainThread = mainThread;
mActivityToken = activityToken;
- mRestricted = restricted;
+ mFlags = flags;
if (user == null) {
user = Process.myUserHandle();
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 09c6c0b..22a2d64 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -391,7 +391,7 @@
public boolean switchUser(int userid) throws RemoteException;
public boolean startUserInBackground(int userid) throws RemoteException;
public boolean unlockUser(int userid, byte[] token) throws RemoteException;
- public int stopUser(int userid, IStopUserCallback callback) throws RemoteException;
+ public int stopUser(int userid, boolean force, IStopUserCallback callback) throws RemoteException;
public UserInfo getCurrentUser() throws RemoteException;
public boolean isUserRunning(int userid, int flags) throws RemoteException;
public int[] getRunningUserIds() throws RemoteException;
@@ -437,7 +437,7 @@
public void registerUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
public void unregisterUserSwitchObserver(IUserSwitchObserver observer) throws RemoteException;
- public void requestBugReport() throws RemoteException;
+ public void requestBugReport(boolean progress) throws RemoteException;
public long inputDispatchingTimedOut(int pid, boolean aboveSystem, String reason)
throws RemoteException;
@@ -545,6 +545,10 @@
public int getAppStartMode(int uid, String packageName) throws RemoteException;
+ public boolean inMultiWindowMode(IBinder token) throws RemoteException;
+
+ public boolean inPictureInPictureMode(IBinder token) throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -906,4 +910,6 @@
int MOVE_TOP_ACTIVITY_TO_PINNED_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 349;
int GET_APP_START_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 350;
int UNLOCK_USER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 351;
+ int IN_MULTI_WINDOW_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 352;
+ int IN_PICTURE_IN_PICTURE_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 353;
}
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 99e8853..dc67026 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -116,8 +116,8 @@
int resultCode, String data, Bundle extras, boolean ordered,
boolean sticky, int sendingUser, int processState) throws RemoteException;
void scheduleLowMemory() throws RemoteException;
- void scheduleActivityConfigurationChanged(IBinder token, Configuration overrideConfig)
- throws RemoteException;
+ void scheduleActivityConfigurationChanged(IBinder token, Configuration overrideConfig,
+ boolean reportToActivity) throws RemoteException;
void profilerControl(boolean start, ProfilerInfo profilerInfo, int profileType)
throws RemoteException;
void dumpHeap(boolean managed, String path, ParcelFileDescriptor fd)
@@ -152,6 +152,8 @@
void notifyCleartextNetwork(byte[] firstPacket) throws RemoteException;
void startBinderTracking() throws RemoteException;
void stopBinderTrackingAndDump(FileDescriptor fd) throws RemoteException;
+ void scheduleMultiWindowModeChanged(IBinder token, boolean multiWindowMode) throws RemoteException;
+ void schedulePictureInPictureModeChanged(IBinder token, boolean multiWindowMode) throws RemoteException;
String descriptor = "android.app.IApplicationThread";
@@ -212,4 +214,6 @@
int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+55;
int START_BINDER_TRACKING_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+56;
int STOP_BINDER_TRACKING_AND_DUMP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+57;
+ int SCHEDULE_MULTI_WINDOW_MODE_CHANGED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+58;
+ int SCHEDULE_PICTURE_IN_PICTURE_MODE_CHANGED_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+59;
}
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index c1d5b19..136b810 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -52,6 +52,8 @@
int getTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic);
void setTopicPriority(String pkg, int uid, in Notification.Topic topic, int priority);
int getTopicPriority(String pkg, int uid, in Notification.Topic topic);
+ void setTopicImportance(String pkg, int uid, in Notification.Topic topic, int importance);
+ int getTopicImportance(String pkg, int uid, in Notification.Topic topic);
// TODO: Remove this when callers have been migrated to the equivalent
// INotificationListener method.
@@ -93,6 +95,7 @@
AutomaticZenRule addAutomaticZenRule(in AutomaticZenRule automaticZenRule);
boolean updateAutomaticZenRule(in AutomaticZenRule automaticZenRule);
boolean removeAutomaticZenRule(String id);
+ boolean removeAutomaticZenRules(String packageName);
byte[] getBackupPayload(int user);
void applyRestore(in byte[] payload, int user);
diff --git a/core/java/android/app/IUiModeManager.aidl b/core/java/android/app/IUiModeManager.aidl
index 7e9873e..cae54b6 100644
--- a/core/java/android/app/IUiModeManager.aidl
+++ b/core/java/android/app/IUiModeManager.aidl
@@ -51,4 +51,14 @@
* 2 for night, and 3 for automatic mode switching.
*/
int getNightMode();
+
+ /**
+ * Tells if UI mode is locked or not.
+ */
+ boolean isUiModeLocked();
+
+ /**
+ * Tells if Night mode is locked or not.
+ */
+ boolean isNightModeLocked();
}
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java
index 2c12317..23e4d97 100644
--- a/core/java/android/app/KeyguardManager.java
+++ b/core/java/android/app/KeyguardManager.java
@@ -248,8 +248,9 @@
* @hide
*/
public boolean isDeviceLocked(int userId) {
+ ITrustManager trustManager = getTrustManager();
try {
- return mTrustManager.isDeviceLocked(userId);
+ return trustManager.isDeviceLocked(userId);
} catch (RemoteException e) {
return false;
}
@@ -273,13 +274,22 @@
* @hide
*/
public boolean isDeviceSecure(int userId) {
+ ITrustManager trustManager = getTrustManager();
try {
- return mTrustManager.isDeviceSecure(userId);
+ return trustManager.isDeviceSecure(userId);
} catch (RemoteException e) {
return false;
}
}
+ private synchronized ITrustManager getTrustManager() {
+ if (mTrustManager == null) {
+ mTrustManager = ITrustManager.Stub.asInterface(
+ ServiceManager.getService(Context.TRUST_SERVICE));
+ }
+ return mTrustManager;
+ }
+
/**
* @deprecated Use {@link android.view.WindowManager.LayoutParams#FLAG_DISMISS_KEYGUARD}
* and/or {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED}
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 6c0c3e8..099a5fe 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -48,6 +48,7 @@
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
+import android.view.NotificationHeaderView;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.RemoteViews;
@@ -3000,6 +3001,7 @@
*/
private void resetNotificationHeader(RemoteViews contentView) {
contentView.setImageViewResource(R.id.icon, 0);
+ contentView.setBoolean(R.id.notification_header, "setExpanded", false);
contentView.setTextViewText(R.id.app_name_text, null);
contentView.setViewVisibility(R.id.chronometer, View.GONE);
contentView.setViewVisibility(R.id.header_sub_text, View.GONE);
@@ -3134,6 +3136,8 @@
private void bindExpandButton(RemoteViews contentView) {
contentView.setDrawableParameters(R.id.expand_button, false, -1, resolveColor(),
PorterDuff.Mode.SRC_ATOP, -1);
+ contentView.setInt(R.id.notification_header, "setOriginalNotificationColor",
+ resolveColor());
}
private void bindHeaderChronometerAndTime(RemoteViews contentView) {
@@ -3197,7 +3201,6 @@
private void resetStandardTemplateWithActions(RemoteViews big) {
big.setViewVisibility(R.id.actions, View.GONE);
- big.setViewVisibility(R.id.action_divider, View.GONE);
big.removeAllViews(R.id.actions);
}
@@ -3209,7 +3212,6 @@
int N = mActions.size();
if (N > 0) {
big.setViewVisibility(R.id.actions, View.VISIBLE);
- big.setViewVisibility(R.id.action_divider, View.VISIBLE);
if (N>MAX_ACTION_BUTTONS) N=MAX_ACTION_BUTTONS;
for (int i=0; i<N; i++) {
final RemoteViews button = generateActionButton(mActions.get(i));
@@ -3276,11 +3278,7 @@
}
private void adaptNotificationHeaderForBigContentView(RemoteViews result) {
- // We have to set the collapse button instead
- result.setImageViewResource(R.id.expand_button, R.drawable.ic_arrow_up_14dp);
- // Apply the color again
- result.setDrawableParameters(R.id.expand_button, false, -1, resolveColor(),
- PorterDuff.Mode.SRC_ATOP, -1);
+ result.setBoolean(R.id.notification_header, "setExpanded", true);
}
/**
@@ -3352,10 +3350,14 @@
* Apply any necessariy colors to the small icon
*/
private void processSmallIconColor(Icon smallIcon, RemoteViews contentView) {
- if (!isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon)) {
+ boolean colorable = !isLegacy() || getColorUtil().isGrayscaleIcon(mContext, smallIcon);
+ if (colorable) {
contentView.setDrawableParameters(R.id.icon, false, -1, resolveColor(),
PorterDuff.Mode.SRC_ATOP, -1);
+
}
+ contentView.setInt(R.id.notification_header, "setOriginalIconColor",
+ colorable ? resolveColor() : NotificationHeaderView.NO_COLOR);
}
/**
diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java
index 3eb3e0f..89610e9 100644
--- a/core/java/android/app/NotificationManager.java
+++ b/core/java/android/app/NotificationManager.java
@@ -470,6 +470,20 @@
}
/**
+ * Deletes all automatic zen rules owned by the given package.
+ *
+ * @hide
+ */
+ public boolean removeAutomaticZenRules(String packageName) {
+ INotificationManager service = getService();
+ try {
+ return service.removeAutomaticZenRules(packageName);
+ } catch (RemoteException e) {
+ }
+ return false;
+ }
+
+ /**
* Checks the ability to read/modify notification policy for the calling package.
*
* <p>
diff --git a/core/java/android/app/SynchronousUserSwitchObserver.java b/core/java/android/app/SynchronousUserSwitchObserver.java
new file mode 100644
index 0000000..6d929f9
--- /dev/null
+++ b/core/java/android/app/SynchronousUserSwitchObserver.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.os.Bundle;
+import android.os.IRemoteCallback;
+import android.os.RemoteException;
+
+/**
+ * Base class for synchronous implementations of {@link IUserSwitchObserver}
+ *
+ * @hide
+ */
+public abstract class SynchronousUserSwitchObserver extends IUserSwitchObserver.Stub {
+ /**
+ * Calls {@link #onUserSwitching(int)} and notifies {@code reply} by calling
+ * {@link IRemoteCallback#sendResult(Bundle)}.
+ */
+ @Override
+ public final void onUserSwitching(int newUserId, IRemoteCallback reply) throws RemoteException {
+ try {
+ onUserSwitching(newUserId);
+ } finally {
+ if (reply != null) {
+ reply.sendResult(null);
+ }
+ }
+ }
+
+ /**
+ * Synchronous version of {@link IUserSwitchObserver#onUserSwitching(int, IRemoteCallback)}
+ */
+ public abstract void onUserSwitching(int newUserId) throws RemoteException;
+}
diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java
index 0f6ce12..4416415 100644
--- a/core/java/android/app/UiModeManager.java
+++ b/core/java/android/app/UiModeManager.java
@@ -233,4 +233,35 @@
}
return -1;
}
+
+ /**
+ * @return If UI mode is locked or not. When UI mode is locked, calls to change UI mode
+ * like {@link #enableCarMode(int)} will silently fail.
+ */
+ public boolean isUiModeLocked() {
+ if (mService != null) {
+ try {
+ return mService.isUiModeLocked();
+ } catch (RemoteException e) {
+ Log.e(TAG, "isUiModeLocked: RemoteException", e);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @return If Night mode is locked or not. When Night mode is locked, changing Night mode
+ * is only allowed to privileged system components and normal application's call
+ * to change Night mode using {@link #setNightMode(int)} will silently fail.
+ */
+ public boolean isNightModeLocked() {
+ if (mService != null) {
+ try {
+ return mService.isNightModeLocked();
+ } catch (RemoteException e) {
+ Log.e(TAG, "isNightModeLocked: RemoteException", e);
+ }
+ }
+ return true;
+ }
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 471750e..6b900a8 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -2325,8 +2325,8 @@
* with that alias already exists, it will be overwritten.
* @return {@code true} if the keys were installed, {@code false} otherwise.
*/
- public boolean installKeyPair(@Nullable ComponentName admin, PrivateKey privKey, Certificate cert,
- String alias) {
+ public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey,
+ @NonNull Certificate cert, @NonNull String alias) {
try {
final byte[] pemCert = Credentials.convertToPem(cert);
final byte[] pkcs8Key = KeyFactory.getInstance(privKey.getAlgorithm())
@@ -2343,6 +2343,24 @@
}
/**
+ * Called by a device or profile owner to remove all user credentials installed under a given
+ * alias.
+ *
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with, or
+ * {@code null} if calling from a delegated certificate installer.
+ * @param alias The private key alias under which the certificate is installed.
+ * @return {@code true} if the keys were both removed, {@code false} otherwise.
+ */
+ public boolean removeKeyPair(@Nullable ComponentName admin, @NonNull String alias) {
+ try {
+ return mService.removeKeyPair(admin, alias);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed talking with device policy service", e);
+ }
+ return false;
+ }
+
+ /**
* @return the alias of a given CA certificate in the certificate store, or {@code null} if it
* doesn't exist.
*/
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 6b4567c..1708ee3 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -135,6 +135,7 @@
void enforceCanManageCaCerts(in ComponentName admin);
boolean installKeyPair(in ComponentName who, in byte[] privKeyBuffer, in byte[] certBuffer, String alias);
+ boolean removeKeyPair(in ComponentName who, String alias);
void choosePrivateKeyAlias(int uid, in Uri uri, in String alias, IBinder aliasCallback);
void setCertInstallerPackage(in ComponentName who, String installerPackage);
diff --git a/core/java/android/app/assist/AssistContent.java b/core/java/android/app/assist/AssistContent.java
index 39902d7..1c9f573 100644
--- a/core/java/android/app/assist/AssistContent.java
+++ b/core/java/android/app/assist/AssistContent.java
@@ -35,7 +35,9 @@
*/
public void setDefaultIntent(Intent intent) {
mIntent = intent;
- setWebUri(null);
+ mIsAppProvidedIntent = false;
+ mIsAppProvidedWebUri = false;
+ mUri = null;
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri != null) {
@@ -161,6 +163,7 @@
}
mIsAppProvidedIntent = in.readInt() == 1;
mExtras = in.readBundle();
+ mIsAppProvidedWebUri = in.readInt() == 1;
}
void writeToParcelInternal(Parcel dest, int flags) {
@@ -190,6 +193,7 @@
}
dest.writeInt(mIsAppProvidedIntent ? 1 : 0);
dest.writeBundle(mExtras);
+ dest.writeInt(mIsAppProvidedWebUri ? 1 : 0);
}
@Override
diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl
index 2dea545..a3fe6ab 100644
--- a/core/java/android/app/trust/ITrustManager.aidl
+++ b/core/java/android/app/trust/ITrustManager.aidl
@@ -29,6 +29,7 @@
void registerTrustListener(in ITrustListener trustListener);
void unregisterTrustListener(in ITrustListener trustListener);
void reportKeyguardShowingChanged();
+ void setDeviceLockedForUser(int userId, boolean locked);
boolean isDeviceLocked(int userId);
boolean isDeviceSecure(int userId);
}
diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java
index aff69f0..ee591d3 100644
--- a/core/java/android/app/trust/TrustManager.java
+++ b/core/java/android/app/trust/TrustManager.java
@@ -51,6 +51,21 @@
}
/**
+ * Changes the lock status for the given user. This is only applicable to Managed Profiles,
+ * other users should be handled by Keyguard.
+ *
+ * @param userId The id for the user to be locked/unlocked.
+ * @param locked The value for that user's locked state.
+ */
+ public void setDeviceLockedForUser(int userId, boolean locked) {
+ try {
+ mService.setDeviceLockedForUser(userId, locked);
+ } catch (RemoteException e) {
+ onError(e);
+ }
+ }
+
+ /**
* Reports that user {@param userId} has tried to unlock the device.
*
* @param successful if true, the unlock attempt was successful.
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 2d825fa..3e8a51e 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -74,6 +74,8 @@
* {@link #listenUsingRfcommWithServiceRecord(String,UUID)}; or start a scan for
* Bluetooth LE devices with {@link #startLeScan(LeScanCallback callback)}.
*
+ * <p>This class is thread safe.
+ *
* <p class="note"><strong>Note:</strong>
* Most methods require the {@link android.Manifest.permission#BLUETOOTH}
* permission and some also require the
@@ -82,7 +84,7 @@
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For more information about using Bluetooth, read the
- * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.
* </div>
*
* {@see BluetoothDevice}
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index d27dfa0..cd5c205 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -25,6 +25,7 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.os.ParcelUuid;
+import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
@@ -823,6 +824,9 @@
return false;
}
try {
+ Log.i(TAG, "createBond() for device " + getAddress() +
+ " called by pid: " + Process.myPid() +
+ " tid: " + Process.myTid());
return sService.createBond(this, TRANSPORT_AUTO);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
@@ -854,6 +858,9 @@
throw new IllegalArgumentException(transport + " is not a valid Bluetooth transport");
}
try {
+ Log.i(TAG, "createBond() for device " + getAddress() +
+ " called by pid: " + Process.myPid() +
+ " tid: " + Process.myTid());
return sService.createBond(this, transport);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
@@ -922,6 +929,9 @@
return false;
}
try {
+ Log.i(TAG, "cancelBondProcess() for device " + getAddress() +
+ " called by pid: " + Process.myPid() +
+ " tid: " + Process.myTid());
return sService.cancelBondProcess(this);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
@@ -943,6 +953,9 @@
return false;
}
try {
+ Log.i(TAG, "removeBond() for device " + getAddress() +
+ " called by pid: " + Process.myPid() +
+ " tid: " + Process.myTid());
return sService.removeBond(this);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
diff --git a/core/java/android/bluetooth/BluetoothHeadsetClientCall.java b/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
index 7b5a045..1fb7825 100644
--- a/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
+++ b/core/java/android/bluetooth/BluetoothHeadsetClientCall.java
@@ -172,8 +172,12 @@
}
public String toString() {
+ return toString(false);
+ }
+
+ public String toString(boolean loggable) {
StringBuilder builder = new StringBuilder("BluetoothHeadsetClientCall{mDevice: ");
- builder.append(mDevice);
+ builder.append(loggable ? mDevice.hashCode() : mDevice);
builder.append(", mId: ");
builder.append(mId);
builder.append(", mState: ");
@@ -189,7 +193,7 @@
default: builder.append(mState); break;
}
builder.append(", mNumber: ");
- builder.append(mNumber);
+ builder.append(loggable ? mNumber.hashCode() : mNumber);
builder.append(", mMultiParty: ");
builder.append(mMultiParty);
builder.append(", mOutgoing: ");
diff --git a/core/java/android/content/ClipDescription.java b/core/java/android/content/ClipDescription.java
index e988516..1b024e2 100644
--- a/core/java/android/content/ClipDescription.java
+++ b/core/java/android/content/ClipDescription.java
@@ -18,6 +18,7 @@
import android.os.Parcel;
import android.os.Parcelable;
+import android.os.PersistableBundle;
import android.text.TextUtils;
import java.util.ArrayList;
@@ -59,8 +60,35 @@
*/
public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";
+ /**
+ * The name of the extra used to define a component name when copying/dragging
+ * an app icon from Launcher.
+ * <p>
+ * Type: String
+ * </p>
+ * <p>
+ * Use {@link ComponentName#unflattenFromString(String)}
+ * and {@link ComponentName#flattenToString()} to convert the extra value
+ * to/from {@link ComponentName}.
+ * </p>
+ */
+ public static final String EXTRA_TARGET_COMPONENT_NAME =
+ "android.content.extra.TARGET_COMPONENT_NAME";
+
+ /**
+ * The name of the extra used to define a user serial number when copying/dragging
+ * an app icon from Launcher.
+ * <p>
+ * Type: long
+ * </p>
+ */
+ public static final String EXTRA_USER_SERIAL_NUMBER =
+ "android.content.extra.USER_SERIAL_NUMBER";
+
+
final CharSequence mLabel;
final String[] mMimeTypes;
+ private PersistableBundle mExtras;
/**
* Create a new clip.
@@ -173,6 +201,27 @@
return mMimeTypes[index];
}
+ /**
+ * Retrieve extended data from the clip description.
+ *
+ * @return the bundle containing extended data previously set with
+ * {@link #setExtras(PersistableBundle)}, or null if no extras have been set.
+ *
+ * @see #setExtras(PersistableBundle)
+ */
+ public PersistableBundle getExtras() {
+ return mExtras;
+ }
+
+ /**
+ * Add extended data to the clip description.
+ *
+ * @see #getExtras()
+ */
+ public void setExtras(PersistableBundle extras) {
+ mExtras = new PersistableBundle(extras);
+ }
+
/** @hide */
public void validate() {
if (mMimeTypes == null) {
@@ -211,6 +260,13 @@
b.append(mLabel);
b.append('"');
}
+ if (mExtras != null) {
+ if (!first) {
+ b.append(' ');
+ }
+ first = false;
+ b.append(mExtras.toString());
+ }
return !first;
}
@@ -236,11 +292,13 @@
public void writeToParcel(Parcel dest, int flags) {
TextUtils.writeToParcel(mLabel, dest, flags);
dest.writeStringArray(mMimeTypes);
+ dest.writePersistableBundle(mExtras);
}
ClipDescription(Parcel in) {
mLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
mMimeTypes = in.createStringArray();
+ mExtras = in.readPersistableBundle();
}
public static final Parcelable.Creator<ClipDescription> CREATOR =
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 853bc6c..9d0ebc2 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -986,6 +986,7 @@
stableProvider = acquireProvider(uri);
}
releaseUnstableProvider(unstableProvider);
+ unstableProvider = null;
ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
fd.getParcelFileDescriptor(), stableProvider);
@@ -1130,6 +1131,7 @@
stableProvider = acquireProvider(uri);
}
releaseUnstableProvider(unstableProvider);
+ unstableProvider = null;
ParcelFileDescriptor pfd = new ParcelFileDescriptorInner(
fd.getParcelFileDescriptor(), stableProvider);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index b73fa50..c61f204 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -53,8 +53,8 @@
import android.os.UserManager;
import android.provider.MediaStore;
import android.util.AttributeSet;
-import android.view.DisplayAdjustments;
import android.view.Display;
+import android.view.DisplayAdjustments;
import android.view.ViewDebug;
import android.view.WindowManager;
@@ -159,6 +159,16 @@
*/
public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
+ /**
+ * Database open flag: when set, the database is opened without support for
+ * localized collators.
+ *
+ * @see #openOrCreateDatabase(String, int, CursorFactory)
+ * @see #openOrCreateDatabase(String, int, CursorFactory, DatabaseErrorHandler)
+ * @see SQLiteDatabase#NO_LOCALIZED_COLLATORS
+ */
+ public static final int MODE_NO_LOCALIZED_COLLATORS = 0x0010;
+
/** @hide */
@IntDef(flag = true,
value = {
@@ -596,13 +606,13 @@
public abstract String getPackageCodePath();
/**
- * {@hide}
- * Return the full path to the shared prefs file for the given prefs group name.
- *
- * <p>Note: this is not generally useful for applications, since they should
- * not be directly accessing the file system.
+ * @hide
+ * @deprecated use {@link #getSharedPreferencesPath(String)}
*/
- public abstract File getSharedPrefsFile(String name);
+ @Deprecated
+ public File getSharedPrefsFile(String name) {
+ return getSharedPreferencesPath(name);
+ }
/**
* Retrieve and hold the contents of the preferences file 'name', returning
@@ -644,6 +654,7 @@
* @return The single {@link SharedPreferences} instance that can be used
* to retrieve and modify the preference values.
*
+ * @see #getSharedPreferencesPath(String)
* @see #MODE_PRIVATE
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
@@ -729,6 +740,20 @@
public abstract File getFileStreamPath(String name);
/**
+ * Returns the absolute path on the filesystem where a file created with
+ * {@link #getSharedPreferences(String, int)} is stored.
+ * <p>
+ * The returned path may change over time if the calling app is moved to an
+ * adopted storage device, so only relative paths should be persisted.
+ *
+ * @param name The name of the shared preferences for which you would like
+ * to get a path.
+ * @return An absolute path to the given file.
+ * @see #getSharedPreferences(String, int)
+ */
+ public abstract File getSharedPreferencesPath(String name);
+
+ /**
* Returns the absolute path to the directory on the filesystem where files
* created with {@link #openFileOutput} are stored.
* <p>
@@ -746,27 +771,6 @@
public abstract File getFilesDir();
/**
- * Return the filesystem directory for storing device-encrypted private app
- * data. Files stored in this location are typically encrypted with a key
- * tied to the physical device, and they can be accessed whenever the device
- * has booted successfully, both <em>before and after</em> the user has
- * entered their credentials (such as a lock pattern or PIN).
- */
- public abstract File getDeviceEncryptedFilesDir();
-
- /**
- * Return the filesystem directory for storing credential-encrypted private
- * app data. Files stored in this location are typically encrypted with a
- * key tied to user credentials, and they can be accessed
- * <em>only after</em> the user has entered their credentials (such as a
- * lock pattern or PIN).
- *
- * @hide
- */
- @SystemApi
- public abstract File getCredentialEncryptedFilesDir();
-
- /**
* Returns the absolute path to the directory on the filesystem similar to
* {@link #getFilesDir()}. The difference is that files placed under this
* directory will be excluded from automatic backup to remote storage. See
@@ -1271,6 +1275,7 @@
* default operation, {@link #MODE_WORLD_READABLE}
* and {@link #MODE_WORLD_WRITEABLE} to control permissions.
* Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
+ * Use {@link #MODE_NO_LOCALIZED_COLLATORS} to disable localized collators.
* @param factory An optional factory class that is called to instantiate a
* cursor when query is called.
*
@@ -1281,6 +1286,7 @@
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
* @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
+ * @see #MODE_NO_LOCALIZED_COLLATORS
* @see #deleteDatabase
*/
public abstract SQLiteDatabase openOrCreateDatabase(String name,
@@ -1298,6 +1304,7 @@
* default operation, {@link #MODE_WORLD_READABLE}
* and {@link #MODE_WORLD_WRITEABLE} to control permissions.
* Use {@link #MODE_ENABLE_WRITE_AHEAD_LOGGING} to enable write-ahead logging by default.
+ * Use {@link #MODE_NO_LOCALIZED_COLLATORS} to disable localized collators.
* @param factory An optional factory class that is called to instantiate a
* cursor when query is called.
* @param errorHandler the {@link DatabaseErrorHandler} to be used when sqlite reports database
@@ -1309,6 +1316,7 @@
* @see #MODE_WORLD_READABLE
* @see #MODE_WORLD_WRITEABLE
* @see #MODE_ENABLE_WRITE_AHEAD_LOGGING
+ * @see #MODE_NO_LOCALIZED_COLLATORS
* @see #deleteDatabase
*/
public abstract SQLiteDatabase openOrCreateDatabase(String name,
@@ -3857,6 +3865,22 @@
public static final int CONTEXT_RESTRICTED = 0x00000004;
/**
+ * Flag for use with {@link #createPackageContext}: point all file APIs at
+ * device-encrypted storage.
+ *
+ * @hide
+ */
+ public static final int CONTEXT_DEVICE_ENCRYPTED_STORAGE = 0x00000008;
+
+ /**
+ * Flag for use with {@link #createPackageContext}: point all file APIs at
+ * credential-encrypted storage.
+ *
+ * @hide
+ */
+ public static final int CONTEXT_CREDENTIAL_ENCRYPTED_STORAGE = 0x00000010;
+
+ /**
* @hide Used to indicate we should tell the activity manager about the process
* loading this code.
*/
@@ -3956,6 +3980,48 @@
public abstract Context createDisplayContext(@NonNull Display display);
/**
+ * Return a new Context object for the current Context but whose storage
+ * APIs are backed by device-encrypted storage.
+ * <p>
+ * Data stored in device-encrypted storage is typically encrypted with a key
+ * tied to the physical device, and it can be accessed when the device has
+ * booted successfully, both <em>before and after</em> the user has
+ * authenticated with their credentials (such as a lock pattern or PIN).
+ * Because device-encrypted data is available before user authentication,
+ * you should carefully consider what data you store using this Context.
+ * <p>
+ * Each call to this method returns a new instance of a Context object;
+ * Context objects are not shared, however common state (ClassLoader, other
+ * Resources for the same configuration) may be so the Context itself can be
+ * fairly lightweight.
+ *
+ * @return new Context or {@code null} if device-encrypted storage is not
+ * supported or available on this device.
+ * @see #isDeviceEncryptedStorage()
+ */
+ public abstract Context createDeviceEncryptedStorageContext();
+
+ /**
+ * Return a new Context object for the current Context but whose storage
+ * APIs are backed by credential-encrypted storage.
+ * <p>
+ * Data stored in credential-encrypted storage is typically encrypted with a
+ * key tied to user credentials, and they can be accessed
+ * <em>only after</em> the user has entered their credentials (such as a
+ * lock pattern or PIN).
+ * <p>
+ * Each call to this method returns a new instance of a Context object;
+ * Context objects are not shared, however common state (ClassLoader, other
+ * Resources for the same configuration) may be so the Context itself can be
+ * fairly lightweight.
+ *
+ * @see #isCredentialEncryptedStorage()
+ * @hide
+ */
+ @SystemApi
+ public abstract Context createCredentialEncryptedStorageContext();
+
+ /**
* Gets the display adjustments holder for this context. This information
* is provided on a per-application or activity basis and is used to simulate lower density
* display metrics for legacy applications and restricted screen sizes.
@@ -3976,4 +4042,22 @@
public boolean isRestricted() {
return false;
}
+
+ /**
+ * Indicates if the storage APIs of this Context are backed by
+ * device-encrypted storage.
+ *
+ * @see #createDeviceEncryptedStorageContext()
+ */
+ public abstract boolean isDeviceEncryptedStorage();
+
+ /**
+ * Indicates if the storage APIs of this Context are backed by
+ * credential-encrypted storage.
+ *
+ * @see #createCredentialEncryptedStorageContext()
+ * @hide
+ */
+ @SystemApi
+ public abstract boolean isCredentialEncryptedStorage();
}
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index a345aae..e49e771 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -160,12 +160,6 @@
return mBase.getPackageCodePath();
}
- /** @hide */
- @Override
- public File getSharedPrefsFile(String name) {
- return mBase.getSharedPrefsFile(name);
- }
-
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
@@ -199,6 +193,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ return mBase.getSharedPreferencesPath(name);
+ }
+
+ @Override
public String[] fileList() {
return mBase.fileList();
}
@@ -209,18 +208,6 @@
}
@Override
- public File getDeviceEncryptedFilesDir() {
- return mBase.getDeviceEncryptedFilesDir();
- }
-
- /** {@hide} */
- @SystemApi
- @Override
- public File getCredentialEncryptedFilesDir() {
- return mBase.getCredentialEncryptedFilesDir();
- }
-
- @Override
public File getNoBackupFilesDir() {
return mBase.getNoBackupFilesDir();
}
@@ -803,4 +790,28 @@
public DisplayAdjustments getDisplayAdjustments(int displayId) {
return mBase.getDisplayAdjustments(displayId);
}
+
+ @Override
+ public Context createDeviceEncryptedStorageContext() {
+ return mBase.createDeviceEncryptedStorageContext();
+ }
+
+ /** {@hide} */
+ @SystemApi
+ @Override
+ public Context createCredentialEncryptedStorageContext() {
+ return mBase.createCredentialEncryptedStorageContext();
+ }
+
+ @Override
+ public boolean isDeviceEncryptedStorage() {
+ return mBase.isDeviceEncryptedStorage();
+ }
+
+ /** {@hide} */
+ @SystemApi
+ @Override
+ public boolean isCredentialEncryptedStorage() {
+ return mBase.isCredentialEncryptedStorage();
+ }
}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 2178c38..a27d1cb 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1926,6 +1926,24 @@
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_ALARM_CHANGED = "android.intent.action.ALARM_CHANGED";
+
+ /**
+ * Broadcast Action: This is broadcast once, after the system has finished
+ * booting and the user is in a "locked" state. A user is locked when their
+ * credential-encrypted private app data storage is unavailable. Once the
+ * user has entered their credentials (such as a lock pattern or PIN) for
+ * the first time, the {@link #ACTION_BOOT_COMPLETED} broadcast will be
+ * sent.
+ * <p>
+ * You must hold the
+ * {@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission in
+ * order to receive this broadcast.
+ * <p class="note">
+ * This is a protected intent that can only be sent by the system.
+ */
+ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+ public static final String ACTION_LOCKED_BOOT_COMPLETED = "android.intent.action.LOCKED_BOOT_COMPLETED";
+
/**
* Broadcast Action: This is broadcast once, after the system has finished
* booting. It can be used to perform application-specific initialization,
@@ -1938,6 +1956,7 @@
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
+
/**
* Broadcast Action: This is broadcast when a user action should request a
* temporary system dialog to dismiss. Some examples of temporary system
@@ -2972,6 +2991,28 @@
"android.intent.action.MANAGED_PROFILE_REMOVED";
/**
+ * Broadcast sent to the primary user when an associated managed profile's availability has
+ * changed. This includes when the user toggles the profile's quiet mode, or when the profile
+ * owner suspends the profile. Carries an extra {@link #EXTRA_USER} that specifies the
+ * UserHandle of the profile. When quiet mode is changed, this broadcast will carry a boolean
+ * extra {@link #EXTRA_QUIET_MODE} indicating the new state of quiet mode. This is only sent to
+ * registered receivers, not manifest receivers.
+ */
+ public static final String ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED =
+ "android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED";
+
+ /**
+ * Broadcast sent to the managed profile when its availability has changed. This includes when
+ * the user toggles the profile's quiet mode, or when the profile owner suspends the profile.
+ * When quiet mode is changed, this broadcast will carry a boolean extra
+ * {@link #EXTRA_QUIET_MODE} indicating the new state of quiet mode. This is only sent to
+ * registered receivers, not manifest receivers. See also
+ * {@link #ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED}
+ */
+ public static final String ACTION_AVAILABILITY_CHANGED =
+ "android.intent.action.AVAILABILITY_CHANGED";
+
+ /**
* Sent when the user taps on the clock widget in the system's "quick settings" area.
*/
public static final String ACTION_QUICK_CLOCK =
@@ -4009,6 +4050,10 @@
/** {@hide} */
public static final String EXTRA_INDEX = "android.intent.extra.INDEX";
+ /**
+ * Optional boolean extra indicating whether quiet mode has been switched on or off.
+ */
+ public static final String EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE";
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// Intent flags (see mFlags variable).
@@ -4426,6 +4471,22 @@
* @hide
*/
public static final int FLAG_RECEIVER_BOOT_UPGRADE = 0x02000000;
+ /**
+ * If set, the broadcast will always go to manifest receivers in background (cached
+ * or not running) apps, regardless of whether that would be done by default. By
+ * default they will only receive broadcasts if the broadcast has specified an
+ * explicit component or package name.
+ * @hide
+ */
+ public static final int FLAG_RECEIVER_INCLUDE_BACKGROUND = 0x01000000;
+ /**
+ * If set, the broadcast will never go to manifest receivers in background (cached
+ * or not running) apps, regardless of whether that would be done by default. By
+ * default they will receive broadcasts if the broadcast has specified an
+ * explicit component or package name.
+ * @hide
+ */
+ public static final int FLAG_RECEIVER_EXCLUDE_BACKGROUND = 0x00800000;
/**
* @hide Flags that can't be changed with PendingIntent.
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 4a3c59b..0cb0e9f 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -756,13 +756,20 @@
}
public void dump(Printer pw, String prefix) {
+ dump(pw, prefix, DUMP_FLAG_ALL);
+ }
+
+ /** @hide */
+ public void dump(Printer pw, String prefix, int flags) {
super.dumpFront(pw, prefix);
if (permission != null) {
pw.println(prefix + "permission=" + permission);
}
- pw.println(prefix + "taskAffinity=" + taskAffinity
- + " targetActivity=" + targetActivity
- + " persistableMode=" + persistableModeToString());
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ pw.println(prefix + "taskAffinity=" + taskAffinity
+ + " targetActivity=" + targetActivity
+ + " persistableMode=" + persistableModeToString());
+ }
if (launchMode != 0 || flags != 0 || theme != 0) {
pw.println(prefix + "launchMode=" + launchMode
+ " flags=0x" + Integer.toHexString(flags)
@@ -777,14 +784,17 @@
if (uiOptions != 0) {
pw.println(prefix + " uiOptions=0x" + Integer.toHexString(uiOptions));
}
- pw.println(prefix + "resizeable=" + resizeable + " supportsPip=" + supportsPip);
- pw.println(prefix + "lockTaskLaunchMode=" + lockTaskLaunchModeToString(lockTaskLaunchMode));
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ pw.println(prefix + "resizeable=" + resizeable + " supportsPip=" + supportsPip);
+ pw.println(prefix + "lockTaskLaunchMode="
+ + lockTaskLaunchModeToString(lockTaskLaunchMode));
+ }
if (layout != null) {
pw.println(prefix + "initialLayout=" + layout.width + "|"
+ layout.widthFraction + ", " + layout.height + "|"
+ layout.heightFraction + ", " + layout.gravity);
}
- super.dumpBack(pw, prefix);
+ super.dumpBack(pw, prefix, flags);
}
public String toString() {
diff --git a/core/java/android/content/pm/ApplicationInfo.aidl b/core/java/android/content/pm/ApplicationInfo.aidl
index 006d1bd..59b0a89 100644
--- a/core/java/android/content/pm/ApplicationInfo.aidl
+++ b/core/java/android/content/pm/ApplicationInfo.aidl
@@ -1,17 +1,17 @@
-/* //device/java/android/android/view/WindowManager.aidl
+/*
**
** Copyright 2007, The Android Open 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
+** 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,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
+** 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.
*/
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 65e5945..0633bff 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -22,7 +22,6 @@
import android.os.Environment;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.text.TextUtils;
@@ -455,8 +454,8 @@
public static final int PRIVATE_FLAG_PRIVILEGED = 1<<3;
/**
- * Value for {@link #flags}: {@code true} if the application has any IntentFiler with some
- * data URI using HTTP or HTTPS with an associated VIEW action.
+ * Value for {@link #privateFlags}: {@code true} if the application has any IntentFiler
+ * with some data URI using HTTP or HTTPS with an associated VIEW action.
*
* {@hide}
*/
@@ -487,6 +486,13 @@
public static final int PRIVATE_FLAG_AUTOPLAY = 1 << 7;
/**
+ * Value for {@link #flags}: {@code true} if the application is blocked via restrictions
+ * and for most purposes is considered as not installed.
+ * {@hide}
+ */
+ public static final int PRIVATE_FLAG_EPHEMERAL = 1<<8;
+
+ /**
* When set, at least one component inside this application is encryption aware.
*
* @hide
@@ -584,13 +590,21 @@
public String[] sharedLibraryFiles;
/**
- * Full path to a directory assigned to the package for its persistent data.
+ * Full path to the default directory assigned to the package for its
+ * persistent data.
*/
public String dataDir;
- /** {@hide} */
+ /**
+ * Full path to the device-encrypted directory assigned to the package for
+ * its persistent data.
+ */
public String deviceEncryptedDataDir;
- /** {@hide} */
+
+ /**
+ * Full path to the credential-encrypted directory assigned to the package
+ * for its persistent data.
+ */
public String credentialEncryptedDataDir;
/**
@@ -696,21 +710,30 @@
public int installLocation = PackageInfo.INSTALL_LOCATION_UNSPECIFIED;
public void dump(Printer pw, String prefix) {
+ dump(pw, prefix, DUMP_FLAG_ALL);
+ }
+
+ /** @hide */
+ public void dump(Printer pw, String prefix, int flags) {
super.dumpFront(pw, prefix);
- if (className != null) {
+ if ((flags&DUMP_FLAG_DETAILS) != 0 && className != null) {
pw.println(prefix + "className=" + className);
}
if (permission != null) {
pw.println(prefix + "permission=" + permission);
}
pw.println(prefix + "processName=" + processName);
- pw.println(prefix + "taskAffinity=" + taskAffinity);
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ pw.println(prefix + "taskAffinity=" + taskAffinity);
+ }
pw.println(prefix + "uid=" + uid + " flags=0x" + Integer.toHexString(flags)
+ " privateFlags=0x" + Integer.toHexString(privateFlags)
+ " theme=0x" + Integer.toHexString(theme));
- pw.println(prefix + "requiresSmallestWidthDp=" + requiresSmallestWidthDp
- + " compatibleWidthLimitDp=" + compatibleWidthLimitDp
- + " largestWidthLimitDp=" + largestWidthLimitDp);
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ pw.println(prefix + "requiresSmallestWidthDp=" + requiresSmallestWidthDp
+ + " compatibleWidthLimitDp=" + compatibleWidthLimitDp
+ + " largestWidthLimitDp=" + largestWidthLimitDp);
+ }
pw.println(prefix + "sourceDir=" + sourceDir);
if (!Objects.equals(sourceDir, publicSourceDir)) {
pw.println(prefix + "publicSourceDir=" + publicSourceDir);
@@ -725,31 +748,36 @@
if (resourceDirs != null) {
pw.println(prefix + "resourceDirs=" + resourceDirs);
}
- if (seinfo != null) {
+ if ((flags&DUMP_FLAG_DETAILS) != 0 && seinfo != null) {
pw.println(prefix + "seinfo=" + seinfo);
}
pw.println(prefix + "dataDir=" + dataDir);
- pw.println(prefix + "deviceEncryptedDataDir=" + deviceEncryptedDataDir);
- pw.println(prefix + "credentialEncryptedDataDir=" + credentialEncryptedDataDir);
- if (sharedLibraryFiles != null) {
- pw.println(prefix + "sharedLibraryFiles=" + Arrays.toString(sharedLibraryFiles));
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ pw.println(prefix + "deviceEncryptedDataDir=" + deviceEncryptedDataDir);
+ pw.println(prefix + "credentialEncryptedDataDir=" + credentialEncryptedDataDir);
+ if (sharedLibraryFiles != null) {
+ pw.println(prefix + "sharedLibraryFiles=" + Arrays.toString(sharedLibraryFiles));
+ }
}
pw.println(prefix + "enabled=" + enabled + " targetSdkVersion=" + targetSdkVersion
+ " versionCode=" + versionCode);
- if (manageSpaceActivityName != null) {
- pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName);
- }
- if (descriptionRes != 0) {
- pw.println(prefix + "description=0x"+Integer.toHexString(descriptionRes));
- }
- if (uiOptions != 0) {
- pw.println(prefix + "uiOptions=0x" + Integer.toHexString(uiOptions));
- }
- pw.println(prefix + "supportsRtl=" + (hasRtlSupport() ? "true" : "false"));
- if (fullBackupContent > 0) {
- pw.println(prefix + "fullBackupContent=@xml/" + fullBackupContent);
- } else {
- pw.println(prefix + "fullBackupContent=" + (fullBackupContent < 0 ? "false" : "true"));
+ if ((flags&DUMP_FLAG_DETAILS) != 0) {
+ if (manageSpaceActivityName != null) {
+ pw.println(prefix + "manageSpaceActivityName=" + manageSpaceActivityName);
+ }
+ if (descriptionRes != 0) {
+ pw.println(prefix + "description=0x" + Integer.toHexString(descriptionRes));
+ }
+ if (uiOptions != 0) {
+ pw.println(prefix + "uiOptions=0x" + Integer.toHexString(uiOptions));
+ }
+ pw.println(prefix + "supportsRtl=" + (hasRtlSupport() ? "true" : "false"));
+ if (fullBackupContent > 0) {
+ pw.println(prefix + "fullBackupContent=@xml/" + fullBackupContent);
+ } else {
+ pw.println(prefix + "fullBackupContent="
+ + (fullBackupContent < 0 ? "false" : "true"));
+ }
}
super.dumpBack(pw, prefix);
}
@@ -1076,6 +1104,13 @@
/**
* @hide
*/
+ public boolean isEphemeralApp() {
+ return (privateFlags & ApplicationInfo.PRIVATE_FLAG_EPHEMERAL) != 0;
+ }
+
+ /**
+ * @hide
+ */
@Override protected ApplicationInfo getApplicationInfo() {
return this;
}
diff --git a/core/java/android/content/pm/ComponentInfo.java b/core/java/android/content/pm/ComponentInfo.java
index ad7ebe5..a295cc5 100644
--- a/core/java/android/content/pm/ComponentInfo.java
+++ b/core/java/android/content/pm/ComponentInfo.java
@@ -150,23 +150,32 @@
protected void dumpFront(Printer pw, String prefix) {
super.dumpFront(pw, prefix);
+ if (processName != null && !packageName.equals(processName)) {
+ pw.println(prefix + "processName=" + processName);
+ }
pw.println(prefix + "enabled=" + enabled + " exported=" + exported
- + " encryptionAware=" + encryptionAware + " processName=" + processName);
+ + " encryptionAware=" + encryptionAware);
if (descriptionRes != 0) {
pw.println(prefix + "description=" + descriptionRes);
}
}
-
+
protected void dumpBack(Printer pw, String prefix) {
- if (applicationInfo != null) {
- pw.println(prefix + "ApplicationInfo:");
- applicationInfo.dump(pw, prefix + " ");
- } else {
- pw.println(prefix + "ApplicationInfo: null");
+ dumpBack(pw, prefix, DUMP_FLAG_ALL);
+ }
+
+ void dumpBack(Printer pw, String prefix, int flags) {
+ if ((flags&DUMP_FLAG_APPLICATION) != 0) {
+ if (applicationInfo != null) {
+ pw.println(prefix + "ApplicationInfo:");
+ applicationInfo.dump(pw, prefix + " ", flags);
+ } else {
+ pw.println(prefix + "ApplicationInfo: null");
+ }
}
super.dumpBack(pw, prefix);
}
-
+
public void writeToParcel(Parcel dest, int parcelableFlags) {
super.writeToParcel(dest, parcelableFlags);
if ((parcelableFlags & Parcelable.PARCELABLE_ELIDE_DUPLICATES) != 0) {
diff --git a/core/java/android/content/pm/EphemeralApplicationInfo.aidl b/core/java/android/content/pm/EphemeralApplicationInfo.aidl
new file mode 100644
index 0000000..5aaae78
--- /dev/null
+++ b/core/java/android/content/pm/EphemeralApplicationInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2015 The Android Open 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;
+
+parcelable EphemeralApplicationInfo;
diff --git a/core/java/android/content/pm/EphemeralApplicationInfo.java b/core/java/android/content/pm/EphemeralApplicationInfo.java
new file mode 100644
index 0000000..87663f1
--- /dev/null
+++ b/core/java/android/content/pm/EphemeralApplicationInfo.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class represents the state of an ephemeral app.
+ *
+ * @hide
+ */
+public final class EphemeralApplicationInfo implements Parcelable {
+ private final ApplicationInfo mApplicationInfo;
+
+ private final String mPackageName;
+ private final CharSequence mLabelText;
+
+ private final String[] mRequestedPermissions;
+ private final String[] mGrantedPermissions;
+
+ public EphemeralApplicationInfo(ApplicationInfo appInfo,
+ String[] requestedPermissions, String[] grantedPermissions) {
+ mApplicationInfo = appInfo;
+ mPackageName = null;
+ mLabelText = null;
+ mRequestedPermissions = requestedPermissions;
+ mGrantedPermissions = grantedPermissions;
+ }
+
+ public EphemeralApplicationInfo(String packageName, CharSequence label,
+ String[] requestedPermissions, String[] grantedPermissions) {
+ mApplicationInfo = null;
+ mPackageName = packageName;
+ mLabelText = label;
+ mRequestedPermissions = requestedPermissions;
+ mGrantedPermissions = grantedPermissions;
+ }
+
+ private EphemeralApplicationInfo(Parcel parcel) {
+ mPackageName = parcel.readString();
+ mLabelText = parcel.readCharSequence();
+ mRequestedPermissions = parcel.readStringArray();
+ mGrantedPermissions = parcel.createStringArray();
+ mApplicationInfo = parcel.readParcelable(null);
+ }
+
+ public @NonNull String getPackageName() {
+ if (mApplicationInfo != null) {
+ return mApplicationInfo.packageName;
+ }
+ return mPackageName;
+ }
+
+ public @NonNull CharSequence loadLabel(@NonNull PackageManager packageManager) {
+ if (mApplicationInfo != null) {
+ return mApplicationInfo.loadLabel(packageManager);
+ }
+ return mLabelText;
+ }
+
+ public @NonNull Drawable loadIcon(@NonNull PackageManager packageManager) {
+ if (mApplicationInfo != null) {
+ return mApplicationInfo.loadIcon(packageManager);
+ }
+ return packageManager.getEphemeralApplicationIcon(mPackageName);
+ }
+
+ public @Nullable String[] getRequestedPermissions() {
+ return mRequestedPermissions;
+ }
+
+ public @Nullable String[] getGrantedPermissions() {
+ return mGrantedPermissions;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeString(mPackageName);
+ parcel.writeCharSequence(mLabelText);
+ parcel.writeStringArray(mRequestedPermissions);
+ parcel.writeStringArray(mGrantedPermissions);
+ parcel.writeParcelable(mApplicationInfo, flags);
+ }
+
+ public static final Creator<EphemeralApplicationInfo> CREATOR =
+ new Creator<EphemeralApplicationInfo>() {
+ @Override
+ public EphemeralApplicationInfo createFromParcel(Parcel parcel) {
+ return new EphemeralApplicationInfo(parcel);
+ }
+
+ @Override
+ public EphemeralApplicationInfo[] newArray(int size) {
+ return new EphemeralApplicationInfo[0];
+ }
+ };
+}
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index b9a42eb..b947a2b 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -23,6 +23,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ContainerEncryptionParams;
+import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageInstallObserver2;
import android.content.pm.IPackageInstaller;
@@ -47,6 +48,7 @@
import android.content.pm.UserInfo;
import android.content.pm.VerificationParams;
import android.content.pm.VerifierDeviceIdentity;
+import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
@@ -513,4 +515,10 @@
boolean isPermissionRevokedByPolicy(String permission, String packageName, int userId);
String getPermissionControllerPackageName();
+
+ ParceledListSlice getEphemeralApplications(int userId);
+ byte[] getEphemeralApplicationCookie(String packageName, int userId);
+ boolean setEphemeralApplicationCookie(String packageName, in byte[] cookie, int userId);
+ Bitmap getEphemeralApplicationIcon(String packageName, int userId);
+ boolean isEphemeralApplication(String packageName, int userId);
}
diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java
index 22a899c..4df83036 100644
--- a/core/java/android/content/pm/PackageItemInfo.java
+++ b/core/java/android/content/pm/PackageItemInfo.java
@@ -282,6 +282,21 @@
return null;
}
+ /**
+ * @hide Flag for dumping: include all details.
+ */
+ public static final int DUMP_FLAG_DETAILS = 1<<0;
+
+ /**
+ * @hide Flag for dumping: include nested ApplicationInfo.
+ */
+ public static final int DUMP_FLAG_APPLICATION = 1<<1;
+
+ /**
+ * @hide Flag for dumping: all flags to dump everything.
+ */
+ public static final int DUMP_FLAG_ALL = DUMP_FLAG_DETAILS | DUMP_FLAG_APPLICATION;
+
protected void dumpFront(Printer pw, String prefix) {
if (name != null) {
pw.println(prefix + "name=" + name);
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index aa960a4..a822150 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -47,8 +47,10 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
+import android.provider.Settings;
import android.util.AndroidException;
+import android.util.Log;
import com.android.internal.util.ArrayUtils;
import java.io.File;
@@ -259,6 +261,14 @@
*/
public static final int SKIP_CURRENT_PROFILE = 0x00000002;
+ /**
+ * Flag for {@link addCrossProfileIntentFilter}: if this flag is set:
+ * activities in the other profiles can respond to the intent only if no activity with
+ * non-negative priority in current profile can respond to the intent.
+ * @hide
+ */
+ public static final int ONLY_IF_NO_MATCH_FOUND = 0x00000004;
+
/** @hide */
@IntDef({PERMISSION_GRANTED, PERMISSION_DENIED})
@Retention(RetentionPolicy.SOURCE)
@@ -454,6 +464,14 @@
public static final int INSTALL_QUICK = 0x00000800;
/**
+ * Flag parameter for {@link #installPackage} to indicate that this package is
+ * to be installed as a lightweight "ephemeral" app.
+ *
+ * @hide
+ */
+ public static final int INSTALL_EPHEMERAL = 0x00001000;
+
+ /**
* Flag parameter for
* {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
* that you don't want to kill the app containing the component. Be careful when you set this
@@ -862,6 +880,14 @@
public static final int INSTALL_FAILED_ABORTED = -115;
/**
+ * Installation failed return code: ephemeral app installs are incompatible with some
+ * other installation flags supplied for the operation; or other circumstances such
+ * as trying to upgrade a system app via an ephemeral install.
+ * @hide
+ */
+ public static final int INSTALL_FAILED_EPHEMERAL_INVALID = -116;
+
+ /**
* Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
* package's data directory.
*
@@ -2836,6 +2862,83 @@
public abstract List<ApplicationInfo> getInstalledApplications(int flags);
/**
+ * Gets the ephemeral applications the user recently used. Requires
+ * holding "android.permission.ACCESS_EPHEMERAL_APPS".
+ *
+ * @return The ephemeral app list.
+ *
+ * @hide
+ */
+ @RequiresPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS)
+ public abstract List<EphemeralApplicationInfo> getEphemeralApplications();
+
+ /**
+ * Gets the icon for an ephemeral application.
+ *
+ * @param packageName The app package name.
+ *
+ * @hide
+ */
+ public abstract Drawable getEphemeralApplicationIcon(String packageName);
+
+ /**
+ * Gets whether the caller is an ephemeral app.
+ *
+ * @return Whether caller is an ephemeral app.
+ *
+ * @see #setEphemeralCookie(byte[])
+ * @see #getEphemeralCookie()
+ * @see #getEphemeralCookieMaxSizeBytes()
+ */
+ public abstract boolean isEphemeralApplication();
+
+ /**
+ * Gets the maximum size in bytes of the cookie data an ephemeral app
+ * can store on the device.
+ *
+ * @return The max cookie size in bytes.
+ *
+ * @see #isEphemeralApplication()
+ * @see #setEphemeralCookie(byte[])
+ * @see #getEphemeralCookie()
+ */
+ public abstract int getEphemeralCookieMaxSizeBytes();
+
+ /**
+ * Gets the ephemeral application cookie for this app. Non
+ * ephemeral apps and apps that were ephemeral but were upgraded
+ * to non-ephemeral can still access this API. For ephemeral apps
+ * this cooke is cached for some time after uninstall while for
+ * normal apps the cookie is deleted after the app is uninstalled.
+ * The cookie is always present while the app is installed.
+ *
+ * @return The cookie.
+ *
+ * @see #isEphemeralApplication()
+ * @see #setEphemeralCookie(byte[])
+ * @see #getEphemeralCookieMaxSizeBytes()
+ */
+ public abstract @NonNull byte[] getEphemeralCookie();
+
+ /**
+ * Sets the ephemeral application cookie for the calling app. Non
+ * ephemeral apps and apps that were ephemeral but were upgraded
+ * to non-ephemeral can still access this API. For ephemeral apps
+ * this cooke is cached for some time after uninstall while for
+ * normal apps the cookie is deleted after the app is uninstalled.
+ * The cookie is always present while the app is installed. The
+ * cookie size is limited by {@link #getEphemeralCookieMaxSizeBytes()}.
+ *
+ * @param cookie The cookie data.
+ * @return True if the cookie was set.
+ *
+ * @see #isEphemeralApplication()
+ * @see #getEphemeralCookieMaxSizeBytes()
+ * @see #getEphemeralCookie();
+ */
+ public abstract boolean setEphemeralCookie(@NonNull byte[] cookie);
+
+ /**
* Get a list of shared libraries that are available on the
* system.
*
@@ -4636,7 +4739,8 @@
* @param filter The {@link IntentFilter} the intent has to match
* @param sourceUserId The source user id.
* @param targetUserId The target user id.
- * @param flags The only possible value is {@link SKIP_CURRENT_PROFILE}
+ * @param flags The possible values are {@link SKIP_CURRENT_PROFILE} and
+ * {@link ONLY_IF_NO_MATCH_FOUND}.
* @hide
*/
public abstract void addCrossProfileIntentFilter(IntentFilter filter, int sourceUserId,
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index ecb1850..b79b6b6 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -627,6 +627,7 @@
public final static int PARSE_ENFORCE_CODE = 1<<10;
// TODO: fix b/25118622; remove this entirely once signature processing is quick
public final static int PARSE_SKIP_VERIFICATION = 1<<11;
+ public final static int PARSE_IS_EPHEMERAL = 1<<12;
private static final Comparator<String> sSplitNameComparator = new SplitNameComparator();
@@ -1068,19 +1069,20 @@
pkg.mSignatures = null;
pkg.mSigningKeys = null;
- collectCertificates(pkg, new File(pkg.baseCodePath), parseFlags);
+ collectCertificates(pkg, new File(pkg.baseCodePath), pkg.applicationInfo.flags, parseFlags);
if (!ArrayUtils.isEmpty(pkg.splitCodePaths)) {
- for (String splitCodePath : pkg.splitCodePaths) {
- collectCertificates(pkg, new File(splitCodePath), parseFlags);
+ for (int i = 0; i < pkg.splitCodePaths.length; i++) {
+ collectCertificates(pkg, new File(pkg.splitCodePaths[i]), pkg.splitFlags[i],
+ parseFlags);
}
}
}
- private static void collectCertificates(Package pkg, File apkFile, int parseFlags)
+ private static void collectCertificates(Package pkg, File apkFile, int apkFlags, int parseFlags)
throws PackageParserException {
- final boolean requireCode = ((parseFlags & PARSE_ENFORCE_CODE) != 0)
- && ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) != 0);
+ final boolean hasCode = (apkFlags & ApplicationInfo.FLAG_HAS_CODE) != 0;
+ final boolean requireCode = ((parseFlags & PARSE_ENFORCE_CODE) != 0) && hasCode;
final String apkPath = apkFile.getAbsolutePath();
final boolean skipVerification = Build.IS_DEBUGGABLE
&& ((parseFlags & PARSE_SKIP_VERIFICATION) != 0);
@@ -1217,7 +1219,8 @@
// TODO: factor signature related items out of Package object
final Package tempPkg = new Package(null);
// TODO: fix b/25118622; pass in '0' for parse flags
- collectCertificates(tempPkg, apkFile, flags & PARSE_SKIP_VERIFICATION);
+ collectCertificates(tempPkg, apkFile, 0 /*apkFlags*/,
+ flags & PARSE_SKIP_VERIFICATION);
signatures = tempPkg.mSignatures;
} else {
signatures = null;
@@ -1467,6 +1470,10 @@
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_EXTERNAL_STORAGE;
}
+ if ((flags & PARSE_IS_EPHEMERAL) != 0) {
+ pkg.applicationInfo.privateFlags |= ApplicationInfo.PRIVATE_FLAG_EPHEMERAL;
+ }
+
// Resource boolean are -1, so 1 means we don't know the value.
int supportsSmallScreens = 1;
int supportsNormalScreens = 1;
diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java
index f6ea058..7e7b32f 100644
--- a/core/java/android/content/pm/ProviderInfo.java
+++ b/core/java/android/content/pm/ProviderInfo.java
@@ -115,9 +115,15 @@
}
public void dump(Printer pw, String prefix) {
+ dump(pw, prefix, DUMP_FLAG_ALL);
+ }
+
+ /** @hide */
+ public void dump(Printer pw, String prefix, int flags) {
super.dumpFront(pw, prefix);
pw.println(prefix + "authority=" + authority);
pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
+ super.dumpBack(pw, prefix, flags);
}
public int describeContents() {
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index b3f03c3..a413f36 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -294,14 +294,16 @@
*/
public static class ServiceInfo<V> {
public final V type;
+ public final ComponentInfo componentInfo;
public final ComponentName componentName;
public final int uid;
/** @hide */
- public ServiceInfo(V type, ComponentName componentName, int uid) {
+ public ServiceInfo(V type, ComponentInfo componentInfo, ComponentName componentName) {
this.type = type;
+ this.componentInfo = componentInfo;
this.componentName = componentName;
- this.uid = uid;
+ this.uid = (componentInfo != null) ? componentInfo.applicationInfo.uid : -1;
}
@Override
@@ -362,8 +364,9 @@
@VisibleForTesting
protected List<ResolveInfo> queryIntentServices(int userId) {
final PackageManager pm = mContext.getPackageManager();
- return pm.queryIntentServicesAsUser(
- new Intent(mInterfaceName), PackageManager.GET_META_DATA, userId);
+ return pm.queryIntentServicesAsUser(new Intent(mInterfaceName),
+ PackageManager.GET_META_DATA | PackageManager.GET_ENCRYPTION_UNAWARE_COMPONENTS,
+ userId);
}
/**
@@ -563,9 +566,7 @@
return null;
}
final android.content.pm.ServiceInfo serviceInfo = service.serviceInfo;
- final ApplicationInfo applicationInfo = serviceInfo.applicationInfo;
- final int uid = applicationInfo.uid;
- return new ServiceInfo<V>(v, componentName, uid);
+ return new ServiceInfo<V>(v, serviceInfo, componentName);
} catch (NameNotFoundException e) {
throw new XmlPullParserException(
"Unable to load resources for pacakge " + si.packageName);
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index 7bab35c..a5fb451 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -260,6 +260,11 @@
}
public void dump(Printer pw, String prefix) {
+ dump(pw, prefix, PackageItemInfo.DUMP_FLAG_ALL);
+ }
+
+ /** @hide */
+ public void dump(Printer pw, String prefix, int flags) {
if (filter != null) {
pw.println(prefix + "Filter:");
filter.dump(pw, prefix + " ");
@@ -279,16 +284,16 @@
}
if (activityInfo != null) {
pw.println(prefix + "ActivityInfo:");
- activityInfo.dump(pw, prefix + " ");
+ activityInfo.dump(pw, prefix + " ", flags);
} else if (serviceInfo != null) {
pw.println(prefix + "ServiceInfo:");
- serviceInfo.dump(pw, prefix + " ");
+ serviceInfo.dump(pw, prefix + " ", flags);
} else if (providerInfo != null) {
pw.println(prefix + "ProviderInfo:");
- providerInfo.dump(pw, prefix + " ");
+ providerInfo.dump(pw, prefix + " ", flags);
}
}
-
+
public ResolveInfo() {
targetUserId = UserHandle.USER_CURRENT;
}
diff --git a/core/java/android/content/pm/ServiceInfo.java b/core/java/android/content/pm/ServiceInfo.java
index 796c2a4..74e5c2a 100644
--- a/core/java/android/content/pm/ServiceInfo.java
+++ b/core/java/android/content/pm/ServiceInfo.java
@@ -74,9 +74,15 @@
}
public void dump(Printer pw, String prefix) {
+ dump(pw, prefix, DUMP_FLAG_ALL);
+ }
+
+ /** @hide */
+ void dump(Printer pw, String prefix, int flags) {
super.dumpFront(pw, prefix);
pw.println(prefix + "permission=" + permission);
pw.println(prefix + "flags=0x" + Integer.toHexString(flags));
+ super.dumpBack(pw, prefix, flags);
}
public String toString() {
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index d7c2215..e3050fe 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -76,6 +76,13 @@
*/
public static final int FLAG_DISABLED = 0x00000040;
+ public static final int FLAG_QUIET_MODE = 0x00000080;
+
+ /**
+ * Indicates that this user is ephemeral. I.e. the user will be removed after leaving
+ * the foreground.
+ */
+ public static final int FLAG_EPHEMERAL = 0x00000100;
public static final int NO_PROFILE_GROUP_ID = UserHandle.USER_NULL;
@@ -130,6 +137,14 @@
return (flags & FLAG_DISABLED) != FLAG_DISABLED;
}
+ public boolean isQuietModeEnabled() {
+ return (flags & FLAG_QUIET_MODE) == FLAG_QUIET_MODE;
+ }
+
+ public boolean isEphemeral() {
+ return (flags & FLAG_EPHEMERAL) == FLAG_EPHEMERAL;
+ }
+
/**
* Returns true if the user is a split system user.
* <p>If {@link UserManager#isSplitSystemUser split system user mode} is not enabled,
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 1a19a58..7db5a08 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -724,9 +724,7 @@
fontScale = o.fontScale;
mcc = o.mcc;
mnc = o.mnc;
- if (o.locale != null) {
- locale = (Locale) o.locale.clone();
- }
+ locale = o.locale == null ? null : (Locale) o.locale.clone();
o.fixUpLocaleList();
mLocaleList = o.mLocaleList;
userSetLocale = o.userSetLocale;
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 7b3dde4..cdca869 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -1988,7 +1988,7 @@
}
synchronized (sSync) {
if (mPluralRule != null) {
- mPluralRule = PluralRules.forLocale(config.getLocales().getPrimary());
+ mPluralRule = PluralRules.forLocale(mConfiguration.getLocales().getPrimary());
}
}
}
@@ -2421,75 +2421,93 @@
@Nullable
Drawable loadDrawable(TypedValue value, int id, Theme theme) throws NotFoundException {
- if (TRACE_FOR_PRELOAD) {
- // Log only framework resources
- if ((id >>> 24) == 0x1) {
- final String name = getResourceName(id);
- if (name != null) {
- Log.d("PreloadDrawable", name);
+ try {
+ if (TRACE_FOR_PRELOAD) {
+ // Log only framework resources
+ if ((id >>> 24) == 0x1) {
+ final String name = getResourceName(id);
+ if (name != null) {
+ Log.d("PreloadDrawable", name);
+ }
}
}
- }
- final boolean isColorDrawable;
- final DrawableCache caches;
- final long key;
- if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
- && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
- isColorDrawable = true;
- caches = mColorDrawableCache;
- key = value.data;
- } else {
- isColorDrawable = false;
- caches = mDrawableCache;
- key = (((long) value.assetCookie) << 32) | value.data;
- }
-
- // First, check whether we have a cached version of this drawable
- // that was inflated against the specified theme.
- if (!mPreloading) {
- final Drawable cachedDrawable = caches.getInstance(key, theme);
- if (cachedDrawable != null) {
- return cachedDrawable;
+ final boolean isColorDrawable;
+ final DrawableCache caches;
+ final long key;
+ if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
+ && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+ isColorDrawable = true;
+ caches = mColorDrawableCache;
+ key = value.data;
+ } else {
+ isColorDrawable = false;
+ caches = mDrawableCache;
+ key = (((long) value.assetCookie) << 32) | value.data;
}
- }
- // Next, check preloaded drawables. These may contain unresolved theme
- // attributes.
- final ConstantState cs;
- if (isColorDrawable) {
- cs = sPreloadedColorDrawables.get(key);
- } else {
- cs = sPreloadedDrawables[mConfiguration.getLayoutDirection()].get(key);
- }
+ // First, check whether we have a cached version of this drawable
+ // that was inflated against the specified theme.
+ if (!mPreloading) {
+ final Drawable cachedDrawable = caches.getInstance(key, theme);
+ if (cachedDrawable != null) {
+ return cachedDrawable;
+ }
+ }
- Drawable dr;
- if (cs != null) {
- dr = cs.newDrawable(this);
- } else if (isColorDrawable) {
- dr = new ColorDrawable(value.data);
- } else {
- dr = loadDrawableForCookie(value, id, null);
- }
+ // Next, check preloaded drawables. These may contain unresolved theme
+ // attributes.
+ final ConstantState cs;
+ if (isColorDrawable) {
+ cs = sPreloadedColorDrawables.get(key);
+ } else {
+ cs = sPreloadedDrawables[mConfiguration.getLayoutDirection()].get(key);
+ }
- // Determine if the drawable has unresolved theme attributes. If it
- // does, we'll need to apply a theme and store it in a theme-specific
- // cache.
- final boolean canApplyTheme = dr != null && dr.canApplyTheme();
- if (canApplyTheme && theme != null) {
- dr = dr.mutate();
- dr.applyTheme(theme);
- dr.clearMutated();
- }
+ Drawable dr;
+ if (cs != null) {
+ dr = cs.newDrawable(this);
+ } else if (isColorDrawable) {
+ dr = new ColorDrawable(value.data);
+ } else {
+ dr = loadDrawableForCookie(value, id, null);
+ }
- // If we were able to obtain a drawable, store it in the appropriate
- // cache: preload, not themed, null theme, or theme-specific.
- if (dr != null) {
- dr.setChangingConfigurations(value.changingConfigurations);
- cacheDrawable(value, isColorDrawable, caches, theme, canApplyTheme, key, dr);
- }
+ // Determine if the drawable has unresolved theme attributes. If it
+ // does, we'll need to apply a theme and store it in a theme-specific
+ // cache.
+ final boolean canApplyTheme = dr != null && dr.canApplyTheme();
+ if (canApplyTheme && theme != null) {
+ dr = dr.mutate();
+ dr.applyTheme(theme);
+ dr.clearMutated();
+ }
- return dr;
+ // If we were able to obtain a drawable, store it in the appropriate
+ // cache: preload, not themed, null theme, or theme-specific.
+ if (dr != null) {
+ dr.setChangingConfigurations(value.changingConfigurations);
+ cacheDrawable(value, isColorDrawable, caches, theme, canApplyTheme, key, dr);
+ }
+
+ return dr;
+ } catch (Exception e) {
+ String name;
+ try {
+ name = getResourceName(id);
+ } catch (NotFoundException e2) {
+ name = "(missing name)";
+ }
+
+ // The target drawable might fail to load for any number of
+ // reasons, but we always want to include the resource name.
+ // Since the client already expects this method to throw a
+ // NotFoundException, just throw one of those.
+ final NotFoundException nfe = new NotFoundException("Drawable " + name
+ + " with resource ID #0x" + Integer.toHexString(id), e);
+ nfe.setStackTrace(new StackTraceElement[0]);
+ throw nfe;
+ }
}
private void cacheDrawable(TypedValue value, boolean isColorDrawable, DrawableCache caches,
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 73bb426..02d4e59 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -47,6 +47,8 @@
import java.util.LinkedHashMap;
import java.util.List;
+import static android.system.OsConstants.*;
+
/**
* The Camera class is used to set image capture settings, start/stop preview,
* snap pictures, and retrieve frames for encoding for video. This class is a
@@ -173,13 +175,6 @@
private final Object mAutoFocusCallbackLock = new Object();
private static final int NO_ERROR = 0;
- private static final int EACCESS = -13;
- private static final int ENODEV = -19;
- private static final int EBUSY = -16;
- private static final int EINVAL = -22;
- private static final int ENOSYS = -38;
- private static final int EUSERS = -87;
- private static final int EOPNOTSUPP = -95;
/**
* Broadcast Action: A new picture is taken by the camera, and the entry of
@@ -415,30 +410,28 @@
private Camera(int cameraId, int halVersion) {
int err = cameraInitVersion(cameraId, halVersion);
if (checkInitErrors(err)) {
- switch(err) {
- case EACCESS:
- throw new RuntimeException("Fail to connect to camera service");
- case ENODEV:
- throw new RuntimeException("Camera initialization failed");
- case ENOSYS:
- throw new RuntimeException("Camera initialization failed because some methods"
- + " are not implemented");
- case EOPNOTSUPP:
- throw new RuntimeException("Camera initialization failed because the hal"
- + " version is not supported by this device");
- case EINVAL:
- throw new RuntimeException("Camera initialization failed because the input"
- + " arugments are invalid");
- case EBUSY:
- throw new RuntimeException("Camera initialization failed because the camera"
- + " device was already opened");
- case EUSERS:
- throw new RuntimeException("Camera initialization failed because the max"
- + " number of camera devices were already opened");
- default:
- // Should never hit this.
- throw new RuntimeException("Unknown camera error");
+ if (err == -EACCES) {
+ throw new RuntimeException("Fail to connect to camera service");
+ } else if (err == -ENODEV) {
+ throw new RuntimeException("Camera initialization failed");
+ } else if (err == -ENOSYS) {
+ throw new RuntimeException("Camera initialization failed because some methods"
+ + " are not implemented");
+ } else if (err == -EOPNOTSUPP) {
+ throw new RuntimeException("Camera initialization failed because the hal"
+ + " version is not supported by this device");
+ } else if (err == -EINVAL) {
+ throw new RuntimeException("Camera initialization failed because the input"
+ + " arugments are invalid");
+ } else if (err == -EBUSY) {
+ throw new RuntimeException("Camera initialization failed because the camera"
+ + " device was already opened");
+ } else if (err == -EUSERS) {
+ throw new RuntimeException("Camera initialization failed because the max"
+ + " number of camera devices were already opened");
}
+ // Should never hit this.
+ throw new RuntimeException("Unknown camera error");
}
}
@@ -490,15 +483,13 @@
Camera(int cameraId) {
int err = cameraInitNormal(cameraId);
if (checkInitErrors(err)) {
- switch(err) {
- case EACCESS:
- throw new RuntimeException("Fail to connect to camera service");
- case ENODEV:
- throw new RuntimeException("Camera initialization failed");
- default:
- // Should never hit this.
- throw new RuntimeException("Unknown camera error");
+ if (err == -EACCES) {
+ throw new RuntimeException("Fail to connect to camera service");
+ } else if (err == -ENODEV) {
+ throw new RuntimeException("Camera initialization failed");
}
+ // Should never hit this.
+ throw new RuntimeException("Unknown camera error");
}
}
@@ -2891,8 +2882,7 @@
* <var>y</var> for the Y plane and row <var>c</var> for the U and V
* planes:
*
- * {@code
- * <pre>
+ * <pre>{@code
* yStride = (int) ceil(width / 16.0) * 16;
* uvStride = (int) ceil( (yStride / 2) / 16.0) * 16;
* ySize = yStride * height;
@@ -2900,8 +2890,9 @@
* yRowIndex = yStride * y;
* uRowIndex = ySize + uvSize + uvStride * c;
* vRowIndex = ySize + uvStride * c;
- * size = ySize + uvSize * 2;</pre>
+ * size = ySize + uvSize * 2;
* }
+ *</pre>
*
* @param pixel_format the desired preview picture format, defined by
* one of the {@link android.graphics.ImageFormat} constants. (E.g.,
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index 6fc998f..bb0a04f 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -398,17 +398,24 @@
* this camera device.</p>
* <p>For devices at the LEGACY level or above:</p>
* <ul>
- * <li>This list will always include (30, 30).</li>
- * <li>Also, for constant-framerate recording, for each normal
+ * <li>
+ * <p>For constant-framerate recording, for each normal
+ * {@link android.media.CamcorderProfile CamcorderProfile}, that is, a
* {@link android.media.CamcorderProfile CamcorderProfile} that has
* {@link android.media.CamcorderProfile#quality quality} in
* the range [{@link android.media.CamcorderProfile#QUALITY_LOW QUALITY_LOW},
* {@link android.media.CamcorderProfile#QUALITY_2160P QUALITY_2160P}], if the profile is
* supported by the device and has
* {@link android.media.CamcorderProfile#videoFrameRate videoFrameRate} <code>x</code>, this list will
- * always include (<code>x</code>,<code>x</code>).</li>
- * <li>For preview streaming use case, this list will always include (<code>min</code>, <code>max</code>) where
- * <code>min</code> <= 15 and <code>max</code> >= 30.</li>
+ * always include (<code>x</code>,<code>x</code>).</p>
+ * </li>
+ * <li>
+ * <p>Also, a camera device must either not support any
+ * {@link android.media.CamcorderProfile CamcorderProfile},
+ * or support at least one
+ * normal {@link android.media.CamcorderProfile CamcorderProfile} that has
+ * {@link android.media.CamcorderProfile#videoFrameRate videoFrameRate} <code>x</code> >= 24.</p>
+ * </li>
* </ul>
* <p>For devices at the LIMITED level or above:</p>
* <ul>
diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
index 6b8e113..798c941 100644
--- a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
+++ b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
@@ -43,6 +43,9 @@
import java.util.ArrayList;
import java.util.List;
+import static android.system.OsConstants.EACCES;
+import static android.system.OsConstants.ENODEV;
+
/**
* Compatibility implementation of the Camera2 API binder interface.
*
@@ -88,6 +91,14 @@
mSurfaceIdCounter = 0;
}
+ private static int translateErrorsFromCamera1(int errorCode) {
+ if (errorCode == -EACCES) {
+ return CameraBinderDecorator.PERMISSION_DENIED;
+ }
+
+ return errorCode;
+ }
+
/**
* Create a separate looper/thread for the camera to run on; open the camera.
*
@@ -382,7 +393,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot submit request, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -402,7 +413,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot submit request list, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -421,7 +432,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot cancel request, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -442,7 +453,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot begin configure, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -462,7 +473,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot end configure, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
ArrayList<Surface> surfaces = null;
@@ -490,7 +501,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot delete stream, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -515,7 +526,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot create stream, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -552,7 +563,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot create default request, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
CameraMetadataNative template;
@@ -585,7 +596,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot wait until idle, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -605,7 +616,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot flush, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
synchronized(mConfigureLock) {
@@ -627,7 +638,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot prepare stream, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
// LEGACY doesn't support actual prepare, just signal success right away
@@ -647,7 +658,7 @@
}
if (mLegacyDevice.isClosed()) {
Log.e(TAG, "Cannot tear down stream, device has been closed.");
- return CameraBinderDecorator.ENODEV;
+ return -ENODEV;
}
// LEGACY doesn't support actual teardown, so just a no-op
diff --git a/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java b/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
index 4b7cfbf..4501e81 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyExceptionUtils.java
@@ -19,6 +19,8 @@
import android.hardware.camera2.utils.CameraBinderDecorator;
import android.util.AndroidException;
+import static android.system.OsConstants.ENODEV;
+
/**
* Utility class containing exception handling used solely by the compatibility mode shim.
*/
@@ -51,18 +53,15 @@
* exceptions.</p>
*
* @param errorFlag error to throw as an exception.
- * @throws {@link BufferQueueAbandonedException} for {@link CameraBinderDecorator#ENODEV}.
+ * @throws {@link BufferQueueAbandonedException} for -ENODEV.
* @throws {@link UnsupportedOperationException} for an unknown negative error code.
* @return {@code errorFlag} if the value was non-negative, throws otherwise.
*/
public static int throwOnError(int errorFlag) throws BufferQueueAbandonedException {
- switch (errorFlag) {
- case CameraBinderDecorator.NO_ERROR: {
- return CameraBinderDecorator.NO_ERROR;
- }
- case CameraBinderDecorator.BAD_VALUE: {
- throw new BufferQueueAbandonedException();
- }
+ if (errorFlag == CameraBinderDecorator.NO_ERROR) {
+ return CameraBinderDecorator.NO_ERROR;
+ } else if (errorFlag == -ENODEV) {
+ throw new BufferQueueAbandonedException();
}
if (errorFlag < 0) {
diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
index b8d6960..8be49e8 100644
--- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
+++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java
@@ -834,6 +834,7 @@
* <ul>
* <li>{@link ImageFormat#JPEG JPEG}
* <li>{@link ImageFormat#RAW_SENSOR RAW16}
+ * <li>{@link ImageFormat#RAW_PRIVATE RAW_PRIVATE}
* </ul>
* </p>
*
@@ -1328,9 +1329,7 @@
SparseIntArray map = getFormatsMap(output);
for (int j = 0; j < map.size(); j++) {
int format = map.keyAt(j);
- if (format != HAL_PIXEL_FORMAT_RAW_OPAQUE) {
- formats[i++] = imageFormatToPublic(format);
- }
+ formats[i++] = imageFormatToPublic(format);
}
if (output) {
for (int j = 0; j < mDepthOutputFormats.size(); j++) {
@@ -1392,9 +1391,6 @@
private int getPublicFormatCount(boolean output) {
SparseIntArray formatsMap = getFormatsMap(output);
int size = formatsMap.size();
- if (formatsMap.indexOfKey(HAL_PIXEL_FORMAT_RAW_OPAQUE) >= 0) {
- size -= 1;
- }
if (output) {
size += mDepthOutputFormats.size();
}
@@ -1603,6 +1599,8 @@
return "Y16";
case ImageFormat.RAW_SENSOR:
return "RAW_SENSOR";
+ case ImageFormat.RAW_PRIVATE:
+ return "RAW_PRIVATE";
case ImageFormat.RAW10:
return "RAW10";
case ImageFormat.DEPTH16:
diff --git a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
index 1aee794..162edc9 100644
--- a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
+++ b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
@@ -22,6 +22,7 @@
import static android.hardware.camera2.CameraAccessException.CAMERA_ERROR;
import static android.hardware.camera2.CameraAccessException.MAX_CAMERAS_IN_USE;
import static android.hardware.camera2.CameraAccessException.CAMERA_DEPRECATED_HAL;
+import static android.system.OsConstants.*;
import android.os.DeadObjectException;
import android.os.RemoteException;
@@ -37,12 +38,12 @@
public class CameraBinderDecorator {
public static final int NO_ERROR = 0;
- public static final int PERMISSION_DENIED = -1;
- public static final int ALREADY_EXISTS = -17;
- public static final int BAD_VALUE = -22;
- public static final int DEAD_OBJECT = -32;
- public static final int INVALID_OPERATION = -38;
- public static final int TIMED_OUT = -110;
+ public static final int PERMISSION_DENIED = -EPERM;
+ public static final int ALREADY_EXISTS = -EEXIST;
+ public static final int BAD_VALUE = -EINVAL;
+ public static final int DEAD_OBJECT = -ENOSYS;
+ public static final int INVALID_OPERATION = -EPIPE;
+ public static final int TIMED_OUT = -ETIMEDOUT;
/**
* TODO: add as error codes in Errors.h
@@ -52,12 +53,6 @@
* - NOT_SUPPORTED
* - TOO_MANY_USERS
*/
- public static final int EACCES = -13;
- public static final int EBUSY = -16;
- public static final int ENODEV = -19;
- public static final int EOPNOTSUPP = -95;
- public static final int EUSERS = -87;
-
static class CameraBinderDecoratorListener implements Decorator.DecoratorListener {
@@ -101,35 +96,34 @@
* @param errorFlag error to throw as an exception.
*/
public static void throwOnError(int errorFlag) {
- switch (errorFlag) {
- case NO_ERROR:
- return;
- case PERMISSION_DENIED:
- throw new SecurityException("Lacking privileges to access camera service");
- case ALREADY_EXISTS:
- // This should be handled at the call site. Typically this isn't bad,
- // just means we tried to do an operation that already completed.
- return;
- case BAD_VALUE:
- throw new IllegalArgumentException("Bad argument passed to camera service");
- case DEAD_OBJECT:
- throw new CameraRuntimeException(CAMERA_DISCONNECTED);
- case TIMED_OUT:
- throw new CameraRuntimeException(CAMERA_ERROR,
- "Operation timed out in camera service");
- case EACCES:
- throw new CameraRuntimeException(CAMERA_DISABLED);
- case EBUSY:
- throw new CameraRuntimeException(CAMERA_IN_USE);
- case EUSERS:
- throw new CameraRuntimeException(MAX_CAMERAS_IN_USE);
- case ENODEV:
- throw new CameraRuntimeException(CAMERA_DISCONNECTED);
- case EOPNOTSUPP:
- throw new CameraRuntimeException(CAMERA_DEPRECATED_HAL);
- case INVALID_OPERATION:
- throw new CameraRuntimeException(CAMERA_ERROR,
- "Illegal state encountered in camera service.");
+ if (errorFlag == NO_ERROR) {
+ return;
+ } else if (errorFlag == PERMISSION_DENIED) {
+ throw new SecurityException("Lacking privileges to access camera service");
+ } else if (errorFlag == ALREADY_EXISTS) {
+ // This should be handled at the call site. Typically this isn't bad,
+ // just means we tried to do an operation that already completed.
+ return;
+ } else if (errorFlag == BAD_VALUE) {
+ throw new IllegalArgumentException("Bad argument passed to camera service");
+ } else if (errorFlag == DEAD_OBJECT) {
+ throw new CameraRuntimeException(CAMERA_DISCONNECTED);
+ } else if (errorFlag == TIMED_OUT) {
+ throw new CameraRuntimeException(CAMERA_ERROR,
+ "Operation timed out in camera service");
+ } else if (errorFlag == -EACCES) {
+ throw new CameraRuntimeException(CAMERA_DISABLED);
+ } else if (errorFlag == -EBUSY) {
+ throw new CameraRuntimeException(CAMERA_IN_USE);
+ } else if (errorFlag == -EUSERS) {
+ throw new CameraRuntimeException(MAX_CAMERAS_IN_USE);
+ } else if (errorFlag == -ENODEV) {
+ throw new CameraRuntimeException(CAMERA_DISCONNECTED);
+ } else if (errorFlag == -EOPNOTSUPP) {
+ throw new CameraRuntimeException(CAMERA_DEPRECATED_HAL);
+ } else if (errorFlag == INVALID_OPERATION) {
+ throw new CameraRuntimeException(CAMERA_ERROR,
+ "Illegal state encountered in camera service.");
}
/**
diff --git a/core/java/android/hardware/package.html b/core/java/android/hardware/package.html
index 5b04da1..ee54476 100644
--- a/core/java/android/hardware/package.html
+++ b/core/java/android/hardware/package.html
@@ -4,6 +4,6 @@
not all Android-powered devices support all hardware features, so you should declare hardware
that your application requires using the <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> manifest element.</p>
+<uses-feature>}</a> manifest element.</p>
</BODY>
</HTML>
diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java
index c85e97b..d490409 100644
--- a/core/java/android/hardware/soundtrigger/SoundTrigger.java
+++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java
@@ -25,6 +25,8 @@
import java.util.Arrays;
import java.util.UUID;
+import static android.system.OsConstants.*;
+
/**
* The SoundTrigger class provides access via JNI to the native service managing
* the sound trigger HAL.
@@ -35,11 +37,11 @@
public static final int STATUS_OK = 0;
public static final int STATUS_ERROR = Integer.MIN_VALUE;
- public static final int STATUS_PERMISSION_DENIED = -1;
- public static final int STATUS_NO_INIT = -19;
- public static final int STATUS_BAD_VALUE = -22;
- public static final int STATUS_DEAD_OBJECT = -32;
- public static final int STATUS_INVALID_OPERATION = -38;
+ public static final int STATUS_PERMISSION_DENIED = -EPERM;
+ public static final int STATUS_NO_INIT = -ENODEV;
+ public static final int STATUS_BAD_VALUE = -EINVAL;
+ public static final int STATUS_DEAD_OBJECT = -EPIPE;
+ public static final int STATUS_INVALID_OPERATION = -ENOSYS;
/*****************************************************************************
* A ModuleProperties describes a given sound trigger hardware module
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.java
index a23a6cb..1e3bcd0 100644
--- a/core/java/android/hardware/usb/UsbManager.java
+++ b/core/java/android/hardware/usb/UsbManager.java
@@ -23,6 +23,7 @@
import android.content.Context;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
+import android.os.Process;
import android.os.RemoteException;
import android.util.Log;
@@ -455,6 +456,21 @@
}
/**
+ * Grants permission for USB device without showing system dialog.
+ * Only system components can call this function.
+ * @param device to request permissions for
+ *
+ * {@hide}
+ */
+ public void grantPermission(UsbDevice device) {
+ try {
+ mService.grantDevicePermission(device, Process.myUid());
+ } catch (RemoteException e) {
+ Log.e(TAG, "RemoteException in grantPermission", e);
+ }
+ }
+
+ /**
* Returns true if the specified USB function is currently enabled when in device mode.
* <p>
* USB functions represent interfaces which are published to the host to access
diff --git a/core/java/android/net/LocalSocket.java b/core/java/android/net/LocalSocket.java
index a374a86..e14facb1 100644
--- a/core/java/android/net/LocalSocket.java
+++ b/core/java/android/net/LocalSocket.java
@@ -25,7 +25,8 @@
/**
* Creates a (non-server) socket in the UNIX-domain namespace. The interface
- * here is not entirely unlike that of java.net.Socket
+ * here is not entirely unlike that of java.net.Socket. This class and the streams
+ * returned from it may be used from multiple threads.
*/
public class LocalSocket implements Closeable {
diff --git a/core/java/android/net/PskKeyManager.java b/core/java/android/net/PskKeyManager.java
index f82e635..667abb4 100644
--- a/core/java/android/net/PskKeyManager.java
+++ b/core/java/android/net/PskKeyManager.java
@@ -97,7 +97,7 @@
*
* SSLContext sslContext = SSLContext.getInstance("TLS");
* sslContext.init(
- * new KeyManager[] {pskKeyManager},
+ * new KeyManager[] { pskKeyManager },
* new TrustManager[0], // No TrustManagers needed for TLS-PSK
* null // Use the default source of entropy
* );
diff --git a/core/java/android/net/TrafficStats.java b/core/java/android/net/TrafficStats.java
index 2137c3a..e82485d 100644
--- a/core/java/android/net/TrafficStats.java
+++ b/core/java/android/net/TrafficStats.java
@@ -28,6 +28,7 @@
import dalvik.system.SocketTagger;
+import java.net.DatagramSocket;
import java.net.Socket;
import java.net.SocketException;
@@ -226,6 +227,27 @@
}
/**
+ * Tag the given {@link DatagramSocket} with any statistics parameters
+ * active for the current thread. Subsequent calls always replace any
+ * existing parameters. When finished, call
+ * {@link #untagDatagramSocket(DatagramSocket)} to remove statistics
+ * parameters.
+ *
+ * @see #setThreadStatsTag(int)
+ * @see #setThreadStatsUid(int)
+ */
+ public static void tagDatagramSocket(DatagramSocket socket) throws SocketException {
+ SocketTagger.get().tag(socket);
+ }
+
+ /**
+ * Remove any statistics parameters from the given {@link DatagramSocket}.
+ */
+ public static void untagDatagramSocket(DatagramSocket socket) throws SocketException {
+ SocketTagger.get().untag(socket);
+ }
+
+ /**
* Start profiling data usage for current UID. Only one profiling session
* can be active at a time.
*
diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java
index 188287f..729aff0 100644
--- a/core/java/android/net/http/HttpResponseCache.java
+++ b/core/java/android/net/http/HttpResponseCache.java
@@ -36,7 +36,8 @@
* saving time and bandwidth. This class supports {@link
* java.net.HttpURLConnection} and {@link javax.net.ssl.HttpsURLConnection};
* there is no platform-provided cache for {@code DefaultHttpClient} or
- * {@code AndroidHttpClient}.
+ * {@code AndroidHttpClient}. Installation and instances are thread
+ * safe.
*
* <h3>Installing an HTTP response cache</h3>
* Enable caching of all of your application's HTTP requests by installing the
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index b492deb..ff6eb40 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -914,7 +914,7 @@
*
* <p>If you want to prevent the Android OS from sending default NDEF
* messages completely (for all activities), you can include a
- * {@code <meta-data>} element inside the {@code <application>}
+ * {@code <meta-data>} element inside the {@code <application>}
* element of your AndroidManifest.xml file, like this:
* <pre>
* <application ...>
@@ -1022,7 +1022,7 @@
*
* <p>If you want to prevent the Android OS from sending default NDEF
* messages completely (for all activities), you can include a
- * {@code <meta-data>} element inside the {@code <application>}
+ * {@code <meta-data>} element inside the {@code <application>}
* element of your AndroidManifest.xml file, like this:
* <pre>
* <application ...>
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index 1aa5c66..bce38f4 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -169,7 +169,7 @@
/**
* Current version of checkin data format.
*/
- static final String CHECKIN_VERSION = "16";
+ static final String CHECKIN_VERSION = "17";
/**
* Old version, we hit 9 and ran out of room, need to remove.
@@ -407,17 +407,23 @@
public abstract Timer getCameraTurnedOnTimer();
public abstract Timer getForegroundActivityTimer();
- // Time this uid has any processes in foreground state.
- public static final int PROCESS_STATE_FOREGROUND = 0;
- // Time this uid has any process in active state (not cached).
- public static final int PROCESS_STATE_ACTIVE = 1;
+ // Time this uid has any processes in the top state.
+ public static final int PROCESS_STATE_TOP = 0;
+ // Time this uid has any process with a started out bound foreground service.
+ public static final int PROCESS_STATE_FOREGROUND_SERVICE = 1;
+ // Time this uid has any process that is top while the device is sleeping.
+ public static final int PROCESS_STATE_TOP_SLEEPING = 2;
+ // Time this uid has any process in an active foreground state.
+ public static final int PROCESS_STATE_FOREGROUND = 3;
+ // Time this uid has any process in an active background state.
+ public static final int PROCESS_STATE_BACKGROUND = 4;
// Time this uid has any processes running at all.
- public static final int PROCESS_STATE_RUNNING = 2;
+ public static final int PROCESS_STATE_CACHED = 5;
// Total number of process states we track.
- public static final int NUM_PROCESS_STATE = 3;
+ public static final int NUM_PROCESS_STATE = 6;
static final String[] PROCESS_STATE_NAMES = {
- "Foreground", "Active", "Running"
+ "Top", "Fg Service", "Top Sleeping", "Foreground", "Background", "Cached"
};
public abstract long getProcessStateTime(int state, long elapsedRealtimeUs, int which);
@@ -2954,8 +2960,9 @@
final Object[] stateTimes = new Object[Uid.NUM_PROCESS_STATE];
long totalStateTime = 0;
for (int ips=0; ips<Uid.NUM_PROCESS_STATE; ips++) {
- totalStateTime += u.getProcessStateTime(ips, rawRealtime, which);
- stateTimes[ips] = (totalStateTime + 500) / 1000;
+ final long time = u.getProcessStateTime(ips, rawRealtime, which);
+ totalStateTime += time;
+ stateTimes[ips] = (time + 500) / 1000;
}
if (totalStateTime > 0) {
dumpLine(pw, uid, category, STATE_TIME_DATA, stateTimes);
@@ -4122,11 +4129,18 @@
sb.append(" ");
sb.append(Uid.PROCESS_STATE_NAMES[ips]);
sb.append(" for: ");
- formatTimeMs(sb, (totalStateTime + 500) / 1000);
+ formatTimeMs(sb, (time + 500) / 1000);
pw.println(sb.toString());
uidActivity = true;
}
}
+ if (totalStateTime > 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Total running: ");
+ formatTimeMs(sb, (totalStateTime + 500) / 1000);
+ pw.println(sb.toString());
+ }
final long userCpuTimeUs = u.getUserCpuTimeUs(which);
final long systemCpuTimeUs = u.getSystemCpuTimeUs(which);
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 53627fc..a01d34a 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -235,6 +235,11 @@
}
/** {@hide} */
+ public static File getDataAppEphemeralDirectory(String volumeUuid) {
+ return new File(getDataDirectory(volumeUuid), "app-ephemeral");
+ }
+
+ /** {@hide} */
@Deprecated
public static File getDataUserDirectory(String volumeUuid) {
return getDataUserCredentialEncryptedDirectory(volumeUuid);
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index c71d6cc..9ee6228 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -48,12 +48,15 @@
UserInfo getProfileParent(int userHandle);
boolean isSameProfileGroup(int userId, int otherUserId);
UserInfo getUserInfo(int userHandle);
+ String getUserAccount(int userId);
+ void setUserAccount(int userId, String accountName);
long getUserCreationTime(int userHandle);
boolean isRestricted();
boolean canHaveRestrictedProfile(int userId);
int getUserSerialNumber(int userHandle);
int getUserHandle(int userSerialNumber);
Bundle getUserRestrictions(int userHandle);
+ boolean hasBaseUserRestriction(String restrictionKey, int userHandle);
boolean hasUserRestriction(in String restrictionKey, int userHandle);
void setUserRestriction(String key, boolean value, int userId);
void setApplicationRestrictions(in String packageName, in Bundle restrictions,
@@ -63,4 +66,6 @@
void setDefaultGuestRestrictions(in Bundle restrictions);
Bundle getDefaultGuestRestrictions();
boolean markGuestForDeletion(int userHandle);
+ void setQuietModeEnabled(int userHandle, boolean enableQuietMode);
+ boolean isQuietModeEnabled(int userHandle);
}
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index f2aea08..9b68f90 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -61,12 +61,12 @@
* appropriate to place any Parcel data in to persistent storage: changes
* in the underlying implementation of any of the data in the Parcel can
* render older data unreadable.</p>
- *
+ *
* <p>The bulk of the Parcel API revolves around reading and writing data
* of various types. There are six major classes of such functions available.</p>
- *
+ *
* <h3>Primitives</h3>
- *
+ *
* <p>The most basic data functions are for writing and reading primitive
* data types: {@link #writeByte}, {@link #readByte}, {@link #writeDouble},
* {@link #readDouble}, {@link #writeFloat}, {@link #readFloat}, {@link #writeInt},
@@ -74,15 +74,15 @@
* {@link #writeString}, {@link #readString}. Most other
* data operations are built on top of these. The given data is written and
* read using the endianess of the host CPU.</p>
- *
+ *
* <h3>Primitive Arrays</h3>
- *
+ *
* <p>There are a variety of methods for reading and writing raw arrays
* of primitive objects, which generally result in writing a 4-byte length
* followed by the primitive data items. The methods for reading can either
* read the data into an existing array, or create and return a new array.
* These available types are:</p>
- *
+ *
* <ul>
* <li> {@link #writeBooleanArray(boolean[])},
* {@link #readBooleanArray(boolean[])}, {@link #createBooleanArray()}
@@ -104,9 +104,9 @@
* <li> {@link #writeSparseBooleanArray(SparseBooleanArray)},
* {@link #readSparseBooleanArray()}.
* </ul>
- *
+ *
* <h3>Parcelables</h3>
- *
+ *
* <p>The {@link Parcelable} protocol provides an extremely efficient (but
* low-level) protocol for objects to write and read themselves from Parcels.
* You can use the direct methods {@link #writeParcelable(Parcelable, int)}
@@ -116,7 +116,7 @@
* methods write both the class type and its data to the Parcel, allowing
* that class to be reconstructed from the appropriate class loader when
* later reading.</p>
- *
+ *
* <p>There are also some methods that provide a more efficient way to work
* with Parcelables: {@link #writeTypedObject}, {@link #writeTypedArray},
* {@link #writeTypedList}, {@link #readTypedObject},
@@ -129,9 +129,9 @@
* call {@link Parcelable#writeToParcel Parcelable.writeToParcel} and
* {@link Parcelable.Creator#createFromParcel Parcelable.Creator.createFromParcel}
* yourself.)</p>
- *
+ *
* <h3>Bundles</h3>
- *
+ *
* <p>A special type-safe container, called {@link Bundle}, is available
* for key/value maps of heterogeneous values. This has many optimizations
* for improved performance when reading and writing data, and its type-safe
@@ -139,16 +139,16 @@
* data contents into a Parcel. The methods to use are
* {@link #writeBundle(Bundle)}, {@link #readBundle()}, and
* {@link #readBundle(ClassLoader)}.
- *
+ *
* <h3>Active Objects</h3>
- *
+ *
* <p>An unusual feature of Parcel is the ability to read and write active
* objects. For these objects the actual contents of the object is not
* written, rather a special token referencing the object is written. When
* reading the object back from the Parcel, you do not get a new instance of
* the object, but rather a handle that operates on the exact same object that
* was originally written. There are two forms of active objects available.</p>
- *
+ *
* <p>{@link Binder} objects are a core facility of Android's general cross-process
* communication system. The {@link IBinder} interface describes an abstract
* protocol with a Binder object. Any such interface can be written in to
@@ -161,7 +161,7 @@
* {@link #createBinderArray()},
* {@link #writeBinderList(List)}, {@link #readBinderList(List)},
* {@link #createBinderArrayList()}.</p>
- *
+ *
* <p>FileDescriptor objects, representing raw Linux file descriptor identifiers,
* can be written and {@link ParcelFileDescriptor} objects returned to operate
* on the original file descriptor. The returned file descriptor is a dup
@@ -169,9 +169,9 @@
* operating on the same underlying file stream, with the same position, etc.
* The methods to use are {@link #writeFileDescriptor(FileDescriptor)},
* {@link #readFileDescriptor()}.
- *
+ *
* <h3>Untyped Containers</h3>
- *
+ *
* <p>A final class of methods are for writing and reading standard Java
* containers of arbitrary types. These all revolve around the
* {@link #writeValue(Object)} and {@link #readValue(ClassLoader)} methods
@@ -233,8 +233,10 @@
private static final int VAL_PERSISTABLEBUNDLE = 25;
private static final int VAL_SIZE = 26;
private static final int VAL_SIZEF = 27;
+ private static final int VAL_DOUBLEARRAY = 28;
// The initial int32 in a Binder call's reply Parcel header:
+ // Keep these in sync with libbinder's binder/Status.h.
private static final int EX_SECURITY = -1;
private static final int EX_BAD_PARCELABLE = -2;
private static final int EX_ILLEGAL_ARGUMENT = -3;
@@ -242,7 +244,11 @@
private static final int EX_ILLEGAL_STATE = -5;
private static final int EX_NETWORK_MAIN_THREAD = -6;
private static final int EX_UNSUPPORTED_OPERATION = -7;
+ private static final int EX_SERVICE_SPECIFIC = -8;
private static final int EX_HAS_REPLY_HEADER = -128; // special; see below
+ // EX_TRANSACTION_FAILED is used exclusively in native code.
+ // see libbinder's binder/Status.h
+ private static final int EX_TRANSACTION_FAILED = -129;
private static native int nativeDataSize(long nativePtr);
private static native int nativeDataAvail(long nativePtr);
@@ -663,7 +669,7 @@
* growing dataCapacity() if needed. The Map keys must be String objects.
* The Map values are written using {@link #writeValue} and must follow
* the specification there.
- *
+ *
* <p>It is strongly recommended to use {@link #writeBundle} instead of
* this method, since the Bundle class provides a type-safe API that
* allows you to avoid mysterious type errors at the point of marshalling.
@@ -1429,6 +1435,9 @@
} else if (v instanceof SizeF) {
writeInt(VAL_SIZEF);
writeSizeF((SizeF) v);
+ } else if (v instanceof double[]) {
+ writeInt(VAL_DOUBLEARRAY);
+ writeDoubleArray((double[]) v);
} else {
Class<?> clazz = v.getClass();
if (clazz.isArray() && clazz.getComponentType() == Object.class) {
@@ -1504,7 +1513,7 @@
* exception will be re-thrown by this function as a RuntimeException
* (to be caught by the system's last-resort exception handling when
* dispatching a transaction).
- *
+ *
* <p>The supported exception types are:
* <ul>
* <li>{@link BadParcelableException}
@@ -1514,7 +1523,7 @@
* <li>{@link SecurityException}
* <li>{@link NetworkOnMainThreadException}
* </ul>
- *
+ *
* @param e The Exception to be written.
*
* @see #writeNoException
@@ -1536,6 +1545,8 @@
code = EX_NETWORK_MAIN_THREAD;
} else if (e instanceof UnsupportedOperationException) {
code = EX_UNSUPPORTED_OPERATION;
+ } else if (e instanceof ServiceSpecificException) {
+ code = EX_SERVICE_SPECIFIC;
}
writeInt(code);
StrictMode.clearGatheredViolations();
@@ -1546,6 +1557,9 @@
throw new RuntimeException(e);
}
writeString(e.getMessage());
+ if (e instanceof ServiceSpecificException) {
+ writeInt(((ServiceSpecificException)e).errorCode);
+ }
}
/**
@@ -1656,6 +1670,8 @@
throw new NetworkOnMainThreadException();
case EX_UNSUPPORTED_OPERATION:
throw new UnsupportedOperationException(msg);
+ case EX_SERVICE_SPECIFIC:
+ throw new ServiceSpecificException(readInt(), msg);
}
throw new RuntimeException("Unknown exception code: " + code
+ " msg " + msg);
@@ -1835,7 +1851,7 @@
if (Bundle.DEBUG) Log.d(TAG, "null bundle: length=" + length);
return null;
}
-
+
final Bundle bundle = new Bundle(this, length);
if (loader != null) {
bundle.setClassLoader(loader);
@@ -2346,7 +2362,7 @@
return readArrayList(loader);
case VAL_BOOLEANARRAY:
- return createBooleanArray();
+ return createBooleanArray();
case VAL_BYTEARRAY:
return createByteArray();
@@ -2396,6 +2412,9 @@
case VAL_SIZEF:
return readSizeF();
+ case VAL_DOUBLEARRAY:
+ return createDoubleArray();
+
default:
int off = dataPosition() - 4;
throw new RuntimeException(
diff --git a/core/java/android/os/Parcelable.java b/core/java/android/os/Parcelable.java
index 13b5de9..c10abec 100644
--- a/core/java/android/os/Parcelable.java
+++ b/core/java/android/os/Parcelable.java
@@ -73,19 +73,31 @@
*/
public static final int PARCELABLE_ELIDE_DUPLICATES = 0x0002;
- /**
+ /*
* Bit masks for use with {@link #describeContents}: each bit represents a
* kind of object considered to have potential special significance when
* marshalled.
*/
+
+ /**
+ * Descriptor bit used with {@link #describeContents()}: indicates that
+ * the Parcelable object's flattened representation includes a file descriptor.
+ *
+ * @see #describeContents()
+ */
public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
/**
- * Describe the kinds of special objects contained in this Parcelable's
- * marshalled representation.
+ * Describe the kinds of special objects contained in this Parcelable
+ * instance's marshaled representation. For example, if the object will
+ * include a file descriptor in the output of {@link #writeToParcel(Parcel, int)},
+ * the return value of this method must include the
+ * {@link #CONTENTS_FILE_DESCRIPTOR} bit.
*
- * @return a bitmask indicating the set of special object types marshalled
- * by the Parcelable.
+ * @return a bitmask indicating the set of special object types marshaled
+ * by this Parcelable object instance.
+ *
+ * @see #CONTENTS_FILE_DESCRIPTOR
*/
public int describeContents();
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 1cffa83..a0a0060 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -96,7 +96,7 @@
* </table>
* <p>
* Any application using a WakeLock must request the {@code android.permission.WAKE_LOCK}
- * permission in an {@code <uses-permission>} element of the application's manifest.
+ * permission in an {@code <uses-permission>} element of the application's manifest.
* </p>
*/
public final class PowerManager {
@@ -1033,7 +1033,7 @@
* to have the device stay on.
* <p>
* Any application using a WakeLock must request the {@code android.permission.WAKE_LOCK}
- * permission in an {@code <uses-permission>} element of the application's manifest.
+ * permission in an {@code <uses-permission>} element of the application's manifest.
* Obtain a wake lock by calling {@link PowerManager#newWakeLock(int, String)}.
* </p><p>
* Call {@link #acquire()} to acquire the wake lock and force the device to stay
diff --git a/core/java/android/os/ServiceSpecificException.java b/core/java/android/os/ServiceSpecificException.java
new file mode 100644
index 0000000..20f237a5
--- /dev/null
+++ b/core/java/android/os/ServiceSpecificException.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2015 The Android Open 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;
+
+/**
+ * An exception specific to a service.
+ *
+ * <p>This exception includes an error code specific to the throwing
+ * service. This is mostly used by system services to indicate
+ * domain specific error conditions.
+ *
+ * @hide
+ */
+public class ServiceSpecificException extends RuntimeException {
+ public final int errorCode;
+
+ ServiceSpecificException(int errorCode, String message) {
+ super(message);
+ this.errorCode = errorCode;
+ }
+
+ ServiceSpecificException(int errorCode) {
+ this.errorCode = errorCode;
+ }
+}
+
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 8b2c74f..f1672df 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -1931,9 +1931,9 @@
// so we'll report it and bail on all of the current strict mode violations
// we currently are maintaining for this thread.
// First, drain the remaining violations from the parcel.
- while (i < numViolations) {
+ i++; // Skip the current entry.
+ for (; i < numViolations; i++) {
info = new ViolationInfo(p, !currentlyGathering);
- i++;
}
// Next clear out all gathered violations.
clearGatheredViolations();
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index f26693c..00a874b 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -15,8 +15,10 @@
*/
package android.os;
+import android.Manifest;
import android.accounts.AccountManager;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
@@ -487,6 +489,19 @@
public static final String DISALLOW_RECORD_AUDIO = "no_record_audio";
/**
+ * Specifies if a user is not allowed to run in the background and should be stopped during
+ * user switch. The default value is <code>false</code>.
+ *
+ * <p>This restriction can be set by device owners and profile owners.
+ *
+ * @see DevicePolicyManager#addUserRestriction(ComponentName, String)
+ * @see DevicePolicyManager#clearUserRestriction(ComponentName, String)
+ * @see #getUserRestrictions()
+ * @hide
+ */
+ public static final String DISALLOW_RUN_IN_BACKGROUND = "no_run_in_background";
+
+ /**
* Specifies if a user is not allowed to use the camera.
*
* @see DevicePolicyManager#addUserRestriction(ComponentName, String)
@@ -708,6 +723,25 @@
}
/**
+ * Checks if the calling app is running as an ephemeral user.
+ *
+ * @return whether the caller is an ephemeral user.
+ * @hide
+ */
+ public boolean isEphemeralUser() {
+ return isUserEphemeral(UserHandle.myUserId());
+ }
+
+ /**
+ * Returns whether the specified user is ephemeral.
+ * @hide
+ */
+ public boolean isUserEphemeral(int userId) {
+ final UserInfo user = getUserInfo(userId);
+ return user != null && user.isEphemeral();
+ }
+
+ /**
* Return whether the given user is actively running. This means that
* the user is in the "started" state, not "stopped" -- it is currently
* allowed to run code through scheduled alarms, receiving broadcasts,
@@ -742,6 +776,60 @@
}
/**
+ * Return whether the calling user is running in a "locked" state. A user is
+ * unlocked only after they've entered their credentials (such as a lock
+ * pattern or PIN), and credential-encrypted private app data storage is
+ * available.
+ */
+ public boolean isUserRunningAndLocked() {
+ return isUserRunningAndLocked(Process.myUserHandle());
+ }
+
+ /**
+ * Return whether the given user is running in a "locked" state. A user
+ * is unlocked only after they've entered their credentials (such as a lock
+ * pattern or PIN), and credential-encrypted private app data storage is
+ * available.
+ *
+ * @param user to retrieve the unlocked state for.
+ */
+ public boolean isUserRunningAndLocked(UserHandle user) {
+ try {
+ return ActivityManagerNative.getDefault().isUserRunning(
+ user.getIdentifier(), ActivityManager.FLAG_AND_LOCKED);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
+ * Return whether the calling user is running in an "unlocked" state. A user
+ * is unlocked only after they've entered their credentials (such as a lock
+ * pattern or PIN), and credential-encrypted private app data storage is
+ * available.
+ */
+ public boolean isUserRunningAndUnlocked() {
+ return isUserRunningAndUnlocked(Process.myUserHandle());
+ }
+
+ /**
+ * Return whether the given user is running in an "unlocked" state. A user
+ * is unlocked only after they've entered their credentials (such as a lock
+ * pattern or PIN), and credential-encrypted private app data storage is
+ * available.
+ *
+ * @param user to retrieve the unlocked state for.
+ */
+ public boolean isUserRunningAndUnlocked(UserHandle user) {
+ try {
+ return ActivityManagerNative.getDefault().isUserRunning(
+ user.getIdentifier(), ActivityManager.FLAG_AND_UNLOCKED);
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+ /**
* Returns the UserInfo object describing a specific user.
* Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
* @param userHandle the user handle of the user whose information is being requested.
@@ -779,6 +867,24 @@
}
}
+ /**
+ * @hide
+ * Returns whether the given user has been disallowed from performing certain actions
+ * or setting certain settings through UserManager. This method disregards restrictions
+ * set by device policy.
+ * @param restrictionKey the string key representing the restriction
+ * @param userHandle the UserHandle of the user for whom to retrieve the restrictions.
+ */
+ public boolean hasBaseUserRestriction(String restrictionKey, UserHandle userHandle) {
+ try {
+ return mService.hasBaseUserRestriction(restrictionKey, userHandle.getIdentifier());
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not get base user restrictions for user " +
+ userHandle.getIdentifier(), re);
+ return false;
+ }
+ }
+
/**
* This will no longer work. Device owners and profile owners should use
* {@link DevicePolicyManager#addUserRestriction(ComponentName, String)} instead.
@@ -1037,6 +1143,39 @@
}
/**
+ * @return the user's account name, null if not found.
+ * @hide
+ */
+ @RequiresPermission( allOf = {
+ Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ Manifest.permission.MANAGE_USERS
+ })
+ public @Nullable String getUserAccount(int userHandle) {
+ try {
+ return mService.getUserAccount(userHandle);
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not get user account", re);
+ return null;
+ }
+ }
+
+ /**
+ * Set account name for the given user.
+ * @hide
+ */
+ @RequiresPermission( allOf = {
+ Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ Manifest.permission.MANAGE_USERS
+ })
+ public void setUserAccount(int userHandle, @Nullable String accountName) {
+ try {
+ mService.setUserAccount(userHandle, accountName);
+ } catch (RemoteException re) {
+ Log.w(TAG, "Could not set user account", re);
+ }
+ }
+
+ /**
* Returns information for Primary user.
* Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
*
@@ -1199,6 +1338,36 @@
}
/**
+ * Set quiet mode of a managed profile.
+ *
+ * @param userHandle The user handle of the profile.
+ * @param enableQuietMode Whether quiet mode should be enabled or disabled.
+ * @hide
+ */
+ public void setQuietModeEnabled(int userHandle, boolean enableQuietMode) {
+ try {
+ mService.setQuietModeEnabled(userHandle, enableQuietMode);
+ } catch (RemoteException e) {
+ Log.w(TAG, "Could not change the profile's quiet mode", e);
+ }
+ }
+
+ /**
+ * Returns whether the given profile is in quiet mode or not.
+ *
+ * @param userHandle The user handle of the profile to be queried.
+ * @return true if the profile is in quiet mode, false otherwise.
+ */
+ public boolean isQuietModeEnabled(UserHandle userHandle) {
+ try {
+ return mService.isQuietModeEnabled(userHandle.getIdentifier());
+ } catch (RemoteException e) {
+ Log.w(TAG, "Could not query the profile's quiet mode", e);
+ }
+ return false;
+ }
+
+ /**
* If the target user is a managed profile of the calling user or the caller
* is itself a managed profile, then this returns a badged copy of the given
* icon to be able to distinguish it from the original icon. For badging an
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java
index c6510f0..9b3f02d 100644
--- a/core/java/android/os/storage/IMountService.java
+++ b/core/java/android/os/storage/IMountService.java
@@ -25,8 +25,6 @@
import android.os.Parcelable;
import android.os.RemoteException;
-import java.io.FileDescriptor;
-
/**
* WARNING! Update IMountService.h and IMountService.cpp if you change this
* file. In particular, the ordering of the methods below must match the
@@ -1202,13 +1200,15 @@
}
@Override
- public void createUserKey(int userId, int serialNumber) throws RemoteException {
+ public void createUserKey(int userId, int serialNumber, boolean ephemeral)
+ throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeInt(userId);
_data.writeInt(serialNumber);
+ _data.writeInt(ephemeral ? 1 : 0);
mRemote.transact(Stub.TRANSACTION_createUserKey, _data, _reply, 0);
_reply.readException();
} finally {
@@ -1283,7 +1283,8 @@
}
@Override
- public void prepareUserStorage(String volumeUuid, int userId, int serialNumber)
+ public void prepareUserStorage(
+ String volumeUuid, int userId, int serialNumber, boolean ephemeral)
throws RemoteException {
Parcel _data = Parcel.obtain();
Parcel _reply = Parcel.obtain();
@@ -1292,6 +1293,7 @@
_data.writeString(volumeUuid);
_data.writeInt(userId);
_data.writeInt(serialNumber);
+ _data.writeInt(ephemeral ? 1 : 0);
mRemote.transact(Stub.TRANSACTION_prepareUserStorage, _data, _reply, 0);
_reply.readException();
} finally {
@@ -2012,7 +2014,8 @@
data.enforceInterface(DESCRIPTOR);
int userId = data.readInt();
int serialNumber = data.readInt();
- createUserKey(userId, serialNumber);
+ boolean ephemeral = data.readInt() != 0;
+ createUserKey(userId, serialNumber, ephemeral);
reply.writeNoException();
return true;
}
@@ -2052,7 +2055,8 @@
String volumeUuid = data.readString();
int userId = data.readInt();
int serialNumber = data.readInt();
- prepareUserStorage(volumeUuid, userId, serialNumber);
+ boolean ephemeral = data.readInt() != 0;
+ prepareUserStorage(volumeUuid, userId, serialNumber, ephemeral);
reply.writeNoException();
return true;
}
@@ -2376,15 +2380,16 @@
public void setPrimaryStorageUuid(String volumeUuid, IPackageMoveObserver callback)
throws RemoteException;
- public void createUserKey(int userId, int serialNumber) throws RemoteException;
+ public void createUserKey(int userId, int serialNumber, boolean ephemeral)
+ throws RemoteException;
public void destroyUserKey(int userId) throws RemoteException;
public void unlockUserKey(int userId, int serialNumber, byte[] token) throws RemoteException;
public void lockUserKey(int userId) throws RemoteException;
public boolean isUserKeyUnlocked(int userId) throws RemoteException;
- public void prepareUserStorage(String volumeUuid, int userId, int serialNumber)
- throws RemoteException;
+ public void prepareUserStorage(String volumeUuid, int userId, int serialNumber,
+ boolean ephemeral) throws RemoteException;
public ParcelFileDescriptor mountAppFuse(String name) throws RemoteException;
}
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index db12564..beda169 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -966,9 +966,9 @@
}
/** {@hide} */
- public void createUserKey(int userId, int serialNumber) {
+ public void createUserKey(int userId, int serialNumber, boolean ephemeral) {
try {
- mMountService.createUserKey(userId, serialNumber);
+ mMountService.createUserKey(userId, serialNumber, ephemeral);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
@@ -1002,9 +1002,10 @@
}
/** {@hide} */
- public void prepareUserStorage(String volumeUuid, int userId, int serialNumber) {
+ public void prepareUserStorage(
+ String volumeUuid, int userId, int serialNumber, boolean ephemeral) {
try {
- mMountService.prepareUserStorage(volumeUuid, userId, serialNumber);
+ mMountService.prepareUserStorage(volumeUuid, userId, serialNumber, ephemeral);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
@@ -1021,8 +1022,17 @@
/** {@hide} */
public static boolean isFileBasedEncryptionEnabled() {
- return "file".equals(SystemProperties.get("ro.crypto.type", "none"))
- || SystemProperties.getBoolean(StorageManager.PROP_EMULATE_FBE, false);
+ return isNativeFileBasedEncryptionEnabled() || isEmulatedFileBasedEncryptionEnabled();
+ }
+
+ /** {@hide} */
+ public static boolean isNativeFileBasedEncryptionEnabled() {
+ return "file".equals(SystemProperties.get("ro.crypto.type", "none"));
+ }
+
+ /** {@hide} */
+ public static boolean isEmulatedFileBasedEncryptionEnabled() {
+ return SystemProperties.getBoolean(StorageManager.PROP_EMULATE_FBE, false);
}
/** {@hide} */
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index 4e4b1c9..fda6326 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -371,7 +371,13 @@
getDefaultSharedPreferencesMode());
}
- private static String getDefaultSharedPreferencesName(Context context) {
+ /**
+ * Returns the name used for storing default shared preferences.
+ *
+ * @see #getDefaultSharedPreferences(Context)
+ * @see Context#getSharedPreferencesPath(String)
+ */
+ public static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 94a2bea..10432b5 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -394,12 +394,19 @@
Uri.withAppendedPath(AUTHORITY_URI, "directories");
/**
- * The content:// style URI for enterprise Directory table. Requests to this URI can be
- * performed on the UI thread because they are always unblocking.
+ * URI used for getting all directories from primary and managed profile.
+ * It supports the same semantics as {@link #CONTENT_URI} and returns the same columns.
+ * If the device has no managed profile that is linked to the current profile, it behaves
+ * in the exact same way as {@link #CONTENT_URI}.
+ * If there is a managed profile linked to the current profile, it will merge
+ * managed profile and current profile's results and return.
+ *
+ * Note: this query returns primary profile results before managed profile results,
+ * and this order is not affected by sorting parameter.
*
*/
- public static final Uri CORP_CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI,
- "directories_corp");
+ public static final Uri ENTERPRISE_CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI,
+ "directories_enterprise");
/**
* The MIME-type of {@link #CONTENT_URI} providing a directory of
@@ -426,16 +433,12 @@
/**
* _ID of the work profile default directory, which represents locally stored contacts.
- *
- * @hide
*/
public static final long ENTERPRISE_DEFAULT = Directory.ENTERPRISE_DIRECTORY_ID_BASE
+ DEFAULT;
/**
* _ID of the work profile directory that represents locally stored invisible contacts.
- *
- * @hide
*/
public static final long ENTERPRISE_LOCAL_INVISIBLE = Directory.ENTERPRISE_DIRECTORY_ID_BASE
+ LOCAL_INVISIBLE;
@@ -1640,12 +1643,12 @@
CONTENT_URI, "filter");
/**
- * It supports the same semantics as {@link #CONTENT_FILTER_URI} and returns the same
- * columns. If there is a corp profile linked to the current profile, it will query corp
- * profile, otherwise it will return null.
+ * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the same
+ * columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in parameters,
+ * otherwise it will throw UnsupportedOperationException.
*/
- public static final Uri CORP_CONTENT_FILTER_URI = Uri.withAppendedPath(
- CORP_CONTENT_URI, "filter");
+ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath(
+ CONTENT_URI, "filter_enterprise");
/**
* The content:// style URI for this table joined with useful data from
@@ -5915,6 +5918,14 @@
"filter");
/**
+ * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the same
+ * columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in
+ * parameters, otherwise it will throw UnsupportedOperationException.
+ */
+ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath(
+ CONTENT_URI, "filter_enterprise");
+
+ /**
* A boolean query parameter that can be used with {@link #CONTENT_FILTER_URI}.
* If "1" or "true", display names are searched. If "0" or "false", display names
* are not searched. Default is "1".
@@ -6183,6 +6194,14 @@
"filter");
/**
+ * It supports the similar semantics as {@link #CONTENT_FILTER_URI} and returns the same
+ * columns. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in
+ * parameters, otherwise it will throw UnsupportedOperationException.
+ */
+ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath(
+ CONTENT_URI, "filter_enterprise");
+
+ /**
* The email address.
* <P>Type: TEXT</P>
*/
@@ -7395,6 +7414,14 @@
*/
public static final Uri CONTENT_FILTER_URI = Uri.withAppendedPath(CONTENT_URI,
"filter");
+
+ /**
+ * Similar to {@link Phone#ENTERPRISE_CONTENT_FILTER_URI}, but allows users to filter
+ * callable data. This URI requires {@link ContactsContract#DIRECTORY_PARAM_KEY} in
+ * parameters, otherwise it will throw UnsupportedOperationException.
+ */
+ public static final Uri ENTERPRISE_CONTENT_FILTER_URI = Uri.withAppendedPath(
+ CONTENT_URI, "filter_enterprise");
}
/**
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index d53bb0d..77a4485 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -234,6 +234,7 @@
* @see #FLAG_DIR_PREFERS_GRID
* @see #FLAG_DIR_PREFERS_LAST_MODIFIED
* @see #FLAG_VIRTUAL_DOCUMENT
+ * @see #FLAG_ARCHIVE
*/
public static final String COLUMN_FLAGS = "flags";
@@ -368,6 +369,18 @@
public static final int FLAG_VIRTUAL_DOCUMENT = 1 << 10;
/**
+ * Flag indicating that a document is an archive, and it's contents can be
+ * obtained via {@link DocumentsProvider#queryChildDocuments}.
+ * <p>
+ * The <em>provider</em> support library offers utility classes to add common
+ * archive support.
+ *
+ * @see #COLUMN_FLAGS
+ * @see DocumentsProvider#queryChildDocuments(String, String[], String)
+ */
+ public static final int FLAG_ARCHIVE = 1 << 11;
+
+ /**
* Flag indicating that document titles should be hidden when viewing
* this directory in a larger format grid. For example, a directory
* containing only images may want the image thumbnails to speak for
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index c92382a..74fd8cd 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3323,6 +3323,7 @@
PUBLIC_SETTINGS.add(SOUND_EFFECTS_ENABLED);
PUBLIC_SETTINGS.add(HAPTIC_FEEDBACK_ENABLED);
PUBLIC_SETTINGS.add(SHOW_WEB_SUGGESTIONS);
+ PUBLIC_SETTINGS.add(VIBRATE_WHEN_RINGING);
}
/**
@@ -3344,7 +3345,6 @@
PRIVATE_SETTINGS.add(VIBRATE_IN_SILENT);
PRIVATE_SETTINGS.add(MEDIA_BUTTON_RECEIVER);
PRIVATE_SETTINGS.add(HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY);
- PRIVATE_SETTINGS.add(VIBRATE_WHEN_RINGING);
PRIVATE_SETTINGS.add(DTMF_TONE_TYPE_WHEN_DIALING);
PRIVATE_SETTINGS.add(HEARING_AID);
PRIVATE_SETTINGS.add(TTY_MODE);
@@ -4912,6 +4912,15 @@
"accessibility_display_daltonizer";
/**
+ * Float list that specifies the color matrix to apply to
+ * the display. Valid values are defined in AccessibilityManager.
+ *
+ * @hide
+ */
+ public static final String ACCESSIBILITY_DISPLAY_COLOR_MATRIX =
+ "accessibility_display_color_matrix";
+
+ /**
* Setting that specifies whether automatic click when the mouse pointer stops moving is
* enabled.
*
@@ -4931,6 +4940,15 @@
"accessibility_autoclick_delay";
/**
+ * Whether or not larger size icons are used for the pointer of mouse/trackpad for
+ * accessibility.
+ * (0 = false, 1 = true)
+ * @hide
+ */
+ public static final String ACCESSIBILITY_LARGE_POINTER_ICON =
+ "accessibility_large_pointer_icon";
+
+ /**
* The timeout for considering a press to be a long press in milliseconds.
* @hide
*/
@@ -7730,7 +7748,7 @@
public static final String REQUIRE_PASSWORD_TO_DECRYPT = "require_password_to_decrypt";
/**
- * Whether the Volte/VT is enabled
+ * Whether the Volte is enabled
* <p>
* Type: int (0 for false, 1 for true)
* @hide
@@ -7738,6 +7756,15 @@
public static final String ENHANCED_4G_MODE_ENABLED = "volte_vt_enabled";
/**
+ * Whether VT (Video Telephony over IMS) is enabled
+ * <p>
+ * Type: int (0 for false, 1 for true)
+ *
+ * @hide
+ */
+ public static final String VT_IMS_ENABLED = "vt_ims_enabled";
+
+ /**
* Whether WFC is enabled
* <p>
* Type: int (0 for false, 1 for true)
@@ -7774,6 +7801,24 @@
public static final String LTE_SERVICE_FORCED = "lte_service_forced";
/**
+ * Ephemeral app cookie max size in bytes.
+ * <p>
+ * Type: int
+ * @hide
+ */
+ public static final String EPHEMERAL_COOKIE_MAX_SIZE_BYTES =
+ "ephemeral_cookie_max_size_bytes";
+
+ /**
+ * The duration for caching uninstalled ephemeral apps.
+ * <p>
+ * Type: long
+ * @hide
+ */
+ public static final String UNINSTALLED_EPHEMERAL_APP_CACHE_DURATION_MILLIS =
+ "uninstalled_ephemeral_app_cache_duration_millis";
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
diff --git a/core/java/android/security/FrameworkNetworkSecurityPolicy.java b/core/java/android/security/FrameworkNetworkSecurityPolicy.java
new file mode 100644
index 0000000..e3dac5e
--- /dev/null
+++ b/core/java/android/security/FrameworkNetworkSecurityPolicy.java
@@ -0,0 +1,35 @@
+/**
+ * Copyright (c) 2015, The Android Open 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.security;
+
+/**
+ * Android framework's implementation of {@link libcore.net.NetworkSecurityPolicy}.
+ *
+ * @hide
+ */
+public class FrameworkNetworkSecurityPolicy extends libcore.net.NetworkSecurityPolicy {
+ private final boolean mCleartextTrafficPermitted;
+
+ public FrameworkNetworkSecurityPolicy(boolean cleartextTrafficPermitted) {
+ mCleartextTrafficPermitted = cleartextTrafficPermitted;
+ }
+
+ @Override
+ public boolean isCleartextTrafficPermitted() {
+ return mCleartextTrafficPermitted;
+ }
+}
diff --git a/core/java/android/security/NetworkSecurityPolicy.java b/core/java/android/security/NetworkSecurityPolicy.java
index 7e87717..7991d37 100644
--- a/core/java/android/security/NetworkSecurityPolicy.java
+++ b/core/java/android/security/NetworkSecurityPolicy.java
@@ -60,7 +60,7 @@
* <p>NOTE: {@link android.webkit.WebView} does not honor this flag.
*/
public boolean isCleartextTrafficPermitted() {
- return libcore.net.NetworkSecurityPolicy.isCleartextTrafficPermitted();
+ return libcore.net.NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted();
}
/**
@@ -72,6 +72,7 @@
* @hide
*/
public void setCleartextTrafficPermitted(boolean permitted) {
- libcore.net.NetworkSecurityPolicy.setCleartextTrafficPermitted(permitted);
+ FrameworkNetworkSecurityPolicy policy = new FrameworkNetworkSecurityPolicy(permitted);
+ libcore.net.NetworkSecurityPolicy.setInstance(policy);
}
}
diff --git a/core/java/android/security/net/config/CertificateSource.java b/core/java/android/security/net/config/CertificateSource.java
index 2b7829e..7e3601e 100644
--- a/core/java/android/security/net/config/CertificateSource.java
+++ b/core/java/android/security/net/config/CertificateSource.java
@@ -23,4 +23,5 @@
public interface CertificateSource {
Set<X509Certificate> getCertificates();
X509Certificate findBySubjectAndPublicKey(X509Certificate cert);
+ X509Certificate findByIssuerAndSignature(X509Certificate cert);
}
diff --git a/core/java/android/security/net/config/CertificatesEntryRef.java b/core/java/android/security/net/config/CertificatesEntryRef.java
index 1d15e19..ff728ef 100644
--- a/core/java/android/security/net/config/CertificatesEntryRef.java
+++ b/core/java/android/security/net/config/CertificatesEntryRef.java
@@ -51,4 +51,13 @@
return new TrustAnchor(foundCert, mOverridesPins);
}
+
+ public TrustAnchor findByIssuerAndSignature(X509Certificate cert) {
+ X509Certificate foundCert = mSource.findByIssuerAndSignature(cert);
+ if (foundCert == null) {
+ return null;
+ }
+
+ return new TrustAnchor(foundCert, mOverridesPins);
+ }
}
diff --git a/core/java/android/security/net/config/DirectoryCertificateSource.java b/core/java/android/security/net/config/DirectoryCertificateSource.java
index a261e06..bf29efa 100644
--- a/core/java/android/security/net/config/DirectoryCertificateSource.java
+++ b/core/java/android/security/net/config/DirectoryCertificateSource.java
@@ -95,6 +95,21 @@
});
}
+ @Override
+ public X509Certificate findByIssuerAndSignature(final X509Certificate cert) {
+ return findCert(cert.getIssuerX500Principal(), new CertSelector() {
+ @Override
+ public boolean match(X509Certificate ca) {
+ try {
+ cert.verify(ca.getPublicKey());
+ return true;
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ });
+ }
+
private static interface CertSelector {
boolean match(X509Certificate cert);
}
diff --git a/core/java/android/security/net/config/KeyStoreCertificateSource.java b/core/java/android/security/net/config/KeyStoreCertificateSource.java
index 7a01a64..b6105cd 100644
--- a/core/java/android/security/net/config/KeyStoreCertificateSource.java
+++ b/core/java/android/security/net/config/KeyStoreCertificateSource.java
@@ -80,4 +80,14 @@
}
return anchor.getTrustedCert();
}
+
+ @Override
+ public X509Certificate findByIssuerAndSignature(X509Certificate cert) {
+ ensureInitialized();
+ java.security.cert.TrustAnchor anchor = mIndex.findByIssuerAndSignature(cert);
+ if (anchor == null) {
+ return null;
+ }
+ return anchor.getTrustedCert();
+ }
}
diff --git a/core/java/android/security/net/config/NetworkSecurityConfig.java b/core/java/android/security/net/config/NetworkSecurityConfig.java
index 2ab07b5..0a2edff 100644
--- a/core/java/android/security/net/config/NetworkSecurityConfig.java
+++ b/core/java/android/security/net/config/NetworkSecurityConfig.java
@@ -134,6 +134,17 @@
return null;
}
+ /** @hide */
+ public TrustAnchor findTrustAnchorByIssuerAndSignature(X509Certificate cert) {
+ for (CertificatesEntryRef ref : mCertificatesEntryRefs) {
+ TrustAnchor anchor = ref.findByIssuerAndSignature(cert);
+ if (anchor != null) {
+ return anchor;
+ }
+ }
+ return null;
+ }
+
/**
* Return a {@link Builder} for the default {@code NetworkSecurityConfig}.
*
diff --git a/core/java/android/security/net/config/NetworkSecurityTrustManager.java b/core/java/android/security/net/config/NetworkSecurityTrustManager.java
index 6013c1e..982ed68 100644
--- a/core/java/android/security/net/config/NetworkSecurityTrustManager.java
+++ b/core/java/android/security/net/config/NetworkSecurityTrustManager.java
@@ -46,17 +46,13 @@
throw new NullPointerException("config must not be null");
}
mNetworkSecurityConfig = config;
- // TODO: Create our own better KeyStoreImpl
try {
+ TrustedCertificateStoreAdapter certStore = new TrustedCertificateStoreAdapter(config);
+ // Provide an empty KeyStore since TrustManagerImpl doesn't support null KeyStores.
+ // TrustManagerImpl will use certStore to lookup certificates.
KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(null);
- int certNum = 0;
- for (TrustAnchor anchor : mNetworkSecurityConfig.getTrustAnchors()) {
- store.setEntry(String.valueOf(certNum++),
- new KeyStore.TrustedCertificateEntry(anchor.certificate),
- null);
- }
- mDelegate = new TrustManagerImpl(store);
+ mDelegate = new TrustManagerImpl(store, null, certStore);
} catch (GeneralSecurityException | IOException e) {
throw new RuntimeException(e);
}
diff --git a/core/java/android/security/net/config/ResourceCertificateSource.java b/core/java/android/security/net/config/ResourceCertificateSource.java
index b007f8f..e489c2c 100644
--- a/core/java/android/security/net/config/ResourceCertificateSource.java
+++ b/core/java/android/security/net/config/ResourceCertificateSource.java
@@ -90,4 +90,14 @@
}
return anchor.getTrustedCert();
}
+
+ @Override
+ public X509Certificate findByIssuerAndSignature(X509Certificate cert) {
+ ensureInitialized();
+ java.security.cert.TrustAnchor anchor = mIndex.findByIssuerAndSignature(cert);
+ if (anchor == null) {
+ return null;
+ }
+ return anchor.getTrustedCert();
+ }
}
diff --git a/core/java/android/security/net/config/TrustedCertificateStoreAdapter.java b/core/java/android/security/net/config/TrustedCertificateStoreAdapter.java
new file mode 100644
index 0000000..4a90f82
--- /dev/null
+++ b/core/java/android/security/net/config/TrustedCertificateStoreAdapter.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.security.net.config;
+
+import java.io.File;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.Date;
+import java.util.Set;
+
+import com.android.org.conscrypt.TrustedCertificateStore;
+
+/** @hide */
+public class TrustedCertificateStoreAdapter extends TrustedCertificateStore {
+ private final NetworkSecurityConfig mConfig;
+
+ public TrustedCertificateStoreAdapter(NetworkSecurityConfig config) {
+ mConfig = config;
+ }
+
+ @Override
+ public X509Certificate findIssuer(X509Certificate cert) {
+ TrustAnchor anchor = mConfig.findTrustAnchorByIssuerAndSignature(cert);
+ if (anchor == null) {
+ return null;
+ }
+ return anchor.certificate;
+ }
+
+ @Override
+ public X509Certificate getTrustAnchor(X509Certificate cert) {
+ TrustAnchor anchor = mConfig.findTrustAnchorBySubjectAndPublicKey(cert);
+ if (anchor == null) {
+ return null;
+ }
+ return anchor.certificate;
+ }
+
+ @Override
+ public boolean isUserAddedCertificate(X509Certificate cert) {
+ // isUserAddedCertificate is used only for pinning overrides, so use overridesPins here.
+ TrustAnchor anchor = mConfig.findTrustAnchorBySubjectAndPublicKey(cert);
+ if (anchor == null) {
+ return false;
+ }
+ return anchor.overridesPins;
+ }
+
+ @Override
+ public File getCertificateFile(File dir, X509Certificate x) {
+ // getCertificateFile is only used for tests, do not support it here.
+ throw new UnsupportedOperationException();
+ }
+
+ // The methods below are exposed in TrustedCertificateStore but not used by conscrypt, do not
+ // support them.
+
+ @Override
+ public Certificate getCertificate(String alias) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Certificate getCertificate(String alias, boolean includeDeletedSystem) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Date getCreationDate(String alias) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Set<String> aliases() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Set<String> userAliases() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Set<String> allSystemAliases() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean containsAlias(String alias) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCertificateAlias(Certificate c) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public String getCertificateAlias(Certificate c, boolean includeDeletedSystem) {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/core/java/android/service/dreams/DreamService.java b/core/java/android/service/dreams/DreamService.java
index 0171869..bb46e83 100644
--- a/core/java/android/service/dreams/DreamService.java
+++ b/core/java/android/service/dreams/DreamService.java
@@ -98,7 +98,7 @@
* </service>
* </pre>
*
- * <p>If specified with the {@code <meta-data>} element,
+ * <p>If specified with the {@code <meta-data>} element,
* additional information for the dream is defined using the
* {@link android.R.styleable#Dream <dream>} element in a separate XML file.
* Currently, the only addtional
diff --git a/core/java/android/service/notification/NotificationAssistantService.java b/core/java/android/service/notification/NotificationAssistantService.java
new file mode 100644
index 0000000..5d1317c
--- /dev/null
+++ b/core/java/android/service/notification/NotificationAssistantService.java
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.notification;
+
+import android.app.Notification;
+import android.net.Uri;
+
+/**
+ * A service that helps the user manage notifications by modifying the
+ * relative importance of notifications.
+ * <p>To extend this class, you must declare the service in your manifest file with
+ * the {@link android.Manifest.permission#BIND_NOTIFICATION_ASSISTANT_SERVICE} permission
+ * and include an intent filter with the {@link #SERVICE_INTERFACE} action. For example:</p>
+ * <pre>
+ * <service android:name=".NotificationAssistant"
+ * android:label="@string/service_name"
+ * android:permission="android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE">
+ * <intent-filter>
+ * <action android:name="android.service.notification.NotificationAssistantService" />
+ * </intent-filter>
+ * </service></pre>
+ */
+public abstract class NotificationAssistantService extends NotificationListenerService {
+ /** Notification was canceled by the status bar reporting a click. */
+ public static final int REASON_DELEGATE_CLICK = 1;
+
+ /** Notification was canceled by the status bar reporting a user dismissal. */
+ public static final int REASON_DELEGATE_CANCEL = 2;
+
+ /** Notification was canceled by the status bar reporting a user dismiss all. */
+ public static final int REASON_DELEGATE_CANCEL_ALL = 3;
+
+ /** Notification was canceled by the status bar reporting an inflation error. */
+ public static final int REASON_DELEGATE_ERROR = 4;
+
+ /** Notification was canceled by the package manager modifying the package. */
+ public static final int REASON_PACKAGE_CHANGED = 5;
+
+ /** Notification was canceled by the owning user context being stopped. */
+ public static final int REASON_USER_STOPPED = 6;
+
+ /** Notification was canceled by the user banning the package. */
+ public static final int REASON_PACKAGE_BANNED = 7;
+
+ /** Notification was canceled by the app canceling this specific notification. */
+ public static final int REASON_APP_CANCEL = 8;
+
+ /** Notification was canceled by the app cancelling all its notifications. */
+ public static final int REASON_APP_CANCEL_ALL = 9;
+
+ /** Notification was canceled by a listener reporting a user dismissal. */
+ public static final int REASON_LISTENER_CANCEL = 10;
+
+ /** Notification was canceled by a listener reporting a user dismiss all. */
+ public static final int REASON_LISTENER_CANCEL_ALL = 11;
+
+ /** Notification was canceled because it was a member of a canceled group. */
+ public static final int REASON_GROUP_SUMMARY_CANCELED = 12;
+
+ /** Notification was canceled because it was an invisible member of a group. */
+ public static final int REASON_GROUP_OPTIMIZATION = 13;
+
+ public class Adjustment {
+ int mImportance;
+ CharSequence mExplanation;
+ Uri mReference;
+
+ /**
+ * Create a notification importance adjustment.
+ *
+ * @param importance The final importance of the notification.
+ * @param explanation A human-readable justification for the adjustment.
+ * @param reference A reference to an external object that augments the
+ * explanation, such as a
+ * {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI},
+ * or null.
+ */
+ public Adjustment(int importance, CharSequence explanation, Uri reference) {
+ mImportance = importance;
+ mExplanation = explanation;
+ mReference = reference;
+ }
+ }
+
+ /**
+ * A notification was posted by an app. Called before alert.
+ *
+ * @param sbn the new notification
+ * @param importance the initial importance of the notification.
+ * @param user true if the initial importance reflects an explicit user preference.
+ * @return an adjustment or null to take no action, within 100ms.
+ */
+ abstract public Adjustment onNotificationEnqueued(StatusBarNotification sbn,
+ int importance, boolean user);
+
+ /**
+ * The visibility of a notification has changed.
+ *
+ * @param key the notification key
+ * @param time milliseconds since midnight, January 1, 1970 UTC.
+ * @param visible true if the notification became visible, false if hidden.
+ */
+ public void onNotificationVisibilityChanged(String key, long time, boolean visible)
+ {
+ // Do nothing, Override this to collect visibility statistics.
+ }
+
+ /**
+ * The user clicked on a notification.
+ *
+ * @param key the notification key
+ * @param time milliseconds since midnight, January 1, 1970 UTC.
+ */
+ public void onNotificationClick(String key, long time)
+ {
+ // Do nothing, Override this to collect click statistics
+ }
+
+ /**
+ * The user clicked on a notification action.
+ *
+ * @param key the notification key
+ * @param time milliseconds since midnight, January 1, 1970 UTC.
+ * @param actionIndex the index of the action button that was pressed.
+ */
+ public void onNotificationActionClick(String key, long time, int actionIndex)
+ {
+ // Do nothing, Override this to collect action button click statistics
+ }
+
+ /**
+ * A notification was removed.
+
+ * @param key the notification key
+ * @param time milliseconds since midnight, January 1, 1970 UTC.
+ * @param reason see {@link #REASON_LISTENER_CANCEL}, etc.
+ */
+ public void onNotificationRemoved(String key, long time, int reason) {
+ // Do nothing, Override this to collect dismissal statistics
+ }
+
+ /**
+ * Change the importance of an existing notification. N.B. this won’t cause
+ * an existing notification to alert, but might allow a future update to
+ * this notification to alert.
+ *
+ * @param key the notification key
+ * @param adjustment the new importance with an explanation
+ */
+ public final void adjustImportance(String key, Adjustment adjustment)
+ {
+ // TODO: pack up the adjustment and send it to the NotificationManager.
+ }
+
+ /**
+ * Add an annotation to a an existing notification. The delete intent will
+ * be fired when the host notification is deleted, or when this annotation
+ * is removed or replaced.
+ *
+ * @param key the notification key
+ * @param annotation the new annotation object
+ */
+ public final void setAnnotation(String key, Notification annotation)
+ {
+ // TODO: pack up the annotation and send it to the NotificationManager.
+ }
+
+ /**
+ * Remove the annotation from a notification.
+ *
+ * @param key the notification key
+ */
+ public final void clearAnnotation(String key)
+ {
+ // TODO: ask the NotificationManager to clear the annotation.
+ }
+}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index ee97e8e..a7545f2 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -822,6 +822,41 @@
* @hide */
public static final int VISIBILITY_NO_OVERRIDE = -1000;
+ /**
+ * Value signifying that the user has not expressed an importance.
+ *
+ * This value is for persisting preferences, and should never be associated with
+ * an actual notification.
+ */
+ public static final int IMPORTANCE_UNSPECIFIED = -1000;
+
+ /**
+ * A notification with no importance: shows nowhere, is blocked.
+ */
+ public static final int IMPORTANCE_NONE = -2;
+
+ /**
+ * Low notification importance: only shows in the shade, below the fold.
+ */
+ public static final int IMPORTANCE_LOW = -1;
+
+ /**
+ * Default notification importance: shows everywhere, but is not intrusive.
+ */
+ public static final int IMPORTANCE_DEFAULT = 0;
+
+ /**
+ * Higher notification importance: shows everywhere, makes noise,
+ * but does not visually intrude.
+ */
+ public static final int IMPORTANCE_HIGH = 1;
+
+ /**
+ * Highest notification importance: shows everywhere, makes noise,
+ * and also visually intrudes.
+ */
+ public static final int IMPORTANCE_MAX = 2;
+
private String mKey;
private int mRank = -1;
private boolean mIsAmbient;
@@ -875,7 +910,6 @@
return mSuppressedVisualEffects;
}
-
/**
* Returns whether the notification matches the user's interruption
* filter.
@@ -887,6 +921,27 @@
return mMatchesInterruptionFilter;
}
+ /**
+ * Returns the importance of the notification, which dictates its
+ * modes of presentation, see: {@link #IMPORTANCE_DEFAULT}, etc.
+ *
+ * @return the rank of the notification
+ */
+ public int getImportance() {
+ return IMPORTANCE_DEFAULT; // TODO implement;
+ }
+
+ /**
+ * If the importance has been overriden by user preference, or by a
+ * {@link NotificationAssistantService}, then this will be non-null,
+ * and should be displayed to the user.
+ *
+ * @return the explanation for the importance, or null if it is the natural importance
+ */
+ public CharSequence getImportanceExplanation() {
+ return null; // TODO implement
+ }
+
private void populate(String key, int rank, boolean isAmbient,
boolean matchesInterruptionFilter, int visibilityOverride,
int suppressedVisualEffects) {
@@ -897,6 +952,28 @@
mVisibilityOverride = visibilityOverride;
mSuppressedVisualEffects = suppressedVisualEffects;
}
+
+ /**
+ * {@hide}
+ */
+ public static String importanceToString(int importance) {
+ switch (importance) {
+ case IMPORTANCE_UNSPECIFIED:
+ return "UNSPECIFIED";
+ case IMPORTANCE_NONE:
+ return "NONE";
+ case IMPORTANCE_LOW:
+ return "LOW";
+ case IMPORTANCE_DEFAULT:
+ return "DEFAULT";
+ case IMPORTANCE_HIGH:
+ return "HIGH";
+ case IMPORTANCE_MAX:
+ return "MAX";
+ default:
+ return "UNKNOWN(" + String.valueOf(importance) + ")";
+ }
+ }
}
/**
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
index b3399d0..541623d 100644
--- a/core/java/android/service/notification/ZenModeConfig.java
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -1110,7 +1110,7 @@
if (!Objects.equals(id, to.id)) {
d.addLine(item, "id", id, to.id);
}
- if (creationTime == to.creationTime) {
+ if (creationTime != to.creationTime) {
d.addLine(item, "creationTime", creationTime, to.creationTime);
}
}
diff --git a/core/java/android/service/quicksettings/IQSService.aidl b/core/java/android/service/quicksettings/IQSService.aidl
index 087eb61..7e70501 100644
--- a/core/java/android/service/quicksettings/IQSService.aidl
+++ b/core/java/android/service/quicksettings/IQSService.aidl
@@ -23,4 +23,5 @@
*/
interface IQSService {
void updateQsTile(in Tile tile);
+ void onShowDialog(in Tile tile);
}
diff --git a/core/java/android/service/quicksettings/IQSTileService.aidl b/core/java/android/service/quicksettings/IQSTileService.aidl
index 6b46bee5..63a4c5e 100644
--- a/core/java/android/service/quicksettings/IQSTileService.aidl
+++ b/core/java/android/service/quicksettings/IQSTileService.aidl
@@ -27,5 +27,5 @@
void onTileRemoved();
void onStartListening();
void onStopListening();
- void onClick();
+ void onClick(IBinder wtoken);
}
diff --git a/core/java/android/service/quicksettings/Tile.java b/core/java/android/service/quicksettings/Tile.java
index c8ae171..a53fc59 100644
--- a/core/java/android/service/quicksettings/Tile.java
+++ b/core/java/android/service/quicksettings/Tile.java
@@ -137,6 +137,18 @@
}
}
+ /**
+ * @hide
+ * Notifies the IQSService that this tile is showing a dialog.
+ */
+ void onShowDialog() {
+ try {
+ mService.onShowDialog(this);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Couldn't onShowDialog");
+ }
+ }
+
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStrongInterface(mService);
diff --git a/core/java/android/service/quicksettings/TileService.java b/core/java/android/service/quicksettings/TileService.java
index eba4c6f..fd2d5b0 100644
--- a/core/java/android/service/quicksettings/TileService.java
+++ b/core/java/android/service/quicksettings/TileService.java
@@ -15,6 +15,7 @@
*/
package android.service.quicksettings;
+import android.app.Dialog;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
@@ -22,6 +23,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
+import android.view.WindowManager;
/**
* A QSTileService provides the user a tile that can be added to Quick Settings.
@@ -55,7 +57,7 @@
* android:icon="@drawable/my_default_icon_label"
* android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
* <intent-filter>
- * <action android:name="android.intent.action.QS_TILE" />
+ * <action android:name="android.service.quicksettings.action.QS_TILE" />
* </intent-filter>
* </service>}
* </pre>
@@ -73,6 +75,7 @@
private boolean mListening = false;
private Tile mTile;
+ private IBinder mToken;
/**
* Called when the user adds this tile to Quick Settings.
@@ -116,6 +119,20 @@
}
/**
+ * Used to show a dialog.
+ *
+ * This will collapse the Quick Settings panel and show the dialog.
+ *
+ * @param dialog Dialog to show.
+ */
+ public final void showDialog(Dialog dialog) {
+ dialog.getWindow().getAttributes().token = mToken;
+ dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_QS_DIALOG);
+ dialog.show();
+ getQsTile().onShowDialog();
+ }
+
+ /**
* Gets the {@link Tile} for this service.
* <p/>
* This tile may be used to get or set the current state for this
@@ -155,8 +172,8 @@
}
@Override
- public void onClick() throws RemoteException {
- mHandler.sendEmptyMessage(H.MSG_TILE_CLICKED);
+ public void onClick(IBinder wtoken) throws RemoteException {
+ mHandler.obtainMessage(H.MSG_TILE_CLICKED, wtoken).sendToTarget();
}
};
}
@@ -185,19 +202,20 @@
case MSG_TILE_REMOVED:
TileService.this.onTileAdded();
break;
- case MSG_START_LISTENING:
+ case MSG_STOP_LISTENING:
if (mListening) {
mListening = false;
TileService.this.onStopListening();
}
break;
- case MSG_STOP_LISTENING:
+ case MSG_START_LISTENING:
if (!mListening) {
mListening = true;
TileService.this.onStartListening();
}
break;
case MSG_TILE_CLICKED:
+ mToken = (IBinder) msg.obj;
TileService.this.onClick();
break;
}
diff --git a/core/java/android/service/textservice/package.html b/core/java/android/service/textservice/package.html
index 0b5113b..4124922 100644
--- a/core/java/android/service/textservice/package.html
+++ b/core/java/android/service/textservice/package.html
@@ -12,9 +12,9 @@
<p>Applications with a spell checker service must declare the {@link
android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service. The service
-must also declare an intent filter with {@code <action
+must also declare an intent filter with {@code <action
android:name="android.service.textservice.SpellCheckerService" />} as the intent’s action and should
-include a {@code <meta-data>} element that declares configuration information for the spell
+include a {@code <meta-data>} element that declares configuration information for the spell
checker. For example:</p>
<pre>
diff --git a/core/java/android/speech/RecognitionListener.java b/core/java/android/speech/RecognitionListener.java
index bdb3ba9..1ffdf08 100644
--- a/core/java/android/speech/RecognitionListener.java
+++ b/core/java/android/speech/RecognitionListener.java
@@ -69,7 +69,7 @@
* Called when recognition results are ready.
*
* @param results the recognition results. To retrieve the results in {@code
- * ArrayList<String>} format use {@link Bundle#getStringArrayList(String)} with
+ * ArrayList<String>} format use {@link Bundle#getStringArrayList(String)} with
* {@link SpeechRecognizer#RESULTS_RECOGNITION} as a parameter. A float array of
* confidence values might also be given in {@link SpeechRecognizer#CONFIDENCE_SCORES}.
*/
diff --git a/core/java/android/speech/RecognitionService.java b/core/java/android/speech/RecognitionService.java
index 3e74d22..674f809 100644
--- a/core/java/android/speech/RecognitionService.java
+++ b/core/java/android/speech/RecognitionService.java
@@ -303,7 +303,7 @@
* The service should call this method when recognition results are ready.
*
* @param results the recognition results. To retrieve the results in {@code
- * ArrayList<String>} format use {@link Bundle#getStringArrayList(String)} with
+ * ArrayList<String>} format use {@link Bundle#getStringArrayList(String)} with
* {@link SpeechRecognizer#RESULTS_RECOGNITION} as a parameter
*/
public void results(Bundle results) throws RemoteException {
diff --git a/core/java/android/speech/tts/FileSynthesisCallback.java b/core/java/android/speech/tts/FileSynthesisCallback.java
index c7a4ccc..dea766b 100644
--- a/core/java/android/speech/tts/FileSynthesisCallback.java
+++ b/core/java/android/speech/tts/FileSynthesisCallback.java
@@ -104,8 +104,8 @@
Log.d(TAG, "FileSynthesisRequest.start(" + sampleRateInHz + "," + audioFormat
+ "," + channelCount + ")");
}
- if (audioFormat != AudioFormat.ENCODING_PCM_8BIT ||
- audioFormat != AudioFormat.ENCODING_PCM_16BIT ||
+ if (audioFormat != AudioFormat.ENCODING_PCM_8BIT &&
+ audioFormat != AudioFormat.ENCODING_PCM_16BIT &&
audioFormat != AudioFormat.ENCODING_PCM_FLOAT) {
Log.e(TAG, "Audio format encoding " + audioFormat + " not supported. Please use one " +
"of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
diff --git a/core/java/android/speech/tts/PlaybackSynthesisCallback.java b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
index a6fb543..dcc0095 100644
--- a/core/java/android/speech/tts/PlaybackSynthesisCallback.java
+++ b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
@@ -123,8 +123,8 @@
public int start(int sampleRateInHz, int audioFormat, int channelCount) {
if (DBG) Log.d(TAG, "start(" + sampleRateInHz + "," + audioFormat + "," + channelCount
+ ")");
- if (audioFormat != AudioFormat.ENCODING_PCM_8BIT ||
- audioFormat != AudioFormat.ENCODING_PCM_16BIT ||
+ if (audioFormat != AudioFormat.ENCODING_PCM_8BIT &&
+ audioFormat != AudioFormat.ENCODING_PCM_16BIT &&
audioFormat != AudioFormat.ENCODING_PCM_FLOAT) {
Log.w(TAG, "Audio format encoding " + audioFormat + " not supported. Please use one " +
"of AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT or " +
diff --git a/core/java/android/text/Hyphenator.java b/core/java/android/text/Hyphenator.java
index f2b6041..5d9d929 100644
--- a/core/java/android/text/Hyphenator.java
+++ b/core/java/android/text/Hyphenator.java
@@ -166,7 +166,7 @@
sMap.put(null, null);
// TODO: replace this with a discovery-based method that looks into /system/usr/hyphen-data
- String[] availableLanguages = {"en-US", "eu", "hu", "hy", "nb", "nn", "und-Ethi"};
+ String[] availableLanguages = {"en-US", "es", "eu", "hu", "hy", "nb", "nn", "und-Ethi"};
for (int i = 0; i < availableLanguages.length; i++) {
String languageTag = availableLanguages[i];
Hyphenator h = loadHyphenator(languageTag);
diff --git a/core/java/android/text/format/Time.java b/core/java/android/text/format/Time.java
index d567d90..66e2ec3 100644
--- a/core/java/android/text/format/Time.java
+++ b/core/java/android/text/format/Time.java
@@ -842,7 +842,7 @@
* the given time.
*
* <p>
- * Equivalent to {@code Time.compare(this, that) < 0}. See
+ * Equivalent to {@code Time.compare(this, that) < 0}. See
* {@link #compare(Time, Time)} for details.
*
* @param that a given Time object to compare against
@@ -858,7 +858,7 @@
* the given time.
*
* <p>
- * Equivalent to {@code Time.compare(this, that) > 0}. See
+ * Equivalent to {@code Time.compare(this, that) > 0}. See
* {@link #compare(Time, Time)} for details.
*
* @param that a given Time object to compare against
diff --git a/core/java/android/text/method/ArrowKeyMovementMethod.java b/core/java/android/text/method/ArrowKeyMovementMethod.java
index 2459cfa..57fe131 100644
--- a/core/java/android/text/method/ArrowKeyMovementMethod.java
+++ b/core/java/android/text/method/ArrowKeyMovementMethod.java
@@ -20,7 +20,6 @@
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
-import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
@@ -222,34 +221,26 @@
return lineEnd(widget, buffer);
}
- private static boolean isTouchSelecting(boolean isMouse, Spannable buffer) {
- return isMouse ? Touch.isActivelySelecting(buffer) : isSelecting(buffer);
- }
-
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int initialScrollX = -1;
int initialScrollY = -1;
final int action = event.getAction();
- final boolean isMouse = event.isFromSource(InputDevice.SOURCE_MOUSE);
if (action == MotionEvent.ACTION_UP) {
initialScrollX = Touch.getInitialScrollX(widget, buffer);
initialScrollY = Touch.getInitialScrollY(widget, buffer);
}
- boolean wasTouchSelecting = isTouchSelecting(isMouse, buffer);
+ boolean wasTouchSelecting = isSelecting(buffer);
boolean handled = Touch.onTouchEvent(widget, buffer, event);
- if (widget.didTouchFocusSelect() && !isMouse) {
+ if (widget.didTouchFocusSelect()) {
return handled;
}
if (action == MotionEvent.ACTION_DOWN) {
- // Capture the mouse pointer down location to ensure selection starts
- // right under the mouse (and is not influenced by cursor location).
- // The code below needs to run for mouse events.
// For touch events, the code should run only when selection is active.
- if (isMouse || isTouchSelecting(isMouse, buffer)) {
+ if (isSelecting(buffer)) {
if (!widget.isFocused()) {
if (!widget.requestFocus()) {
return handled;
@@ -265,15 +256,8 @@
}
} else if (widget.isFocused()) {
if (action == MotionEvent.ACTION_MOVE) {
- // Cursor can be active at any location in the text while mouse pointer can start
- // selection from a totally different location. Use LAST_TAP_DOWN span to ensure
- // text selection will start from mouse pointer location.
- final int startOffset = buffer.getSpanStart(LAST_TAP_DOWN);
- if (isMouse && Touch.isSelectionStarted(buffer)) {
- Selection.setSelection(buffer, startOffset);
- }
-
- if (isTouchSelecting(isMouse, buffer) && handled) {
+ if (isSelecting(buffer) && handled) {
+ final int startOffset = buffer.getSpanStart(LAST_TAP_DOWN);
// Before selecting, make sure we've moved out of the "slop".
// handled will be true, if we're in select mode AND we're
// OUT of the slop
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index fee7377..d9068dc 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -119,18 +119,12 @@
ds = buffer.getSpans(0, buffer.length(), DragState.class);
if (ds.length > 0) {
- ds[0].mIsSelectionStarted = false;
-
if (ds[0].mFarEnough == false) {
int slop = ViewConfiguration.get(widget.getContext()).getScaledTouchSlop();
if (Math.abs(event.getX() - ds[0].mX) >= slop ||
Math.abs(event.getY() - ds[0].mY) >= slop) {
ds[0].mFarEnough = true;
- if (event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)) {
- ds[0].mIsActivelySelecting = true;
- ds[0].mIsSelectionStarted = true;
- }
}
}
@@ -142,13 +136,9 @@
|| MetaKeyKeyListener.getMetaState(buffer,
MetaKeyKeyListener.META_SELECTING) != 0;
- if (!event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)) {
- ds[0].mIsActivelySelecting = false;
- }
-
float dx;
float dy;
- if (cap && event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)) {
+ if (cap) {
// if we're selecting, we want the scroll to go in
// the direction of the drag
dx = event.getX() - ds[0].mX;
@@ -160,7 +150,6 @@
ds[0].mX = event.getX();
ds[0].mY = event.getY();
- int nx = widget.getScrollX() + (int) dx;
int ny = widget.getScrollY() + (int) dy;
int padding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
@@ -172,10 +161,6 @@
int oldX = widget.getScrollX();
int oldY = widget.getScrollY();
- if (!event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)) {
- scrollTo(widget, layout, nx, ny);
- }
-
// If we actually scrolled, then cancel the up action.
if (oldX != widget.getScrollX() || oldY != widget.getScrollY()) {
widget.cancelLongPress();
@@ -207,37 +192,6 @@
return ds.length > 0 ? ds[0].mScrollY : -1;
}
- /**
- * Checks if selection is still active.
- * This is useful for extending Selection span on buffer.
- * @param buffer The text buffer.
- * @return true if buffer has been marked for selection.
- *
- * @hide
- */
- static boolean isActivelySelecting(Spannable buffer) {
- DragState[] ds;
- ds = buffer.getSpans(0, buffer.length(), DragState.class);
-
- return ds.length > 0 && ds[0].mIsActivelySelecting;
- }
-
- /**
- * Checks if selection has begun (are we out of slop?).
- * Note: DragState.mIsSelectionStarted goes back to false with the very next event.
- * This is useful for starting Selection span on buffer.
- * @param buffer The text buffer.
- * @return true if selection has started on the buffer.
- *
- * @hide
- */
- static boolean isSelectionStarted(Spannable buffer) {
- DragState[] ds;
- ds = buffer.getSpans(0, buffer.length(), DragState.class);
-
- return ds.length > 0 && ds[0].mIsSelectionStarted;
- }
-
private static class DragState implements NoCopySpan {
public float mX;
public float mY;
@@ -245,8 +199,6 @@
public int mScrollY;
public boolean mFarEnough;
public boolean mUsed;
- public boolean mIsActivelySelecting;
- public boolean mIsSelectionStarted;
public DragState(float x, float y, int scrollX, int scrollY) {
mX = x;
diff --git a/core/java/android/transition/ArcMotion.java b/core/java/android/transition/ArcMotion.java
index 70dfe7f..fa4c8d2 100644
--- a/core/java/android/transition/ArcMotion.java
+++ b/core/java/android/transition/ArcMotion.java
@@ -36,13 +36,12 @@
* arc between two points.
* </p>
* <p>This may be used in XML as an element inside a transition.</p>
- * <pre>
- * {@code
- * <changeBounds>
- * <arcMotion android:minimumHorizontalAngle="15"
+ * <pre>{@code
+ * <changeBounds>
+ * <arcMotion android:minimumHorizontalAngle="15"
* android:minimumVerticalAngle="0"
* android:maximumAngle="90"/>
- * </changeBounds>}
+ * </changeBounds>}
* </pre>
*/
public class ArcMotion extends PathMotion {
diff --git a/core/java/android/transition/PathMotion.java b/core/java/android/transition/PathMotion.java
index 651223d..01102a4 100644
--- a/core/java/android/transition/PathMotion.java
+++ b/core/java/android/transition/PathMotion.java
@@ -31,9 +31,9 @@
* <p>This may be used in XML as an element inside a transition.</p>
* <pre>
* {@code
- * <changeBounds>
- * <pathMotion class="my.app.transition.MyPathMotion"/>
- * </changeBounds>
+ * <changeBounds>
+ * <pathMotion class="my.app.transition.MyPathMotion"/>
+ * </changeBounds>
* }
* </pre>
*/
diff --git a/core/java/android/transition/PatternPathMotion.java b/core/java/android/transition/PatternPathMotion.java
index 773c387..f23863f 100644
--- a/core/java/android/transition/PatternPathMotion.java
+++ b/core/java/android/transition/PatternPathMotion.java
@@ -30,11 +30,10 @@
* The starting point of the Path will be moved to the origin and the end point will be scaled
* and rotated so that it matches with the target end point.
* <p>This may be used in XML as an element inside a transition.</p>
- * <pre>
- * {@code
- * <changeBounds>
- * <patternPathMotion android:patternPathData="M0 0 L0 100 L100 100"/>
- * </changeBounds>}
+ * <pre>{@code
+ * <changeBounds>
+ * <patternPathMotion android:patternPathData="M0 0 L0 100 L100 100"/>
+ * </changeBounds>}
* </pre>
*/
public class PatternPathMotion extends PathMotion {
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index e958058..48614c0 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -2052,18 +2052,18 @@
* attributed with the fully-described class name. For example:</p>
* <pre>
* {@code
- * <changeBounds>
- * <pathMotion class="my.app.transition.MyPathMotion"/>
- * </changeBounds>
+ * <changeBounds>
+ * <pathMotion class="my.app.transition.MyPathMotion"/>
+ * </changeBounds>
* }
* </pre>
* <p>or</p>
* <pre>
* {@code
- * <changeBounds>
- * <arcMotion android:minimumHorizontalAngle="15"
+ * <changeBounds>
+ * <arcMotion android:minimumHorizontalAngle="15"
* android:minimumVerticalAngle="0" android:maximumAngle="90"/>
- * </changeBounds>
+ * </changeBounds>
* }
* </pre>
*
@@ -2090,20 +2090,18 @@
* the built-in tags <code>arcMotion</code> or <code>patternPathMotion</code> or it can
* be a custom PathMotion using <code>pathMotion</code> with the <code>class</code>
* attributed with the fully-described class name. For example:</p>
- * <pre>
- * {@code
- * <changeBounds>
- * <pathMotion class="my.app.transition.MyPathMotion"/>
- * </changeBounds>}
+ * <pre>{@code
+ * <changeBounds>
+ * <pathMotion class="my.app.transition.MyPathMotion"/>
+ * </changeBounds>}
* </pre>
* <p>or</p>
- * <pre>
- * {@code
- * <changeBounds>
- * <arcMotion android:minimumHorizontalAngle="15"
+ * <pre>{@code
+ * <changeBounds>
+ * <arcMotion android:minimumHorizontalAngle="15"
* android:minimumVerticalAngle="0"
* android:maximumAngle="90"/>
- * </changeBounds>}
+ * </changeBounds>}
* </pre>
*
* @return The algorithm object used to interpolate along two dimensions.
diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java
index 4ee9807..bdb1fdc 100644
--- a/core/java/android/util/ArrayMap.java
+++ b/core/java/android/util/ArrayMap.java
@@ -60,6 +60,11 @@
private static final int CACHE_SIZE = 10;
/**
+ * Special hash array value that indicates the container is immutable.
+ */
+ static final int[] EMPTY_IMMUTABLE_INTS = new int[0];
+
+ /**
* @hide Special immutable empty ArrayMap.
*/
public static final ArrayMap EMPTY = new ArrayMap(true);
@@ -75,11 +80,6 @@
static Object[] mTwiceBaseCache;
static int mTwiceBaseCacheSize;
- /**
- * Special hash array value that indicates the container is immutable.
- */
- static final int[] EMPTY_IMMUTABLE_INTS = new int[0];
-
int[] mHashes;
Object[] mArray;
int mSize;
diff --git a/core/java/android/util/EventLog.java b/core/java/android/util/EventLog.java
index 558b8f5..6bda83d2 100644
--- a/core/java/android/util/EventLog.java
+++ b/core/java/android/util/EventLog.java
@@ -52,7 +52,7 @@
private static HashMap<String, Integer> sTagCodes = null;
private static HashMap<Integer, String> sTagNames = null;
- /** A previously logged event read from the logs. */
+ /** A previously logged event read from the logs. Instances are thread safe. */
public static final class Event {
private final ByteBuffer mBuffer;
diff --git a/core/java/android/util/LocaleList.aidl b/core/java/android/util/LocaleList.aidl
new file mode 100644
index 0000000..f5de354
--- /dev/null
+++ b/core/java/android/util/LocaleList.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.util;
+
+parcelable LocaleList;
diff --git a/core/java/android/util/LocaleList.java b/core/java/android/util/LocaleList.java
index c1d23bb..1becfb4 100644
--- a/core/java/android/util/LocaleList.java
+++ b/core/java/android/util/LocaleList.java
@@ -19,6 +19,9 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
+import android.icu.util.ULocale;
+import android.os.Parcel;
+import android.os.Parcelable;
import com.android.internal.annotations.GuardedBy;
@@ -35,11 +38,12 @@
* LocaleList is an immutable list of Locales, typically used to keep an
* ordered user preferences for locales.
*/
-public final class LocaleList {
+public final class LocaleList implements Parcelable {
private final Locale[] mList;
// This is a comma-separated list of the locales in the LocaleList created at construction time,
// basically the result of running each locale's toLanguageTag() method and concatenating them
// with commas in between.
+ @NonNull
private final String mStringRepresentation;
private static final Locale[] sEmptyList = new Locale[0];
@@ -101,6 +105,16 @@
return sb.toString();
}
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int parcelableFlags) {
+ dest.writeString(mStringRepresentation);
+ }
+
@NonNull
public String toLanguageTags() {
return mStringRepresentation;
@@ -163,10 +177,25 @@
}
}
+ public static final Parcelable.Creator<LocaleList> CREATOR
+ = new Parcelable.Creator<LocaleList>() {
+ @Override
+ public LocaleList createFromParcel(Parcel source) {
+ return LocaleList.forLanguageTags(source.readString());
+ }
+
+ @Override
+ public LocaleList[] newArray(int size) {
+ return new LocaleList[size];
+ }
+ };
+
+ @NonNull
public static LocaleList getEmptyLocaleList() {
return sEmptyLocaleList;
}
+ @NonNull
public static LocaleList forLanguageTags(@Nullable String list) {
if (list == null || list.equals("")) {
return getEmptyLocaleList();
@@ -180,10 +209,66 @@
}
}
+ private static String getLikelyScript(Locale locale) {
+ final String script = locale.getScript();
+ if (!script.isEmpty()) {
+ return script;
+ } else {
+ // TODO: Cache the results if this proves to be too slow
+ return ULocale.addLikelySubtags(ULocale.forLocale(locale)).getScript();
+ }
+ }
+
+ private static int matchScore(Locale supported, Locale desired) {
+ if (supported.equals(desired)) {
+ return 1; // return early so we don't do unnecessary computation
+ }
+ if (!supported.getLanguage().equals(desired.getLanguage())) {
+ return 0;
+ }
+ // There is no match if the two locales use different scripts. This will most imporantly
+ // take care of traditional vs simplified Chinese.
+ final String supportedScr = getLikelyScript(supported);
+ final String desiredScr = getLikelyScript(desired);
+ return supportedScr.equals(desiredScr) ? 1 : 0;
+ }
+
+ /**
+ * Returns the first match in the locale list given an unordered array of supported locales
+ * in BCP47 format.
+ *
+ * If the locale list is empty, null would be returned.
+ */
@Nullable
- public Locale getBestMatch(String[] locales) {
- // TODO: Fix this to actually do locale negotiation and choose the best match
- return getPrimary();
+ public Locale getFirstMatch(String[] supportedLocales) {
+ if (mList.length == 1) { // just one locale, perhaps the most common scenario
+ return mList[0];
+ }
+ if (mList.length == 0) { // empty locale list
+ return null;
+ }
+ // TODO: Figure out what to if en-XA or ar-XB are in the locale list
+ int bestIndex = Integer.MAX_VALUE;
+ for (String tag : supportedLocales) {
+ final Locale supportedLocale = Locale.forLanguageTag(tag);
+ // We expect the average length of locale lists used for locale resolution to be
+ // smaller than three, so it's OK to do this as an O(mn) algorithm.
+ for (int idx = 0; idx < mList.length; idx++) {
+ final int score = matchScore(supportedLocale, mList[idx]);
+ if (score > 0) {
+ if (idx == 0) { // We have a match on the first locale, which is good enough
+ return mList[0];
+ } else if (idx < bestIndex) {
+ bestIndex = idx;
+ }
+ }
+ }
+ }
+ if (bestIndex == Integer.MAX_VALUE) { // no match was found
+ return mList[0];
+ } else {
+ return mList[bestIndex];
+ }
}
private final static Object sLock = new Object();
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index 692ca7b..a12434c 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -33,10 +33,10 @@
* @hide
*/
final class HardwareLayer {
- private HardwareRenderer mRenderer;
+ private ThreadedRenderer mRenderer;
private VirtualRefBasePtr mFinalizer;
- private HardwareLayer(HardwareRenderer renderer, long deferredUpdater) {
+ private HardwareLayer(ThreadedRenderer renderer, long deferredUpdater) {
if (renderer == null || deferredUpdater == 0) {
throw new IllegalArgumentException("Either hardware renderer: " + renderer
+ " or deferredUpdater: " + deferredUpdater + " is invalid");
@@ -140,7 +140,7 @@
mRenderer.pushLayerUpdate(this);
}
- static HardwareLayer adoptTextureLayer(HardwareRenderer renderer, long layer) {
+ static HardwareLayer adoptTextureLayer(ThreadedRenderer renderer, long layer) {
return new HardwareLayer(renderer, layer);
}
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
deleted file mode 100644
index 5e58250..0000000
--- a/core/java/android/view/HardwareRenderer.java
+++ /dev/null
@@ -1,510 +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 android.view;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.view.Surface.OutOfResourcesException;
-
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-/**
- * Interface for rendering a view hierarchy using hardware acceleration.
- *
- * @hide
- */
-public abstract class HardwareRenderer {
- static final String LOG_TAG = "HardwareRenderer";
-
- /**
- * Name of the file that holds the shaders cache.
- */
- 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 hardware rendering profiling.
- * The default value of this property is assumed to be false.
- *
- * When profiling is enabled, the adb shell dumpsys gfxinfo command will
- * output extra information about the time taken to execute by the last
- * frames.
- *
- * Possible values:
- * "true", to enable profiling
- * "visual_bars", to enable profiling and visualize the results on screen
- * "false", to disable profiling
- *
- * @see #PROFILE_PROPERTY_VISUALIZE_BARS
- *
- * @hide
- */
- public static final String PROFILE_PROPERTY = "debug.hwui.profile";
-
- /**
- * Value for {@link #PROFILE_PROPERTY}. When the property is set to this
- * value, profiling data will be visualized on screen as a bar chart.
- *
- * @hide
- */
- public static final String PROFILE_PROPERTY_VISUALIZE_BARS = "visual_bars";
-
- /**
- * System property used to specify the number of frames to be used
- * when doing hardware rendering profiling.
- * The default value of this property is #PROFILE_MAX_FRAMES.
- *
- * When profiling is enabled, the adb shell dumpsys gfxinfo command will
- * output extra information about the time taken to execute by the last
- * frames.
- *
- * Possible values:
- * "60", to set the limit of frames to 60
- */
- static final String PROFILE_MAXFRAMES_PROPERTY = "debug.hwui.profile.maxframes";
-
- /**
- * System property used to debug EGL configuration choice.
- *
- * Possible values:
- * "choice", print the chosen configuration only
- * "all", print all possible configurations
- */
- static final String PRINT_CONFIG_PROPERTY = "debug.hwui.print_config";
-
- /**
- * Turn on to draw dirty regions every other frame.
- *
- * Possible values:
- * "true", to enable dirty regions debugging
- * "false", to disable dirty regions debugging
- *
- * @hide
- */
- public static final String DEBUG_DIRTY_REGIONS_PROPERTY = "debug.hwui.show_dirty_regions";
-
- /**
- * Turn on to flash hardware layers when they update.
- *
- * Possible values:
- * "true", to enable hardware layers updates debugging
- * "false", to disable hardware layers updates debugging
- *
- * @hide
- */
- public static final String DEBUG_SHOW_LAYERS_UPDATES_PROPERTY =
- "debug.hwui.show_layers_updates";
-
- /**
- * Controls overdraw debugging.
- *
- * Possible values:
- * "false", to disable overdraw debugging
- * "show", to show overdraw areas on screen
- * "count", to display an overdraw counter
- *
- * @hide
- */
- public static final String DEBUG_OVERDRAW_PROPERTY = "debug.hwui.overdraw";
-
- /**
- * Value for {@link #DEBUG_OVERDRAW_PROPERTY}. When the property is set to this
- * value, overdraw will be shown on screen by coloring pixels.
- *
- * @hide
- */
- public static final String OVERDRAW_PROPERTY_SHOW = "show";
-
- /**
- * Turn on to debug non-rectangular clip operations.
- *
- * Possible values:
- * "hide", to disable this debug mode
- * "highlight", highlight drawing commands tested against a non-rectangular clip
- * "stencil", renders the clip region on screen when set
- *
- * @hide
- */
- public static final String DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY =
- "debug.hwui.show_non_rect_clip";
-
- /**
- * A process can set this flag to false to prevent the use of hardware
- * rendering.
- *
- * @hide
- */
- public static boolean sRendererDisabled = false;
-
- /**
- * Further hardware renderer disabling for the system process.
- *
- * @hide
- */
- public static boolean sSystemRendererDisabled = false;
-
- private boolean mEnabled;
- private boolean mRequested = true;
-
- /**
- * Invoke this method to disable hardware rendering in the current process.
- *
- * @hide
- */
- public static void disable(boolean system) {
- sRendererDisabled = true;
- if (system) {
- sSystemRendererDisabled = true;
- }
- }
-
- public static boolean sTrimForeground = false;
-
- /**
- * Controls whether or not the hardware renderer should aggressively
- * trim memory. Note that this must not be set for any process that
- * uses WebView! This should be only used by system_process or similar
- * that do not go into the background.
- */
- public static void enableForegroundTrimming() {
- sTrimForeground = true;
- }
-
- /**
- * Indicates whether hardware acceleration is available under any form for
- * the view hierarchy.
- *
- * @return True if the view hierarchy can potentially be hardware accelerated,
- * false otherwise
- */
- public static boolean isAvailable() {
- return DisplayListCanvas.isAvailable();
- }
-
- /**
- * Destroys the hardware rendering context.
- */
- abstract void destroy();
-
- /**
- * Initializes the hardware renderer for the specified surface.
- *
- * @param surface The surface to hardware accelerate
- *
- * @return True if the initialization was successful, false otherwise.
- */
- abstract boolean initialize(Surface surface) throws OutOfResourcesException;
-
- /**
- * Updates the hardware renderer for the specified surface.
- *
- * @param surface The surface to hardware accelerate
- */
- abstract void updateSurface(Surface surface) throws OutOfResourcesException;
-
- /**
- * Stops any rendering into the surface. Use this if it is unclear whether
- * or not the surface used by the HardwareRenderer will be changing. It
- * Suspends any rendering into the surface, but will not do any destruction
- */
- abstract boolean pauseSurface(Surface surface);
-
- /**
- * Destroys all hardware rendering resources associated with the specified
- * view hierarchy.
- *
- * @param view The root of the view hierarchy
- */
- abstract void destroyHardwareResources(View view);
-
- /**
- * This method should be invoked whenever the current hardware renderer
- * context should be reset.
- *
- * @param surface The surface to hardware accelerate
- */
- abstract void invalidate(Surface surface);
-
- /**
- * Detaches the layer's surface texture from the GL context and releases
- * the texture id
- */
- abstract void detachSurfaceTexture(long hardwareLayer);
-
- /**
- * Gets the current width of the surface. This is the width that the surface
- * was last set to in a call to {@link #setup(int, int, View.AttachInfo, Rect)}.
- *
- * @return the current width of the surface
- */
- abstract int getWidth();
-
- /**
- * Gets the current height of the surface. This is the height that the surface
- * was last set to in a call to {@link #setup(int, int, View.AttachInfo, Rect)}.
- *
- * @return the current width of the surface
- */
- abstract int getHeight();
-
- /**
- * Outputs extra debugging information in the specified file descriptor.
- */
- abstract void dumpGfxInfo(PrintWriter pw, FileDescriptor fd, String[] args);
-
- /**
- * Loads system properties used by the renderer. This method is invoked
- * whenever system properties are modified. Implementations can use this
- * to trigger live updates of the renderer based on properties.
- *
- * @return True if a property has changed.
- */
- abstract boolean loadSystemProperties();
-
- /**
- * Sets the directory to use as a persistent storage for hardware rendering
- * resources.
- *
- * @param cacheDir A directory the current process can write to
- *
- * @hide
- */
- public static void setupDiskCache(File cacheDir) {
- ThreadedRenderer.setupShadersDiskCache(new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath());
- }
-
- /**
- * Indicates that the specified hardware layer needs to be updated
- * as soon as possible.
- *
- * @param layer The hardware layer that needs an update
- */
- abstract void pushLayerUpdate(HardwareLayer layer);
-
- /**
- * Tells the HardwareRenderer that the layer is destroyed. The renderer
- * should remove the layer from any update queues.
- */
- abstract void onLayerDestroyed(HardwareLayer layer);
-
- /**
- * Interface used to receive callbacks whenever a view is drawn by
- * a hardware renderer instance.
- */
- interface HardwareDrawCallbacks {
- /**
- * Invoked before a view is drawn by a hardware renderer.
- * This method can be used to apply transformations to the
- * canvas but no drawing command should be issued.
- *
- * @param canvas The Canvas used to render the view.
- */
- void onHardwarePreDraw(DisplayListCanvas canvas);
-
- /**
- * Invoked after a view is drawn by a hardware renderer.
- * It is safe to invoke drawing commands from this method.
- *
- * @param canvas The Canvas used to render the view.
- */
- void onHardwarePostDraw(DisplayListCanvas canvas);
- }
-
- /**
- * Indicates that the content drawn by HardwareDrawCallbacks needs to
- * be updated, which will be done by the next call to draw()
- */
- abstract void invalidateRoot();
-
- /**
- * Draws the specified view.
- *
- * @param view The view to draw.
- * @param attachInfo AttachInfo tied to the specified view.
- * @param callbacks Callbacks invoked when drawing happens.
- */
- abstract void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks);
-
- /**
- * Creates a new hardware layer. A hardware layer built by calling this
- * method will be treated as a texture layer, instead of as a render target.
- *
- * @return A hardware layer
- */
- abstract HardwareLayer createTextureLayer();
-
- abstract void buildLayer(RenderNode node);
-
- abstract boolean copyLayerInto(HardwareLayer layer, Bitmap bitmap);
-
- /**
- * Initializes the hardware renderer for the specified surface and setup the
- * renderer for drawing, if needed. This is invoked when the ViewAncestor has
- * potentially lost the hardware renderer. The hardware renderer should be
- * reinitialized and setup when the render {@link #isRequested()} and
- * {@link #isEnabled()}.
- *
- * @param width The width of the drawing surface.
- * @param height The height of the drawing surface.
- * @param attachInfo Information about the window.
- * @param surface The surface to hardware accelerate
- * @param surfaceInsets The drawing surface insets to apply
- *
- * @return true if the surface was initialized, false otherwise. Returning
- * false might mean that the surface was already initialized.
- */
- boolean initializeIfNeeded(int width, int height, View.AttachInfo attachInfo,
- Surface surface, Rect surfaceInsets) throws OutOfResourcesException {
- if (isRequested()) {
- // We lost the gl context, so recreate it.
- if (!isEnabled()) {
- if (initialize(surface)) {
- setup(width, height, attachInfo, surfaceInsets);
- return true;
- }
- }
- }
- return false;
- }
-
- /**
- * Sets up the renderer for drawing.
- *
- * @param width The width of the drawing surface.
- * @param height The height of the drawing surface.
- * @param attachInfo Information about the window.
- * @param surfaceInsets The drawing surface insets to apply
- */
- abstract void setup(int width, int height, View.AttachInfo attachInfo, Rect surfaceInsets);
-
- /**
- * Updates the light position based on the position of the window.
- *
- * @param attachInfo Information about the window.
- */
- abstract void setLightCenter(View.AttachInfo attachInfo);
-
- /**
- * Optional, sets the name of the renderer. Useful for debugging purposes.
- *
- * @param name The name of this renderer, can be null
- */
- abstract void setName(String name);
-
- /**
- * Change the HardwareRenderer's opacity
- */
- abstract void setOpaque(boolean opaque);
-
- /**
- * Creates a hardware renderer using OpenGL.
- *
- * @param translucent True if the surface is translucent, false otherwise
- *
- * @return A hardware renderer backed by OpenGL.
- */
- static HardwareRenderer create(Context context, boolean translucent) {
- HardwareRenderer renderer = null;
- if (DisplayListCanvas.isAvailable()) {
- renderer = new ThreadedRenderer(context, translucent);
- }
- return renderer;
- }
-
- /**
- * Invoke this method when the system is running out of memory. This
- * method will attempt to recover as much memory as possible, based on
- * the specified hint.
- *
- * @param level Hint about the amount of memory that should be trimmed,
- * see {@link android.content.ComponentCallbacks}
- */
- static void trimMemory(int level) {
- ThreadedRenderer.trimMemory(level);
- }
-
- /**
- * Indicates whether hardware acceleration is currently enabled.
- *
- * @return True if hardware acceleration is in use, false otherwise.
- */
- boolean isEnabled() {
- return mEnabled;
- }
-
- /**
- * Indicates whether hardware acceleration is currently enabled.
- *
- * @param enabled True if the hardware renderer is in use, false otherwise.
- */
- void setEnabled(boolean enabled) {
- mEnabled = enabled;
- }
-
- /**
- * Indicates whether hardware acceleration is currently request but not
- * necessarily enabled yet.
- *
- * @return True if requested, false otherwise.
- */
- boolean isRequested() {
- return mRequested;
- }
-
- /**
- * Indicates whether hardware acceleration is currently requested but not
- * necessarily enabled yet.
- *
- * @return True to request hardware acceleration, false otherwise.
- */
- void setRequested(boolean requested) {
- mRequested = requested;
- }
-
- /**
- * Blocks until all previously queued work has completed.
- */
- abstract void fence();
-
- /**
- * Prevents any further drawing until draw() is called. This is a signal
- * that the contents of the RenderNode tree are no longer safe to play back.
- * In practice this usually means that there are Functor pointers in the
- * display list that are no longer valid.
- */
- abstract void stopDrawing();
-
- /**
- * Called by {@link ViewRootImpl} when a new performTraverals is scheduled.
- */
- abstract void notifyFramePending();
-
- abstract void registerAnimatingRenderNode(RenderNode animator);
-}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index bd65532..7a379d50 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -110,11 +110,14 @@
*
* @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.
+ * @param stackId Stack Id to create a new Task with the input task Id on
+ * if the task doesn't exist yet.
* @param taskBounds Bounds to use when creating a new Task with the input task Id if
* the task doesn't exist yet.
* @param config Configuration that is being used with this task.
*/
- void setAppTask(IBinder token, int taskId, in Rect taskBounds, in Configuration config);
+ void setAppTask(
+ IBinder token, int taskId, int stackId, in Rect taskBounds, in Configuration config);
void setAppOrientation(IApplicationToken token, int requestedOrientation);
int getAppOrientation(IApplicationToken token);
void setFocusedApp(IBinder token, boolean moveFocusNow);
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java
index bae51d3..46b9a46 100644
--- a/core/java/android/view/InputDevice.java
+++ b/core/java/android/view/InputDevice.java
@@ -256,6 +256,15 @@
public static final int SOURCE_TOUCH_NAVIGATION = 0x00200000 | SOURCE_CLASS_NONE;
/**
+ * The input source is a rotating encoder device whose motions should be interpreted as akin to
+ * those of a scroll wheel.
+ *
+ * @see #SOURCE_CLASS_NONE
+ * {@hide}
+ */
+ public static final int SOURCE_ROTARY_ENCODER = 0x00400000 | SOURCE_CLASS_NONE;
+
+ /**
* The input source is a joystick.
* (It may also be a {@link #SOURCE_GAMEPAD}).
*
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 6026d04..527d7e5 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -962,6 +962,22 @@
public static final int AXIS_TILT = 25;
/**
+ * Axis constant: Generic scroll axis of a motion event.
+ * <p>
+ * <ul>
+ * <li>Reports the relative movement of the generic scrolling device.
+ * </ul>
+ * </p><p>
+ * This axis should be used for scroll events that are neither strictly vertical nor horizontal.
+ * A good example would be the rotation of a rotary encoder input device.
+ * </p>
+ *
+ * @see #getAxisValue(int, int)
+ * {@hide}
+ */
+ public static final int AXIS_SCROLL = 26;
+
+ /**
* Axis constant: Generic 1 axis of a motion event.
* The interpretation of a generic axis is device-specific.
*
@@ -1171,6 +1187,7 @@
names.append(AXIS_BRAKE, "AXIS_BRAKE");
names.append(AXIS_DISTANCE, "AXIS_DISTANCE");
names.append(AXIS_TILT, "AXIS_TILT");
+ names.append(AXIS_SCROLL, "AXIS_SCROLL");
names.append(AXIS_GENERIC_1, "AXIS_GENERIC_1");
names.append(AXIS_GENERIC_2, "AXIS_GENERIC_2");
names.append(AXIS_GENERIC_3, "AXIS_GENERIC_3");
diff --git a/core/java/android/view/NotificationHeaderView.java b/core/java/android/view/NotificationHeaderView.java
index 82f6c7f..54fa764 100644
--- a/core/java/android/view/NotificationHeaderView.java
+++ b/core/java/android/view/NotificationHeaderView.java
@@ -17,10 +17,10 @@
package android.view;
import android.annotation.Nullable;
-import android.app.Notification;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RemoteViews;
import android.widget.TextView;
@@ -34,14 +34,20 @@
*/
@RemoteViews.RemoteView
public class NotificationHeaderView extends LinearLayout {
+ public static final int NO_COLOR = -1;
private final int mHeaderMinWidth;
+ private final int mExpandTopPadding;
private View mAppName;
private View mSubTextView;
private OnClickListener mExpandClickListener;
private HeaderTouchListener mTouchListener = new HeaderTouchListener();
- private View mExpandButton;
+ private ImageView mExpandButton;
private View mIcon;
private TextView mChildCount;
+ private int mIconColor;
+ private int mOriginalNotificationColor;
+ private boolean mGroupHeader;
+ private boolean mExpanded;
public NotificationHeaderView(Context context) {
this(context, null);
@@ -59,6 +65,7 @@
super(context, attrs, defStyleAttr, defStyleRes);
mHeaderMinWidth = getResources().getDimensionPixelSize(
com.android.internal.R.dimen.notification_header_shrink_min_width);
+ mExpandTopPadding = (int) (1 * getResources().getDisplayMetrics().density);
}
@Override
@@ -66,7 +73,7 @@
super.onFinishInflate();
mAppName = findViewById(com.android.internal.R.id.app_name_text);
mSubTextView = findViewById(com.android.internal.R.id.header_sub_text);
- mExpandButton = findViewById(com.android.internal.R.id.expand_button);
+ mExpandButton = (ImageView) findViewById(com.android.internal.R.id.expand_button);
mIcon = findViewById(com.android.internal.R.id.icon);
mChildCount = (TextView) findViewById(com.android.internal.R.id.number_of_children);
}
@@ -98,7 +105,7 @@
int overFlow = totalWidth - givenWidth;
// We are overflowing, lets shrink
final int appWidth = mAppName.getMeasuredWidth();
- if (appWidth > mHeaderMinWidth) {
+ if (mAppName.getVisibility() != GONE && appWidth > mHeaderMinWidth) {
int newSize = appWidth - Math.min(appWidth - mHeaderMinWidth, overFlow);
int childWidthSpec = MeasureSpec.makeMeasureSpec(newSize, MeasureSpec.AT_MOST);
mAppName.measure(childWidthSpec, wrapContentHeightSpec);
@@ -146,6 +153,57 @@
}
}
+ @RemotableViewMethod
+ public void setOriginalIconColor(int color) {
+ mIconColor = color;
+ }
+
+ public int getOriginalIconColor() {
+ return mIconColor;
+ }
+
+ @RemotableViewMethod
+ public void setOriginalNotificationColor(int color) {
+ mOriginalNotificationColor = color;
+ }
+
+ public int getOriginalNotificationColor() {
+ return mOriginalNotificationColor;
+ }
+
+ public void setIsGroupHeader(boolean isGroupHeader) {
+ mGroupHeader = isGroupHeader;
+ updateExpandButton();
+ }
+
+ @RemotableViewMethod
+ public void setExpanded(boolean expanded) {
+ mExpanded = expanded;
+ updateExpandButton();
+ }
+
+ private void updateExpandButton() {
+ int drawableId;
+ int paddingTop = 0;
+ if (mGroupHeader) {
+ if (mExpanded) {
+ drawableId = com.android.internal.R.drawable.ic_collapse_bundle;
+ } else {
+ drawableId =com.android.internal.R.drawable.ic_expand_bundle;
+ }
+ } else {
+ if (mExpanded) {
+ drawableId = com.android.internal.R.drawable.ic_collapse_notification;
+ } else {
+ drawableId = com.android.internal.R.drawable.ic_expand_notification;
+ }
+ paddingTop = mExpandTopPadding;
+ }
+ mExpandButton.setImageDrawable(getContext().getDrawable(drawableId));
+ mExpandButton.setColorFilter(mOriginalNotificationColor);
+ mExpandButton.setPadding(0, paddingTop, 0, 0);
+ }
+
public class HeaderTouchListener implements View.OnTouchListener {
private final ArrayList<Rect> mTouchRects = new ArrayList<>();
diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java
index b61706e..d2a7d4a 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -16,6 +16,8 @@
package android.view;
+import android.os.UserHandle;
+import android.provider.Settings;
import com.android.internal.util.XmlUtils;
import android.annotation.XmlRes;
@@ -199,9 +201,14 @@
styleIndex = getSystemIconStyleIndex(STYLE_DEFAULT);
}
+ int accessibilityConfig = Settings.Secure.getIntForUser(
+ context.getContentResolver(), Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON,
+ 0, UserHandle.USER_CURRENT);
+ int defStyle = (accessibilityConfig == 1) ?
+ com.android.internal.R.style.LargePointer : com.android.internal.R.style.Pointer;
TypedArray a = context.obtainStyledAttributes(null,
com.android.internal.R.styleable.Pointer,
- com.android.internal.R.attr.pointerStyle, 0);
+ 0, defStyle);
int resourceId = a.getResourceId(styleIndex, -1);
a.recycle();
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
index 304e9c0..f2a4d7b 100644
--- a/core/java/android/view/ThreadedRenderer.java
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -35,6 +35,7 @@
import com.android.internal.R;
+import java.io.File;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -59,8 +60,230 @@
*
* @hide
*/
-public class ThreadedRenderer extends HardwareRenderer {
- private static final String LOGTAG = "ThreadedRenderer";
+public final class ThreadedRenderer {
+ private static final String LOG_TAG = "ThreadedRenderer";
+
+ /**
+ * Name of the file that holds the shaders cache.
+ */
+ 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 hardware rendering profiling.
+ * The default value of this property is assumed to be false.
+ *
+ * When profiling is enabled, the adb shell dumpsys gfxinfo command will
+ * output extra information about the time taken to execute by the last
+ * frames.
+ *
+ * Possible values:
+ * "true", to enable profiling
+ * "visual_bars", to enable profiling and visualize the results on screen
+ * "false", to disable profiling
+ *
+ * @see #PROFILE_PROPERTY_VISUALIZE_BARS
+ *
+ * @hide
+ */
+ public static final String PROFILE_PROPERTY = "debug.hwui.profile";
+
+ /**
+ * Value for {@link #PROFILE_PROPERTY}. When the property is set to this
+ * value, profiling data will be visualized on screen as a bar chart.
+ *
+ * @hide
+ */
+ public static final String PROFILE_PROPERTY_VISUALIZE_BARS = "visual_bars";
+
+ /**
+ * System property used to specify the number of frames to be used
+ * when doing hardware rendering profiling.
+ * The default value of this property is #PROFILE_MAX_FRAMES.
+ *
+ * When profiling is enabled, the adb shell dumpsys gfxinfo command will
+ * output extra information about the time taken to execute by the last
+ * frames.
+ *
+ * Possible values:
+ * "60", to set the limit of frames to 60
+ */
+ static final String PROFILE_MAXFRAMES_PROPERTY = "debug.hwui.profile.maxframes";
+
+ /**
+ * System property used to debug EGL configuration choice.
+ *
+ * Possible values:
+ * "choice", print the chosen configuration only
+ * "all", print all possible configurations
+ */
+ static final String PRINT_CONFIG_PROPERTY = "debug.hwui.print_config";
+
+ /**
+ * Turn on to draw dirty regions every other frame.
+ *
+ * Possible values:
+ * "true", to enable dirty regions debugging
+ * "false", to disable dirty regions debugging
+ *
+ * @hide
+ */
+ public static final String DEBUG_DIRTY_REGIONS_PROPERTY = "debug.hwui.show_dirty_regions";
+
+ /**
+ * Turn on to flash hardware layers when they update.
+ *
+ * Possible values:
+ * "true", to enable hardware layers updates debugging
+ * "false", to disable hardware layers updates debugging
+ *
+ * @hide
+ */
+ public static final String DEBUG_SHOW_LAYERS_UPDATES_PROPERTY =
+ "debug.hwui.show_layers_updates";
+
+ /**
+ * Controls overdraw debugging.
+ *
+ * Possible values:
+ * "false", to disable overdraw debugging
+ * "show", to show overdraw areas on screen
+ * "count", to display an overdraw counter
+ *
+ * @hide
+ */
+ public static final String DEBUG_OVERDRAW_PROPERTY = "debug.hwui.overdraw";
+
+ /**
+ * Value for {@link #DEBUG_OVERDRAW_PROPERTY}. When the property is set to this
+ * value, overdraw will be shown on screen by coloring pixels.
+ *
+ * @hide
+ */
+ public static final String OVERDRAW_PROPERTY_SHOW = "show";
+
+ /**
+ * Turn on to debug non-rectangular clip operations.
+ *
+ * Possible values:
+ * "hide", to disable this debug mode
+ * "highlight", highlight drawing commands tested against a non-rectangular clip
+ * "stencil", renders the clip region on screen when set
+ *
+ * @hide
+ */
+ public static final String DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY =
+ "debug.hwui.show_non_rect_clip";
+
+ /**
+ * A process can set this flag to false to prevent the use of hardware
+ * rendering.
+ *
+ * @hide
+ */
+ public static boolean sRendererDisabled = false;
+
+ /**
+ * Further hardware renderer disabling for the system process.
+ *
+ * @hide
+ */
+ public static boolean sSystemRendererDisabled = false;
+
+ /**
+ * Invoke this method to disable hardware rendering in the current process.
+ *
+ * @hide
+ */
+ public static void disable(boolean system) {
+ sRendererDisabled = true;
+ if (system) {
+ sSystemRendererDisabled = true;
+ }
+ }
+
+ public static boolean sTrimForeground = false;
+
+ /**
+ * Controls whether or not the hardware renderer should aggressively
+ * trim memory. Note that this must not be set for any process that
+ * uses WebView! This should be only used by system_process or similar
+ * that do not go into the background.
+ */
+ public static void enableForegroundTrimming() {
+ sTrimForeground = true;
+ }
+
+ /**
+ * Indicates whether hardware acceleration is available under any form for
+ * the view hierarchy.
+ *
+ * @return True if the view hierarchy can potentially be hardware accelerated,
+ * false otherwise
+ */
+ public static boolean isAvailable() {
+ return DisplayListCanvas.isAvailable();
+ }
+
+ /**
+ * Sets the directory to use as a persistent storage for hardware rendering
+ * resources.
+ *
+ * @param cacheDir A directory the current process can write to
+ *
+ * @hide
+ */
+ public static void setupDiskCache(File cacheDir) {
+ ThreadedRenderer.setupShadersDiskCache(new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath());
+ }
+
+ /**
+ * Creates a hardware renderer using OpenGL.
+ *
+ * @param translucent True if the surface is translucent, false otherwise
+ *
+ * @return A hardware renderer backed by OpenGL.
+ */
+ public static ThreadedRenderer create(Context context, boolean translucent) {
+ ThreadedRenderer renderer = null;
+ if (DisplayListCanvas.isAvailable()) {
+ renderer = new ThreadedRenderer(context, translucent);
+ }
+ return renderer;
+ }
+
+ /**
+ * Invoke this method when the system is running out of memory. This
+ * method will attempt to recover as much memory as possible, based on
+ * the specified hint.
+ *
+ * @param level Hint about the amount of memory that should be trimmed,
+ * see {@link android.content.ComponentCallbacks}
+ */
+ public static void trimMemory(int level) {
+ nTrimMemory(level);
+ }
+
+ public static void overrideProperty(@NonNull String name, @NonNull String value) {
+ if (name == null || value == null) {
+ throw new IllegalArgumentException("name and value must be non-null");
+ }
+ nOverrideProperty(name, value);
+ }
+
+ public static void dumpProfileData(byte[] data, FileDescriptor fd) {
+ nDumpProfileData(data, fd);
+ }
// Keep in sync with DrawFrameTask.h SYNC_* flags
// Nothing interesting to report
@@ -113,6 +336,9 @@
private final Rect mCurrentContentBounds = new Rect();
private final Rect mStagedContentBounds = new Rect();
+ private boolean mEnabled;
+ private boolean mRequested = true;
+
ThreadedRenderer(Context context, boolean translucent) {
final TypedArray a = context.obtainStyledAttributes(null, R.styleable.Lighting, 0, 0);
mLightY = a.getDimension(R.styleable.Lighting_lightY, 0);
@@ -133,13 +359,53 @@
loadSystemProperties();
}
- @Override
+ /**
+ * Destroys the hardware rendering context.
+ */
void destroy() {
mInitialized = false;
updateEnabledState(null);
nDestroy(mNativeProxy);
}
+ /**
+ * Indicates whether hardware acceleration is currently enabled.
+ *
+ * @return True if hardware acceleration is in use, false otherwise.
+ */
+ boolean isEnabled() {
+ return mEnabled;
+ }
+
+ /**
+ * Indicates whether hardware acceleration is currently enabled.
+ *
+ * @param enabled True if the hardware renderer is in use, false otherwise.
+ */
+ void setEnabled(boolean enabled) {
+ mEnabled = enabled;
+ }
+
+ /**
+ * Indicates whether hardware acceleration is currently request but not
+ * necessarily enabled yet.
+ *
+ * @return True if requested, false otherwise.
+ */
+ boolean isRequested() {
+ return mRequested;
+ }
+
+ /**
+ * Indicates whether hardware acceleration is currently requested but not
+ * necessarily enabled yet.
+ *
+ * @return True to request hardware acceleration, false otherwise.
+ */
+ void setRequested(boolean requested) {
+ mRequested = requested;
+ }
+
private void updateEnabledState(Surface surface) {
if (surface == null || !surface.isValid()) {
setEnabled(false);
@@ -148,7 +414,13 @@
}
}
- @Override
+ /**
+ * Initializes the hardware renderer for the specified surface.
+ *
+ * @param surface The surface to hardware accelerate
+ *
+ * @return True if the initialization was successful, false otherwise.
+ */
boolean initialize(Surface surface) throws OutOfResourcesException {
mInitialized = true;
updateEnabledState(surface);
@@ -156,18 +428,61 @@
return status;
}
- @Override
+ /**
+ * Initializes the hardware renderer for the specified surface and setup the
+ * renderer for drawing, if needed. This is invoked when the ViewAncestor has
+ * potentially lost the hardware renderer. The hardware renderer should be
+ * reinitialized and setup when the render {@link #isRequested()} and
+ * {@link #isEnabled()}.
+ *
+ * @param width The width of the drawing surface.
+ * @param height The height of the drawing surface.
+ * @param attachInfo Information about the window.
+ * @param surface The surface to hardware accelerate
+ * @param surfaceInsets The drawing surface insets to apply
+ *
+ * @return true if the surface was initialized, false otherwise. Returning
+ * false might mean that the surface was already initialized.
+ */
+ boolean initializeIfNeeded(int width, int height, View.AttachInfo attachInfo,
+ Surface surface, Rect surfaceInsets) throws OutOfResourcesException {
+ if (isRequested()) {
+ // We lost the gl context, so recreate it.
+ if (!isEnabled()) {
+ if (initialize(surface)) {
+ setup(width, height, attachInfo, surfaceInsets);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Updates the hardware renderer for the specified surface.
+ *
+ * @param surface The surface to hardware accelerate
+ */
void updateSurface(Surface surface) throws OutOfResourcesException {
updateEnabledState(surface);
nUpdateSurface(mNativeProxy, surface);
}
- @Override
+ /**
+ * Stops any rendering into the surface. Use this if it is unclear whether
+ * or not the surface used by the HardwareRenderer will be changing. It
+ * Suspends any rendering into the surface, but will not do any destruction
+ */
boolean pauseSurface(Surface surface) {
return nPauseSurface(mNativeProxy, surface);
}
- @Override
+ /**
+ * Destroys all hardware rendering resources associated with the specified
+ * view hierarchy.
+ *
+ * @param view The root of the view hierarchy
+ */
void destroyHardwareResources(View view) {
destroyResources(view);
nDestroyHardwareResources(mNativeProxy);
@@ -186,17 +501,32 @@
}
}
- @Override
+ /**
+ * This method should be invoked whenever the current hardware renderer
+ * context should be reset.
+ *
+ * @param surface The surface to hardware accelerate
+ */
void invalidate(Surface surface) {
updateSurface(surface);
}
- @Override
+ /**
+ * Detaches the layer's surface texture from the GL context and releases
+ * the texture id
+ */
void detachSurfaceTexture(long hardwareLayer) {
nDetachSurfaceTexture(mNativeProxy, hardwareLayer);
}
- @Override
+ /**
+ * Sets up the renderer for drawing.
+ *
+ * @param width The width of the drawing surface.
+ * @param height The height of the drawing surface.
+ * @param attachInfo Information about the window.
+ * @param surfaceInsets The drawing surface insets to apply
+ */
void setup(int width, int height, AttachInfo attachInfo, Rect surfaceInsets) {
mWidth = width;
mHeight = height;
@@ -226,7 +556,11 @@
setLightCenter(attachInfo);
}
- @Override
+ /**
+ * Updates the light position based on the position of the window.
+ *
+ * @param attachInfo Information about the window.
+ */
void setLightCenter(AttachInfo attachInfo) {
// Adjust light position for window offsets.
final Point displaySize = attachInfo.mPoint;
@@ -237,22 +571,36 @@
nSetLightCenter(mNativeProxy, lightX, lightY, mLightZ);
}
- @Override
+ /**
+ * Change the HardwareRenderer's opacity
+ */
void setOpaque(boolean opaque) {
nSetOpaque(mNativeProxy, opaque && !mHasInsets);
}
- @Override
+ /**
+ * Gets the current width of the surface. This is the width that the surface
+ * was last set to in a call to {@link #setup(int, int, View.AttachInfo, Rect)}.
+ *
+ * @return the current width of the surface
+ */
int getWidth() {
return mWidth;
}
- @Override
+ /**
+ * Gets the current height of the surface. This is the height that the surface
+ * was last set to in a call to {@link #setup(int, int, View.AttachInfo, Rect)}.
+ *
+ * @return the current width of the surface
+ */
int getHeight() {
return mHeight;
}
- @Override
+ /**
+ * Outputs extra debugging information in the specified file descriptor.
+ */
void dumpGfxInfo(PrintWriter pw, FileDescriptor fd, String[] args) {
pw.flush();
int flags = 0;
@@ -269,7 +617,13 @@
nDumpProfileInfo(mNativeProxy, fd, flags);
}
- @Override
+ /**
+ * Loads system properties used by the renderer. This method is invoked
+ * whenever system properties are modified. Implementations can use this
+ * to trigger live updates of the renderer based on properties.
+ *
+ * @return True if a property has changed.
+ */
boolean loadSystemProperties() {
boolean changed = nLoadSystemProperties(mNativeProxy);
if (changed) {
@@ -353,12 +707,44 @@
mStagedContentBounds.set(left, top, right, bottom);
}
- @Override
+ /**
+ * Interface used to receive callbacks whenever a view is drawn by
+ * a hardware renderer instance.
+ */
+ interface HardwareDrawCallbacks {
+ /**
+ * Invoked before a view is drawn by a hardware renderer.
+ * This method can be used to apply transformations to the
+ * canvas but no drawing command should be issued.
+ *
+ * @param canvas The Canvas used to render the view.
+ */
+ void onHardwarePreDraw(DisplayListCanvas canvas);
+
+ /**
+ * Invoked after a view is drawn by a hardware renderer.
+ * It is safe to invoke drawing commands from this method.
+ *
+ * @param canvas The Canvas used to render the view.
+ */
+ void onHardwarePostDraw(DisplayListCanvas canvas);
+ }
+
+ /**
+ * Indicates that the content drawn by HardwareDrawCallbacks needs to
+ * be updated, which will be done by the next call to draw()
+ */
void invalidateRoot() {
mRootNodeNeedsUpdate = true;
}
- @Override
+ /**
+ * Draws the specified view.
+ *
+ * @param view The view to draw.
+ * @param attachInfo AttachInfo tied to the specified view.
+ * @param callbacks Callbacks invoked when drawing happens.
+ */
void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks) {
attachInfo.mIgnoreDirtyState = true;
@@ -409,54 +795,80 @@
nInvokeFunctor(functor, waitForCompletion);
}
- @Override
+ /**
+ * Creates a new hardware layer. A hardware layer built by calling this
+ * method will be treated as a texture layer, instead of as a render target.
+ *
+ * @return A hardware layer
+ */
HardwareLayer createTextureLayer() {
long layer = nCreateTextureLayer(mNativeProxy);
return HardwareLayer.adoptTextureLayer(this, layer);
}
- @Override
+
void buildLayer(RenderNode node) {
nBuildLayer(mNativeProxy, node.getNativeDisplayList());
}
- @Override
+
boolean copyLayerInto(final HardwareLayer layer, final Bitmap bitmap) {
return nCopyLayerInto(mNativeProxy,
layer.getDeferredLayerUpdater(), bitmap);
}
- @Override
+ /**
+ * Indicates that the specified hardware layer needs to be updated
+ * as soon as possible.
+ *
+ * @param layer The hardware layer that needs an update
+ */
void pushLayerUpdate(HardwareLayer layer) {
nPushLayerUpdate(mNativeProxy, layer.getDeferredLayerUpdater());
}
- @Override
+ /**
+ * Tells the HardwareRenderer that the layer is destroyed. The renderer
+ * should remove the layer from any update queues.
+ */
void onLayerDestroyed(HardwareLayer layer) {
nCancelLayerUpdate(mNativeProxy, layer.getDeferredLayerUpdater());
}
- @Override
+ /**
+ * Optional, sets the name of the renderer. Useful for debugging purposes.
+ *
+ * @param name The name of this renderer, can be null
+ */
void setName(String name) {
nSetName(mNativeProxy, name);
}
- @Override
+ /**
+ * Blocks until all previously queued work has completed.
+ */
void fence() {
nFence(mNativeProxy);
}
- @Override
+ /**
+ * Prevents any further drawing until draw() is called. This is a signal
+ * that the contents of the RenderNode tree are no longer safe to play back.
+ * In practice this usually means that there are Functor pointers in the
+ * display list that are no longer valid.
+ */
void stopDrawing() {
nStopDrawing(mNativeProxy);
}
- @Override
+ /**
+ * Called by {@link ViewRootImpl} when a new performTraverals is scheduled.
+ */
public void notifyFramePending() {
nNotifyFramePending(mNativeProxy);
}
- @Override
+
void registerAnimatingRenderNode(RenderNode animator) {
nRegisterAnimatingRenderNode(mRootNode.mNativeRenderNode, animator.mNativeRenderNode);
}
@@ -475,21 +887,6 @@
}
}
- static void trimMemory(int level) {
- nTrimMemory(level);
- }
-
- public static void overrideProperty(@NonNull String name, @NonNull String value) {
- if (name == null || value == null) {
- throw new IllegalArgumentException("name and value must be non-null");
- }
- nOverrideProperty(name, value);
- }
-
- public static void dumpProfileData(byte[] data, FileDescriptor fd) {
- nDumpProfileData(data, fd);
- }
-
private static class ProcessInitializer {
static ProcessInitializer sInstance = new ProcessInitializer();
private static IBinder sProcToken;
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index da66f97..183ccf3 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -83,7 +83,6 @@
import android.view.AccessibilityIterators.CharacterTextSegmentIterator;
import android.view.AccessibilityIterators.WordTextSegmentIterator;
import android.view.AccessibilityIterators.ParagraphTextSegmentIterator;
-import android.view.ViewGroup.LayoutParams;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityEventSource;
import android.view.accessibility.AccessibilityManager;
@@ -580,7 +579,7 @@
* <p>
* Tags may be specified with character sequence values in layout XML as either
* a single tag using the {@link android.R.styleable#View_tag android:tag}
- * attribute or multiple tags using the {@code <tag>} child element:
+ * attribute or multiple tags using the {@code <tag>} child element:
* <pre>
* <View ...
* android:tag="@string/mytag_value" />
@@ -2423,8 +2422,6 @@
* 1 PFLAG3_SCROLL_INDICATOR_END
* 1 PFLAG3_ASSIST_BLOCKED
* 1111111 PFLAG3_POINTER_ICON_MASK
- * 1 PFLAG3_PARTIAL_LAYOUT_REQUESTED
- * 1 PFLAG3_LAYOUT_PARAMS_CHANGED
* |-------|-------|-------|-------|
*/
@@ -2513,7 +2510,6 @@
*/
static final int PFLAG3_SCROLL_INDICATOR_END = 0x2000;
-
/* End of masks for mPrivateFlags3 */
static final int DRAG_MASK = PFLAG2_DRAG_CAN_ACCEPT | PFLAG2_DRAG_HOVERED;
@@ -2652,19 +2648,6 @@
private static final int PFLAG3_POINTER_ICON_VALUE_START = 3 << PFLAG3_POINTER_ICON_LSHIFT;
/**
- * Flag indicating that this view has requested a partial layout and
- * is added to the AttachInfo's list of views that need a partial layout
- * request handled on the next traversal.
- */
- static final int PFLAG3_PARTIAL_LAYOUT_REQUESTED = 0x800000;
-
- /**
- * Flag indicating that this view's LayoutParams have been explicitly changed
- * since the last layout pass.
- */
- static final int PFLAG3_LAYOUT_PARAMS_CHANGED = 0x1000000;
-
- /**
* Always allow a user to over-scroll this view, provided it is a
* view that can scroll.
*
@@ -3057,14 +3040,29 @@
/**
* @hide
*
- * Makes system ui transparent.
+ * Makes navigation bar transparent (but not the status bar).
*/
- public static final int SYSTEM_UI_TRANSPARENT = 0x00008000;
+ public static final int NAVIGATION_BAR_TRANSPARENT = 0x00008000;
+
+ /**
+ * @hide
+ *
+ * Makes status bar transparent (but not the navigation bar).
+ */
+ public static final int STATUS_BAR_TRANSPARENT = 0x0000008;
+
+ /**
+ * @hide
+ *
+ * Makes both status bar and navigation bar transparent.
+ */
+ public static final int SYSTEM_UI_TRANSPARENT = NAVIGATION_BAR_TRANSPARENT
+ | STATUS_BAR_TRANSPARENT;
/**
* @hide
*/
- public static final int PUBLIC_STATUS_BAR_VISIBILITY_MASK = 0x00003FFF;
+ public static final int PUBLIC_STATUS_BAR_VISIBILITY_MASK = 0x00003FF7;
/**
* These are the system UI flags that can be cleared by events outside
@@ -5505,20 +5503,26 @@
}
/**
- * Bring up the context menu for this view.
+ * Shows the context menu for this view.
*
- * @return Whether a context menu was displayed.
+ * @return {@code true} if the context menu was shown, {@code false}
+ * otherwise
+ * @see #showContextMenu(float, float)
*/
public boolean showContextMenu() {
return getParent().showContextMenuForChild(this);
}
/**
- * Bring up the context menu for this view, referring to the item under the specified point.
+ * Shows the context menu for this view anchored to the specified
+ * view-relative coordinate.
*
- * @param x The referenced x coordinate.
- * @param y The referenced y coordinate.
- * @return Whether a context menu was displayed.
+ * @param x the X coordinate in pixels relative to the view to which the
+ * menu should be anchored
+ * @param y the Y coordinate in pixels relative to the view to which the
+ * menu should be anchored
+ * @return {@code true} if the context menu was shown, {@code false}
+ * otherwise
*/
public boolean showContextMenu(float x, float y) {
return getParent().showContextMenuForChild(this, x, y);
@@ -12650,14 +12654,10 @@
* ViewGroup.LayoutParams, and these correspond to the different subclasses
* of ViewGroup that are responsible for arranging their children.
*
- * <p>This method may return null if this View is not attached to a parent
+ * This method may return null if this View is not attached to a parent
* ViewGroup or {@link #setLayoutParams(android.view.ViewGroup.LayoutParams)}
* was not invoked successfully. When a View is attached to a parent
- * ViewGroup, this method must not return null.</p>
- *
- * <p>Callers that modify the returned LayoutParams object should call
- * {@link #setLayoutParams(LayoutParams)} to explicitly inform the view that
- * LayoutParams have changed.</p>
+ * ViewGroup, this method must not return null.
*
* @return The LayoutParams associated with this view, or null if no
* parameters have been set yet
@@ -12674,9 +12674,6 @@
* correspond to the different subclasses of ViewGroup that are responsible
* for arranging their children.
*
- * <p>If the View's existing LayoutParams object as obtained by {@link #getLayoutParams()} is
- * modified, you should call this method to inform the view that it has changed.</p>
- *
* @param params The layout parameters for this view, cannot be null
*/
public void setLayoutParams(ViewGroup.LayoutParams params) {
@@ -12684,7 +12681,6 @@
throw new NullPointerException("Layout parameters cannot be null");
}
mLayoutParams = params;
- mPrivateFlags3 |= PFLAG3_LAYOUT_PARAMS_CHANGED;
resolveLayoutParams();
if (mParent instanceof ViewGroup) {
((ViewGroup) mParent).onSetLayoutParams(this, params);
@@ -13270,7 +13266,7 @@
/**
* @hide
*/
- public HardwareRenderer getHardwareRenderer() {
+ public ThreadedRenderer getHardwareRenderer() {
return mAttachInfo != null ? mAttachInfo.mHardwareRenderer : null;
}
@@ -14360,12 +14356,7 @@
mParent.requestTransparentRegion(this);
}
- if ((mPrivateFlags & PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH) != 0) {
- initialAwakenScrollBars();
- mPrivateFlags &= ~PFLAG_AWAKEN_SCROLL_BARS_ON_ATTACH;
- }
-
- mPrivateFlags3 &= ~(PFLAG3_IS_LAID_OUT | PFLAG3_PARTIAL_LAYOUT_REQUESTED);
+ mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
jumpDrawablesToCurrentState();
@@ -14703,13 +14694,8 @@
*/
@CallSuper
protected void onDetachedFromWindowInternal() {
- if (mAttachInfo != null && isPartialLayoutRequested()) {
- mAttachInfo.mPartialLayoutViews.remove(this);
- }
-
mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
- mPrivateFlags3 &= ~(PFLAG3_IS_LAID_OUT | PFLAG3_PARTIAL_LAYOUT_REQUESTED
- | PFLAG3_LAYOUT_PARAMS_CHANGED);
+ mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
removeUnsetPressCallback();
removeLongPressCallback();
@@ -16896,32 +16882,6 @@
}
/**
- * Indicates whether or not this view has requested a partial layout that
- * may not affect its size or position within its parent. This state will be reset
- * the next time this view is laid out.
- *
- * @return true if partial layout has been requested
- */
- public final boolean isPartialLayoutRequested() {
- return (mPrivateFlags3 & PFLAG3_PARTIAL_LAYOUT_REQUESTED)
- == PFLAG3_PARTIAL_LAYOUT_REQUESTED;
- }
-
- /**
- * Returns true if this view's {@link ViewGroup.LayoutParams LayoutParams} changed
- * since the last time this view was successfully laid out. Typically this happens as a
- * result of a call to {@link #setLayoutParams(LayoutParams)}.
- *
- * @return true if this view's LayoutParams changed since last layout.
- */
- public final boolean didLayoutParamsChange() {
- if (sLayoutParamsAlwaysChanged) {
- return true;
- }
- return (mPrivateFlags3 & PFLAG3_LAYOUT_PARAMS_CHANGED) == PFLAG3_LAYOUT_PARAMS_CHANGED;
- }
-
- /**
* Return true if o is a ViewGroup that is laying out using optical bounds.
* @hide
*/
@@ -16978,7 +16938,6 @@
if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {
onLayout(changed, l, t, r, b);
mPrivateFlags &= ~PFLAG_LAYOUT_REQUIRED;
- mPrivateFlags3 &= ~PFLAG3_LAYOUT_PARAMS_CHANGED;
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnLayoutChangeListeners != null) {
@@ -16992,7 +16951,6 @@
}
mPrivateFlags &= ~PFLAG_FORCE_LAYOUT;
- mPrivateFlags3 &= ~PFLAG3_PARTIAL_LAYOUT_REQUESTED;
mPrivateFlags3 |= PFLAG3_IS_LAID_OUT;
}
@@ -17436,7 +17394,7 @@
if (hasWindowFocus()) viewStateIndex |= StateSet.VIEW_STATE_WINDOW_FOCUSED;
if ((privateFlags & PFLAG_ACTIVATED) != 0) viewStateIndex |= StateSet.VIEW_STATE_ACTIVATED;
if (mAttachInfo != null && mAttachInfo.mHardwareAccelerationRequested &&
- HardwareRenderer.isAvailable()) {
+ ThreadedRenderer.isAvailable()) {
// This is set if HW acceleration is requested, even if the current
// process doesn't allow it. This is just to allow app preview
// windows to better match their app.
@@ -18551,15 +18509,15 @@
* must be an array of two integers. After the method returns, the array
* contains the x and y location in that order.</p>
*
- * @param location an array of two integers in which to hold the coordinates
+ * @param outLocation an array of two integers in which to hold the coordinates
*/
- public void getLocationOnScreen(@Size(2) int[] location) {
- getLocationInWindow(location);
+ public void getLocationOnScreen(@Size(2) int[] outLocation) {
+ getLocationInWindow(outLocation);
final AttachInfo info = mAttachInfo;
if (info != null) {
- location[0] += info.mWindowLeft;
- location[1] += info.mWindowTop;
+ outLocation[0] += info.mWindowLeft;
+ outLocation[1] += info.mWindowTop;
}
}
@@ -18568,13 +18526,17 @@
* must be an array of two integers. After the method returns, the array
* contains the x and y location in that order.</p>
*
- * @param outWindowSpace an array of two integers in which to hold the coordinates
+ * @param outLocation an array of two integers in which to hold the coordinates
*/
- public void getLocationInWindow(@Size(2) int[] outWindowSpace) {
- outWindowSpace[0] = 0;
- outWindowSpace[1] = 0;
+ public void getLocationInWindow(@Size(2) int[] outLocation) {
+ if (outLocation == null || outLocation.length < 2) {
+ throw new IllegalArgumentException("outLocation must be an array of two integers");
+ }
- transformFromViewToWindowSpace(outWindowSpace);
+ outLocation[0] = 0;
+ outLocation[1] = 0;
+
+ transformFromViewToWindowSpace(outLocation);
}
void transformFromViewToWindowSpace(@Size(2) int[] inOutLocation) {
@@ -19086,7 +19048,7 @@
mPrivateFlags |= PFLAG_INVALIDATED;
if (mParent != null && !mParent.isLayoutRequested()) {
- mParent.requestLayoutForChild(this);
+ mParent.requestLayout();
}
if (mAttachInfo != null && mAttachInfo.mViewRequestingLayout == this) {
mAttachInfo.mViewRequestingLayout = null;
@@ -19105,11 +19067,6 @@
mPrivateFlags |= PFLAG_INVALIDATED;
}
- void forcePartialLayout() {
- forceLayout();
- mPrivateFlags3 |= PFLAG3_PARTIAL_LAYOUT_REQUESTED;
- }
-
/**
* <p>
* This is called to find out how big a view should be. The parent
@@ -21996,7 +21953,6 @@
interface Callbacks {
void playSoundEffect(int effectId);
boolean performHapticFeedback(int effectId, boolean always);
- void schedulePartialLayout();
}
/**
@@ -22054,7 +22010,7 @@
boolean mHardwareAccelerated;
boolean mHardwareAccelerationRequested;
- HardwareRenderer mHardwareRenderer;
+ ThreadedRenderer mHardwareRenderer;
List<RenderNode> mPendingAnimatingRenderNodes;
/**
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 11df9a3..0f7d296 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -60,8 +60,6 @@
import java.util.List;
import java.util.Map;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
/**
* <p>
@@ -5531,172 +5529,6 @@
int l, int t, int r, int b);
/**
- * {@inheritDoc}
- *
- * <p>Most subclasses should not need to override this method. The default implementation
- * will call {@link #findDependentLayoutAxes(View, int)} to determine how
- * to optimally proceed. If neither horizontal nor vertical layout depends on the given
- * child, this method will call {@link #requestPartialLayoutForChild(View)}. If one or both
- * do, it will call {@link #requestLayout()}.</p>
- *
- * @param child Child requesting a layout
- */
- @Override
- public void requestLayoutForChild(View child) {
- if (child == null || child.getParent() != this) {
- throw new IllegalArgumentException(
- "child parameter must be a direct child view of this ViewGroup");
- }
-
- // If we don't have a parent ourselves, record that we need a full layout.
- // Our whole subtree is detached.
- final ViewParent parent = getParent();
- if (parent == null) {
- requestLayout();
- return;
- }
-
- // We can optimize the layout request for this child into a partial layout
- // if the child has already been laid out at least once and neither horizontal nor
- // vertical layout within ourselves is dependent on pending layout changes within
- // this child. Otherwise we need to request a full layout for ourselves and continue
- // to recurse up the view hierarchy.
- if (child.isLaidOut() && findDependentLayoutAxes(child, FLAG_LAYOUT_AXIS_ANY) == 0) {
- requestPartialLayoutForChild(child);
- } else {
- requestLayout();
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * <p>The default implementation returns {@link #FLAG_LAYOUT_AXIS_ANY}.
- * Optimized implementations for specific ViewGroup subclasses may check if the child's
- * {@link View#didLayoutParamsChange() LayoutParams changed} and in what ways.</p>
- *
- * @param child Direct child of this ViewParent to check
- * @param axisFilter Which axes to check for dependencies. Can be
- * {@link #FLAG_LAYOUT_AXIS_HORIZONTAL}, {@link #FLAG_LAYOUT_AXIS_VERTICAL}
- * or {@link #FLAG_LAYOUT_AXIS_ANY}.
- * @return Axes of this ViewParent that depend on the given child's layout changes
- */
- @Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- return FLAG_LAYOUT_AXIS_ANY;
- }
-
- /**
- * This is a helper implementation for {@link #findDependentLayoutAxes(View, int)} that
- * is not the default implementation in ViewGroup. This is to preserve compatibility with
- * existing app-side ViewGroup subclasses that existed before the partial layout system was
- * added to Android. It explicitly checks that the LayoutParams of the child are of the
- * expected type so that subclasses of standard framework layouts do not erroneously
- * start believing that it's safe to do a partial layout when that assertion can't
- * reasonably be confirmed.
- *
- * <p>If you're reading this as an author of a custom ViewGroup's findDependentLayoutAxes
- * method you might be frustrated to discover that it is not a part of the Android public API.
- * Many ViewGroup implementations will need to make small but important modifications
- * to an implementation like this one in order to be correct. Instead of encouraging
- * view authors to call this method, then make their own redundant recursive calls to
- * <code>getParent().findDependentLayoutAxes(...)</code> in addition to the one
- * that can happen here, this method is hidden and only used internally.</p>
- *
- * <p>Do feel free to copy this implementation and adapt it to suit your own purposes.</p>
- *
- * @hide
- */
- protected final int findDependentLayoutAxesHelper(View child, int axisFilter,
- Class<?> layoutParamsClass) {
- if (!checkPartialLayoutParams(child, layoutParamsClass)) return axisFilter;
- if (child.didLayoutParamsChange()) {
- // Anything could have changed about our previous assumptions.
- return axisFilter;
- }
-
- final LayoutParams lp = child.getLayoutParams();
-
- // Our layout can always end up depending on a WRAP_CONTENT child.
- final int wrapAxisFilter = ((lp.width == WRAP_CONTENT ? FLAG_LAYOUT_AXIS_HORIZONTAL : 0)
- | (lp.height == WRAP_CONTENT ? FLAG_LAYOUT_AXIS_VERTICAL : 0)) & axisFilter;
-
- if (wrapAxisFilter == axisFilter) {
- // We know all queried axes are affected, just return early.
- return wrapAxisFilter;
- }
-
- // Our layout *may* depend on a MATCH_PARENT child, depending on whether we can determine
- // that our layout will remain stable within our parent. We need to ask.
- final int matchAxisFilter = ((lp.width == MATCH_PARENT ? FLAG_LAYOUT_AXIS_HORIZONTAL : 0)
- | (lp.height == MATCH_PARENT ? FLAG_LAYOUT_AXIS_VERTICAL : 0)) & axisFilter;
-
- if (matchAxisFilter != 0) {
- final ViewParent parent = getParent();
- if (parent != null) {
- // If our parent depends on us for an axis, then our layout can also be affected
- // by a MATCH_PARENT child along that axis.
- return getParent().findDependentLayoutAxes(this, matchAxisFilter)
- | wrapAxisFilter;
- }
-
- // If we don't have a parent, assume we're affected
- // in any determined affected direction.
- return matchAxisFilter | wrapAxisFilter;
- }
-
- // Two exact sizes and LayoutParams didn't change. We're safe.
- return 0;
- }
-
- /**
- * Throw an IllegalArgumentException if the supplied view is not a direct child of
- * this ViewGroup and return false if this view's LayoutParams is not of class lpClass.
- * Implementations of {@link ViewGroup#findDependentLayoutAxes(View, int)} use this
- * to check input parameters and defensively return the full axis filter mask themselves
- * if the LayoutParams class is not of the exact expected type; e.g. it is a subclass
- * of one of the standard framework layouts and we can't make assumptions.
- * @hide
- */
- protected final boolean checkPartialLayoutParams(View child, Class<?> lpClass) {
- if (child.getParent() != this) {
- throw new IllegalArgumentException("View " + child
- + " is not a direct child of " + this);
- }
- final ViewGroup.LayoutParams lp = child.getLayoutParams();
- return lp != null || lp.getClass() == lpClass;
- }
-
- /**
- * Called when a child of this ViewParent requires a relayout before the next frame
- * is drawn, but the caller can guarantee that the size of the child will not change
- * during a measure and layout pass.
- *
- * <p>A call to this method will schedule a partial layout for the supplied view as long as
- * it is a direct child of this ViewGroup and this ViewGroup is attached to a window.
- * On the next scheduled view hierarchy traversal the given child view will be re-measured
- * at its current measured size and re-laid out at its current position within its parent.</p>
- *
- * @param child Child that requires a partial layout
- */
- public void requestPartialLayoutForChild(View child) {
- if (!child.isPartialLayoutRequested()) {
- child.forcePartialLayout();
- if (mAttachInfo != null) {
- final List<View> partialLayoutViews = mAttachInfo.mPartialLayoutViews;
- final boolean schedule = partialLayoutViews.isEmpty();
- partialLayoutViews.add(child);
- if (schedule) {
- mAttachInfo.mRootCallbacks.schedulePartialLayout();
- }
- child.invalidate();
- } else {
- requestLayout();
- }
- }
- }
-
- /**
* Indicates whether the view group has the ability to animate its children
* after the first layout.
*
@@ -6042,7 +5874,7 @@
* of its descendants
*/
protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
- return new LayoutParams(p);
+ return p;
}
/**
diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java
index 6ae448a..e9b123b5 100644
--- a/core/java/android/view/ViewParent.java
+++ b/core/java/android/view/ViewParent.java
@@ -26,11 +26,6 @@
*
*/
public interface ViewParent {
- public static final int FLAG_LAYOUT_AXIS_HORIZONTAL = 1;
- public static final int FLAG_LAYOUT_AXIS_VERTICAL = 2;
- public static final int FLAG_LAYOUT_AXIS_ANY
- = FLAG_LAYOUT_AXIS_HORIZONTAL | FLAG_LAYOUT_AXIS_VERTICAL;
-
/**
* Called when something has changed which has invalidated the layout of a
* child of this view parent. This will schedule a layout pass of the view
@@ -174,26 +169,38 @@
public void focusableViewAvailable(View v);
/**
- * Bring up a context menu for the specified view or its ancestors.
- *
- * <p>In most cases, a subclass does not need to override this. However, if
+ * Shows the context menu for the specified view or its ancestors.
+ * <p>
+ * In most cases, a subclass does not need to override this. However, if
* the subclass is added directly to the window manager (for example,
* {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)})
- * then it should override this and show the context menu.</p>
- *
- * @param originalView The source view where the context menu was first invoked
- * @return true if a context menu was displayed
+ * then it should override this and show the context menu.
+ *
+ * @param originalView the source view where the context menu was first
+ * invoked
+ * @return {@code true} if the context menu was shown, {@code false}
+ * otherwise
+ * @see #showContextMenuForChild(View, float, float)
*/
public boolean showContextMenuForChild(View originalView);
/**
- * Bring up a context menu for the specified view at the given x/y offset from
- * the top left corner.
+ * Shows the context menu for the specified view or its ancestors anchored
+ * to the specified view-relative coordinate.
+ * <p>
+ * In most cases, a subclass does not need to override this. However, if
+ * the subclass is added directly to the window manager (for example,
+ * {@link ViewManager#addView(View, android.view.ViewGroup.LayoutParams)})
+ * then it should override this and show the context menu.
*
- * @param originalView
- * @param x The x offset at which to open the menu
- * @param y The y offset at which to open the menu
- * @return true if a context menu was displayed
+ * @param originalView the source view where the context menu was first
+ * invoked
+ * @param x the X coordinate in pixels relative to the original view to
+ * which the menu should be anchored
+ * @param y the Y coordinate in pixels relative to the original view to
+ * which the menu should be anchored
+ * @return {@code true} if the context menu was shown, {@code false}
+ * otherwise
*/
public boolean showContextMenuForChild(View originalView, float x, float y);
@@ -606,48 +613,4 @@
* @return true if the action was consumed by this ViewParent
*/
public boolean onNestedPrePerformAccessibilityAction(View target, int action, Bundle arguments);
-
- /**
- * Called when a child of this ViewParent requires a relayout before
- * the next frame is drawn. A call to {@link View#requestLayout() child.requestLayout()}
- * will implicitly result in a call to
- * <code>child.getParent().requestLayoutForChild(child)</code>. App code should not call this
- * method directly. Call <code>child.requestLayout()</code> instead.
- *
- * <p>On versions of Android from API 23 and older, a call to {@link View#requestLayout()}
- * would cause a matching call to <code>requestLayout</code> on each parent view up to
- * the root. With the addition of <code>requestLayoutForChild</code> a view's parent may
- * explicitly decide how to handle a layout request. This allows for optimizations when
- * a view parent knows that a layout-altering change in a child will not affect its own
- * measurement.</p>
- *
- * @param child Child requesting a layout
- */
- public void requestLayoutForChild(View child);
-
- /**
- * Determine which axes of this ViewParent's layout are dependent on the given
- * direct child view. The returned value is a flag set that may contain
- * {@link #FLAG_LAYOUT_AXIS_HORIZONTAL} and/or {@link #FLAG_LAYOUT_AXIS_VERTICAL}.
- * {@link #FLAG_LAYOUT_AXIS_ANY} is provided as a shortcut for
- * <code>FLAG_LAYOUT_AXIS_HORIZONTAL | FLAG_LAYOUT_AXIS_VERTICAL</code>.
- *
- * <p>The given child must be a direct child view. Implementations should throw
- * {@link IllegalArgumentException} otherwise.</p>
- *
- * <p>The caller may specify which axes it cares about. This should be treated as a filter.
- * Implementations should never return a result that would be different from
- * <code>result & axisFilter</code>.</p>
- *
- * @param child Direct child of this ViewParent to check
- * @param axisFilter Which axes to check for dependencies. Can be
- * {@link #FLAG_LAYOUT_AXIS_HORIZONTAL}, {@link #FLAG_LAYOUT_AXIS_VERTICAL}
- * or {@link #FLAG_LAYOUT_AXIS_ANY}.
- * @return Axes of this ViewParent that depend on the given child's layout changes
- *
- * @see #FLAG_LAYOUT_AXIS_HORIZONTAL
- * @see #FLAG_LAYOUT_AXIS_VERTICAL
- * @see #FLAG_LAYOUT_AXIS_ANY
- */
- public int findDependentLayoutAxes(View child, int axisFilter);
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 3c9310d..12cf66e 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -91,7 +91,6 @@
import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.HashSet;
-import java.util.List;
/**
* The top of a view hierarchy, implementing the needed protocol between View
@@ -102,7 +101,7 @@
*/
@SuppressWarnings({"EmptyCatchBlock", "PointlessBooleanExpression"})
public final class ViewRootImpl implements ViewParent,
- View.AttachInfo.Callbacks, HardwareRenderer.HardwareDrawCallbacks {
+ View.AttachInfo.Callbacks, ThreadedRenderer.HardwareDrawCallbacks {
private static final String TAG = "ViewRootImpl";
private static final boolean DBG = false;
private static final boolean LOCAL_LOGV = false;
@@ -761,7 +760,7 @@
(attrs.flags & WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED) != 0;
if (hardwareAccelerated) {
- if (!HardwareRenderer.isAvailable()) {
+ if (!ThreadedRenderer.isAvailable()) {
return;
}
@@ -784,8 +783,8 @@
// shows for launching applications, so they will look more like
// the app being launched.
mAttachInfo.mHardwareAccelerationRequested = true;
- } else if (!HardwareRenderer.sRendererDisabled
- || (HardwareRenderer.sSystemRendererDisabled && forceHwAccelerated)) {
+ } else if (!ThreadedRenderer.sRendererDisabled
+ || (ThreadedRenderer.sSystemRendererDisabled && forceHwAccelerated)) {
if (mAttachInfo.mHardwareRenderer != null) {
mAttachInfo.mHardwareRenderer.destroy();
}
@@ -794,7 +793,7 @@
final boolean hasSurfaceInsets = insets.left != 0 || insets.right != 0
|| insets.top != 0 || insets.bottom != 0;
final boolean translucent = attrs.format != PixelFormat.OPAQUE || hasSurfaceInsets;
- mAttachInfo.mHardwareRenderer = HardwareRenderer.create(mContext, translucent);
+ mAttachInfo.mHardwareRenderer = ThreadedRenderer.create(mContext, translucent);
if (mAttachInfo.mHardwareRenderer != null) {
mAttachInfo.mHardwareRenderer.setName(attrs.getTitle().toString());
mAttachInfo.mHardwareAccelerated =
@@ -953,25 +952,6 @@
}
@Override
- public void requestLayoutForChild(View child) {
- requestLayout();
- }
-
- @Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- if (child != mView) {
- return 0;
- }
-
- final WindowManager.LayoutParams lp = (WindowManager.LayoutParams) child.getLayoutParams();
- final int horizontal = (lp.width == WindowManager.LayoutParams.WRAP_CONTENT
- || lp.horizontalWeight != 0) ? FLAG_LAYOUT_AXIS_HORIZONTAL : 0;
- final int vertical = (lp.height == WindowManager.LayoutParams.WRAP_CONTENT
- || lp.verticalWeight != 0) ? FLAG_LAYOUT_AXIS_VERTICAL : 0;
- return (horizontal | vertical) & axisFilter;
- }
-
- @Override
public boolean isLayoutRequested() {
return mLayoutRequested;
}
@@ -1115,10 +1095,6 @@
}
}
- public void schedulePartialLayout() {
- scheduleTraversals();
- }
-
/**
* Notifies the HardwareRenderer that a new frame will be coming soon.
* Currently only {@link ThreadedRenderer} cares about this, and uses
@@ -1865,7 +1841,7 @@
}
}
- final HardwareRenderer hardwareRenderer = mAttachInfo.mHardwareRenderer;
+ final ThreadedRenderer hardwareRenderer = mAttachInfo.mHardwareRenderer;
if (hardwareRenderer != null && hardwareRenderer.isEnabled()) {
if (hwInitialized
|| mWidth != hardwareRenderer.getWidth()
@@ -1958,60 +1934,7 @@
|| mAttachInfo.mRecomputeGlobalAttributes;
if (didLayout) {
performLayout(lp, desiredWindowWidth, desiredWindowHeight);
- }
- /*
- * Handle partial layouts.
- *
- * Views that have requested partial layouts will not change size or position
- * within their parent view, therefore we will re-measure and re-layout each one
- * after any regularly scheduled layout pass. Any view that already had its
- * isLayoutRequested bit cleared will be skipped, since this means the view has already
- * been measured and laid out on this traversal pass naturally. Views won't be added
- * to this list if layout was already requested when a partial layout is requested
- * for a view, so there should not be duplicates in the list.
- */
- final List<View> partialLayoutViews = mAttachInfo.mPartialLayoutViews;
- final boolean didPartialLayout;
- if (!partialLayoutViews.isEmpty()) {
- // Measurement or layout of views may result in changes to the list
- // of partial-layout views. Swap in an "empty" list to prevent
- // concurrent modification of the list being traversed.
- if (mAttachInfo.mEmptyPartialLayoutViews == null) {
- mAttachInfo.mPartialLayoutViews = new ArrayList<>();
- } else {
- mAttachInfo.mPartialLayoutViews = mAttachInfo.mEmptyPartialLayoutViews;
- }
-
- final int count = partialLayoutViews.size();
- mInLayout = true;
- for (int i = 0; i < count; i++) {
- final View view = partialLayoutViews.get(i);
-
- // Make sure the view is still attached and that it still has layout requested.
- // We might have already serviced the layout request through the standard full-tree
- // layout pass above or even through a previous partial layout view in this list.
- if (view.isAttachedToWindow() && view.isLayoutRequested()) {
- final int widthSpec = MeasureSpec.makeMeasureSpec(view.getMeasuredWidth(),
- MeasureSpec.EXACTLY);
- final int heightSpec = MeasureSpec.makeMeasureSpec(view.getMeasuredHeight(),
- MeasureSpec.EXACTLY);
- view.measure(widthSpec, heightSpec);
- view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
- }
- }
- mInLayout = false;
- didPartialLayout = true;
- triggerGlobalLayoutListener = true;
-
- // The traversal list becomes the new empty list.
- partialLayoutViews.clear();
- mAttachInfo.mEmptyPartialLayoutViews = partialLayoutViews;
- } else {
- didPartialLayout = false;
- }
-
- if (didLayout || didPartialLayout) {
// By this point all views have been sized and positioned
// We can compute the transparent area
@@ -2041,7 +1964,7 @@
if (DBG) {
System.out.println("======================================");
- System.out.println("performTraversals -- after performLayout/partial layout");
+ System.out.println("performTraversals -- after setFrame");
host.debug();
}
}
@@ -5733,7 +5656,7 @@
}
private void destroyHardwareRenderer() {
- HardwareRenderer hardwareRenderer = mAttachInfo.mHardwareRenderer;
+ ThreadedRenderer hardwareRenderer = mAttachInfo.mHardwareRenderer;
if (hardwareRenderer != null) {
if (mView != null) {
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 3c4d45a..53490b4 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -29,6 +29,7 @@
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.PixelFormat;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.media.session.MediaController;
import android.net.Uri;
@@ -247,12 +248,30 @@
private static final String PROPERTY_HARDWARE_UI = "persist.sys.ui.hw";
+ /**
+ * Flag for letting the theme drive the color of the window caption controls. Use with
+ * {@link #setDecorCaptionShade(int)}. This is the default value.
+ */
+ public static final int DECOR_CAPTION_SHADE_AUTO = 0;
+ /**
+ * Flag for setting light-color controls on the window caption. Use with
+ * {@link #setDecorCaptionShade(int)}.
+ */
+ public static final int DECOR_CAPTION_SHADE_LIGHT = 1;
+ /**
+ * Flag for setting dark-color controls on the window caption. Use with
+ * {@link #setDecorCaptionShade(int)}.
+ */
+ public static final int DECOR_CAPTION_SHADE_DARK = 2;
+
private final Context mContext;
private TypedArray mWindowStyle;
private Callback mCallback;
private OnWindowDismissedCallback mOnWindowDismissedCallback;
private WindowControllerCallback mWindowControllerCallback;
+ private RestrictedCaptionAreaListener mRestrictedCaptionAreaListener;
+ private Rect mRestrictedCaptionAreaRect;
private WindowManager mWindowManager;
private IBinder mAppToken;
private String mAppName;
@@ -565,6 +584,18 @@
int getWindowStackId() throws RemoteException;
}
+ /**
+ * Callback for clients that want to be aware of where caption draws content.
+ */
+ public interface RestrictedCaptionAreaListener {
+ /**
+ * Called when the area where caption draws content changes.
+ *
+ * @param rect The area where caption content is positioned, relative to the top view.
+ */
+ void onRestrictedCaptionAreaChanged(Rect rect);
+ }
+
public Window(Context context) {
mContext = context;
mFeatures = mLocalFeatures = getDefaultFeatures(context);
@@ -778,6 +809,16 @@
}
/**
+ * Set a callback for changes of area where caption will draw its content.
+ *
+ * @param listener Callback that will be called when the area changes.
+ */
+ public final void setRestrictedCaptionAreaListener(RestrictedCaptionAreaListener listener) {
+ mRestrictedCaptionAreaListener = listener;
+ mRestrictedCaptionAreaRect = listener != null ? new Rect() : null;
+ }
+
+ /**
* Take ownership of this window's surface. The window's view hierarchy
* will no longer draw into the surface, though it will otherwise continue
* to operate (such as for receiving input events). The given SurfaceHolder
@@ -1158,27 +1199,6 @@
public abstract void setContentView(View view);
/**
- * Install a view in the decoration (title) area, to be shown when
- * the window is in multi-window mode. This view will be placed
- * next to the window controls.
- *
- * The view may be restored to defaults by passing null.
- *
- * @param view The desired view to display in window decorations.
- */
- public abstract void setDecorView(View view);
-
- /**
- * Convenience for
- * {@link #setDecorView(View)}
- * to set the custom window decoration from a layout resource. The layout will be inflated
- * adding all top level views to the decoration
- *
- * @param layoutResID Resource ID to be inflated.
- */
- public abstract void setDecorView(@LayoutRes int layoutResID);
-
- /**
* Set the screen content to an explicit view. This view is placed
* directly into the screen's view hierarchy. It can itself be a complex
* view hierarchy.
@@ -2060,4 +2080,30 @@
public boolean getOverlayDecorCaption() {
return mOverlayWithDecorCaption;
}
+
+ /** @hide */
+ public void notifyRestrictedCaptionAreaCallback(int left, int top, int right, int bottom) {
+ if (mRestrictedCaptionAreaListener != null) {
+ mRestrictedCaptionAreaRect.set(left, top, right, bottom);
+ mRestrictedCaptionAreaListener.onRestrictedCaptionAreaChanged(
+ mRestrictedCaptionAreaRect);
+ }
+ }
+
+ /**
+ * Set what color should the caption controls be. By default the system will try to determine
+ * the color from the theme. You can overwrite this by using {@link #DECOR_CAPTION_SHADE_DARK}
+ * or {@link #DECOR_CAPTION_SHADE_DARK}.
+ */
+ public abstract void setDecorCaptionShade(int decorCaptionShade);
+
+ /**
+ * Set the drawable that is drawn underneath the caption during the resizing.
+ *
+ * During the resizing the caption might not be drawn fast enough to match the new dimensions.
+ * There is a second caption drawn underneath it that will be fast enough. By default the
+ * caption is constructed from the theme. You can provide a drawable, that will be drawn instead
+ * to better match your application.
+ */
+ public abstract void setResizingCaptionDrawable(Drawable drawable);
}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 1521f2e..d6bc27c 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -238,6 +238,7 @@
@ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION, to = "TYPE_VOICE_INTERACTION"),
@ViewDebug.IntToString(from = TYPE_VOICE_INTERACTION_STARTING, to = "TYPE_VOICE_INTERACTION_STARTING"),
@ViewDebug.IntToString(from = TYPE_DOCK_DIVIDER, to = "TYPE_DOCK_DIVIDER"),
+ @ViewDebug.IntToString(from = TYPE_QS_DIALOG, to = "TYPE_QS_DIALOG"),
})
public int type;
@@ -584,6 +585,13 @@
public static final int TYPE_DOCK_DIVIDER = FIRST_SYSTEM_WINDOW+34;
/**
+ * Window type: like {@link #TYPE_APPLICATION_ATTACHED_DIALOG}, but used
+ * by Quick Settings Tiles.
+ * @hide
+ */
+ public static final int TYPE_QS_DIALOG = FIRST_SYSTEM_WINDOW+35;
+
+ /**
* End of types of system windows.
*/
public static final int LAST_SYSTEM_WINDOW = 2999;
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index c08e1b5..8c68e92 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -425,7 +425,7 @@
mDyingViews.remove(view);
}
}
- if (HardwareRenderer.sTrimForeground && HardwareRenderer.isAvailable()) {
+ if (ThreadedRenderer.sTrimForeground && ThreadedRenderer.isAvailable()) {
doTrimForeground();
}
}
@@ -452,7 +452,7 @@
}
public void trimMemory(int level) {
- if (HardwareRenderer.isAvailable()) {
+ if (ThreadedRenderer.isAvailable()) {
if (shouldDestroyEglContext(level)) {
// Destroy all hardware surfaces and resources associated to
// known windows
@@ -465,16 +465,16 @@
level = ComponentCallbacks2.TRIM_MEMORY_COMPLETE;
}
- HardwareRenderer.trimMemory(level);
+ ThreadedRenderer.trimMemory(level);
- if (HardwareRenderer.sTrimForeground) {
+ if (ThreadedRenderer.sTrimForeground) {
doTrimForeground();
}
}
}
public static void trimForeground() {
- if (HardwareRenderer.sTrimForeground && HardwareRenderer.isAvailable()) {
+ if (ThreadedRenderer.sTrimForeground && ThreadedRenderer.isAvailable()) {
WindowManagerGlobal wm = WindowManagerGlobal.getInstance();
wm.doTrimForeground();
}
@@ -494,7 +494,7 @@
}
}
if (!hasVisibleWindows) {
- HardwareRenderer.trimMemory(
+ ThreadedRenderer.trimMemory(
ComponentCallbacks2.TRIM_MEMORY_COMPLETE);
}
}
@@ -513,7 +513,7 @@
String name = getWindowName(root);
pw.printf("\n\t%s (visibility=%d)", name, root.getHostVisibility());
- HardwareRenderer renderer =
+ ThreadedRenderer renderer =
root.getView().mAttachInfo.mHardwareRenderer;
if (renderer != null) {
renderer.dumpGfxInfo(pw, fd, args);
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 7e45bbb..b1a8479 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -431,6 +431,11 @@
public int getLidState();
/**
+ * Lock the device now.
+ */
+ public void lockDeviceNow();
+
+ /**
* Returns a code that descripbes whether the camera lens is covered or not.
*/
public int getCameraLensCoverState();
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index 6130fd5..3ff9522 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -21,6 +21,7 @@
import android.os.Parcelable;
import android.text.InputType;
import android.text.TextUtils;
+import android.util.LocaleList;
import android.util.Printer;
/**
@@ -340,6 +341,22 @@
public Bundle extras;
/**
+ * Additional context information that tells what languages are expected by the user.
+ *
+ * <p><strong>IME authors:</strong> Possible use cases for IME developers would be:</p>
+ * <ul>
+ * <li>Automatically switching keyboard layout.</li>
+ * <li>Changing language model for better typing experience.</li>
+ * </ul>
+ *
+ * <p><strong>Editor authors:</strong> Providing this context information can help IMEs to
+ * improve text input experience. For example, chat applications can remember what language is
+ * used in the last conversation for each chat session, and put the last used language at the
+ * top of {@link #locales}.</p>
+ */
+ public LocaleList locales = LocaleList.getEmptyLocaleList();
+
+ /**
* Ensure that the data in this EditorInfo is compatible with an application
* that was developed against the given target API version. This can
* impact the following input types:
@@ -393,6 +410,7 @@
+ " fieldId=" + fieldId
+ " fieldName=" + fieldName);
pw.println(prefix + "extras=" + extras);
+ pw.println(prefix + "locales=" + locales);
}
/**
@@ -416,6 +434,7 @@
dest.writeInt(fieldId);
dest.writeString(fieldName);
dest.writeBundle(extras);
+ locales.writeToParcel(dest, flags);
}
/**
@@ -439,6 +458,7 @@
res.fieldId = source.readInt();
res.fieldName = source.readString();
res.extras = source.readBundle();
+ res.locales = LocaleList.CREATOR.createFromParcel(source);
return res;
}
diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java
index 4ac547a..4fc6665 100644
--- a/core/java/android/view/inputmethod/InputMethodInfo.java
+++ b/core/java/android/view/inputmethod/InputMethodInfo.java
@@ -48,7 +48,7 @@
/**
* This class is used to specify meta information of an input method.
*
- * <p>It should be defined in an XML resource file with an {@code <input-method>} element.
+ * <p>It should be defined in an XML resource file with an {@code <input-method>} element.
* For more information, see the guide to
* <a href="{@docRoot}guide/topics/text/creating-input-method.html">
* Creating an Input Method</a>.</p>
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 4ee155c..fbaf51c 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -41,7 +41,7 @@
* the specified subtype of the designated IME directly.
*
* <p>It should be defined in an XML resource file of the input method with the
- * <code><subtype></code> element, which resides within an {@code <input-method>} element.
+ * <code><subtype></code> element, which resides within an {@code <input-method>} element.
* For more information, see the guide to
* <a href="{@docRoot}guide/topics/text/creating-input-method.html">
* Creating an Input Method</a>.</p>
diff --git a/core/java/android/view/textservice/SpellCheckerInfo.java b/core/java/android/view/textservice/SpellCheckerInfo.java
index 2167862..491de78 100644
--- a/core/java/android/view/textservice/SpellCheckerInfo.java
+++ b/core/java/android/view/textservice/SpellCheckerInfo.java
@@ -117,7 +117,9 @@
a.getString(com.android.internal.R.styleable
.SpellChecker_Subtype_subtypeLocale),
a.getString(com.android.internal.R.styleable
- .SpellChecker_Subtype_subtypeExtraValue));
+ .SpellChecker_Subtype_subtypeExtraValue),
+ a.getInt(com.android.internal.R.styleable
+ .SpellChecker_Subtype_subtypeId, 0));
mSubtypes.add(subtype);
}
}
diff --git a/core/java/android/view/textservice/SpellCheckerSubtype.java b/core/java/android/view/textservice/SpellCheckerSubtype.java
index c753188..f2b03cc 100644
--- a/core/java/android/view/textservice/SpellCheckerSubtype.java
+++ b/core/java/android/view/textservice/SpellCheckerSubtype.java
@@ -16,6 +16,9 @@
package android.view.textservice;
+import com.android.internal.inputmethod.InputMethodUtils;
+
+import android.annotation.Nullable;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Parcel;
@@ -33,12 +36,21 @@
/**
* This class is used to specify meta information of a subtype contained in a spell checker.
* Subtype can describe locale (e.g. en_US, fr_FR...) used for settings.
+ *
+ * @see SpellCheckerInfo
+ *
+ * @attr ref android.R.styleable#SpellChecker_Subtype_label
+ * @attr ref android.R.styleable#SpellChecker_Subtype_subtypeLocale
+ * @attr ref android.R.styleable#SpellChecker_Subtype_subtypeExtraValue
+ * @attr ref android.R.styleable#SpellChecker_Subtype_subtypeId
*/
public final class SpellCheckerSubtype implements Parcelable {
private static final String TAG = SpellCheckerSubtype.class.getSimpleName();
private static final String EXTRA_VALUE_PAIR_SEPARATOR = ",";
private static final String EXTRA_VALUE_KEY_VALUE_SEPARATOR = "=";
+ private static final int SUBTYPE_ID_NONE = 0;
+ private final int mSubtypeId;
private final int mSubtypeHashCode;
private final int mSubtypeNameResId;
private final String mSubtypeLocale;
@@ -46,16 +58,40 @@
private HashMap<String, String> mExtraValueHashMapCache;
/**
- * Constructor
+ * Constructor.
+ *
+ * <p>There is no public API that requires developers to instantiate custom
+ * {@link SpellCheckerSubtype} object. Hence so far there is no need to make this constructor
+ * available in public API.</p>
+ *
* @param nameId The name of the subtype
* @param locale The locale supported by the subtype
* @param extraValue The extra value of the subtype
+ * @param subtypeId The subtype ID that is supposed to be stable during package update.
+ *
+ * @hide
*/
- public SpellCheckerSubtype(int nameId, String locale, String extraValue) {
+ public SpellCheckerSubtype(int nameId, String locale, String extraValue, int subtypeId) {
mSubtypeNameResId = nameId;
mSubtypeLocale = locale != null ? locale : "";
mSubtypeExtraValue = extraValue != null ? extraValue : "";
- mSubtypeHashCode = hashCodeInternal(mSubtypeLocale, mSubtypeExtraValue);
+ mSubtypeId = subtypeId;
+ mSubtypeHashCode = mSubtypeId != SUBTYPE_ID_NONE ?
+ mSubtypeId : hashCodeInternal(mSubtypeLocale, mSubtypeExtraValue);
+ }
+
+ /**
+ * Constructor.
+ * @param nameId The name of the subtype
+ * @param locale The locale supported by the subtype
+ * @param extraValue The extra value of the subtype
+ *
+ * @deprecated There is no public API that requires developers to directly instantiate custom
+ * {@link SpellCheckerSubtype} objects right now. Hence only the system is expected to be able
+ * to instantiate {@link SpellCheckerSubtype} object.
+ */
+ public SpellCheckerSubtype(int nameId, String locale, String extraValue) {
+ this(nameId, locale, extraValue, SUBTYPE_ID_NONE);
}
SpellCheckerSubtype(Parcel source) {
@@ -65,7 +101,9 @@
mSubtypeLocale = s != null ? s : "";
s = source.readString();
mSubtypeExtraValue = s != null ? s : "";
- mSubtypeHashCode = hashCodeInternal(mSubtypeLocale, mSubtypeExtraValue);
+ mSubtypeId = source.readInt();
+ mSubtypeHashCode = mSubtypeId != SUBTYPE_ID_NONE ?
+ mSubtypeId : hashCodeInternal(mSubtypeLocale, mSubtypeExtraValue);
}
/**
@@ -138,31 +176,27 @@
public boolean equals(Object o) {
if (o instanceof SpellCheckerSubtype) {
SpellCheckerSubtype subtype = (SpellCheckerSubtype) o;
+ if (subtype.mSubtypeId != SUBTYPE_ID_NONE || mSubtypeId != SUBTYPE_ID_NONE) {
+ return (subtype.hashCode() == hashCode());
+ }
return (subtype.hashCode() == hashCode())
- && (subtype.getNameResId() == getNameResId())
- && (subtype.getLocale().equals(getLocale()))
- && (subtype.getExtraValue().equals(getExtraValue()));
+ && (subtype.getNameResId() == getNameResId())
+ && (subtype.getLocale().equals(getLocale()))
+ && (subtype.getExtraValue().equals(getExtraValue()));
}
return false;
}
/**
+ * @return The normalized {@link Locale} object of the subtype. The returned locale may or may
+ * not equal to "locale" string parameter passed to the constructor.
+ *
+ * <p>TODO: Consider to make this a public API.</p>
* @hide
*/
- public static Locale constructLocaleFromString(String localeStr) {
- if (TextUtils.isEmpty(localeStr))
- return null;
- String[] localeParams = localeStr.split("_", 3);
- // The length of localeStr is guaranteed to always return a 1 <= value <= 3
- // because localeStr is not empty.
- if (localeParams.length == 1) {
- return new Locale(localeParams[0]);
- } else if (localeParams.length == 2) {
- return new Locale(localeParams[0], localeParams[1]);
- } else if (localeParams.length == 3) {
- return new Locale(localeParams[0], localeParams[1], localeParams[2]);
- }
- return null;
+ @Nullable
+ public Locale getLocaleObject() {
+ return InputMethodUtils.constructLocaleFromString(mSubtypeLocale);
}
/**
@@ -177,7 +211,7 @@
*/
public CharSequence getDisplayName(
Context context, String packageName, ApplicationInfo appInfo) {
- final Locale locale = constructLocaleFromString(mSubtypeLocale);
+ final Locale locale = getLocaleObject();
final String localeStr = locale != null ? locale.getDisplayName() : mSubtypeLocale;
if (mSubtypeNameResId == 0) {
return localeStr;
@@ -201,6 +235,7 @@
dest.writeInt(mSubtypeNameResId);
dest.writeString(mSubtypeLocale);
dest.writeString(mSubtypeExtraValue);
+ dest.writeInt(mSubtypeId);
}
public static final Parcelable.Creator<SpellCheckerSubtype> CREATOR
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 358f939..7443bce 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -93,7 +93,7 @@
* </pre>
* <p>See {@link android.content.Intent} for more information.</p>
*
- * <p>To provide a WebView in your own Activity, include a {@code <WebView>} in your layout,
+ * <p>To provide a WebView in your own Activity, include a {@code <WebView>} in your layout,
* or set the entire Activity window as a WebView during {@link
* android.app.Activity#onCreate(Bundle) onCreate()}:</p>
* <pre class="prettyprint">
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index f050e49..e1ce9fe 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2109,11 +2109,6 @@
}
@Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- return findDependentLayoutAxesHelper(child, axisFilter, LayoutParams.class);
- }
-
- @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (mSelector == null) {
useDefaultSelector();
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index 10aefe4..cf4587d 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -16,6 +16,8 @@
package android.widget;
+import com.android.internal.R;
+
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -33,8 +35,6 @@
import android.view.ViewConfiguration;
import android.view.accessibility.AccessibilityNodeInfo;
-import com.android.internal.R;
-
public abstract class AbsSeekBar extends ProgressBar {
private final Rect mTempRect = new Rect();
@@ -424,10 +424,10 @@
if (thumbHeight > trackHeight) {
final int offsetHeight = (paddedHeight - thumbHeight) / 2;
trackOffset = offsetHeight + (thumbHeight - trackHeight) / 2;
- thumbOffset = offsetHeight + 0;
+ thumbOffset = offsetHeight;
} else {
final int offsetHeight = (paddedHeight - trackHeight) / 2;
- trackOffset = offsetHeight + 0;
+ trackOffset = offsetHeight;
thumbOffset = offsetHeight + (trackHeight - thumbHeight) / 2;
}
@@ -574,13 +574,7 @@
if (isInScrollingContainer()) {
mTouchDownX = event.getX();
} else {
- setPressed(true);
- if (mThumb != null) {
- invalidate(mThumb.getBounds()); // This may be within the padding region
- }
- onStartTrackingTouch();
- trackTouchEvent(event);
- attemptClaimDrag();
+ startDrag(event);
}
break;
@@ -590,13 +584,7 @@
} else {
final float x = event.getX();
if (Math.abs(x - mTouchDownX) > mScaledTouchSlop) {
- setPressed(true);
- if (mThumb != null) {
- invalidate(mThumb.getBounds()); // This may be within the padding region
- }
- onStartTrackingTouch();
- trackTouchEvent(event);
- attemptClaimDrag();
+ startDrag(event);
}
}
break;
@@ -630,6 +618,19 @@
return true;
}
+ private void startDrag(MotionEvent event) {
+ setPressed(true);
+
+ if (mThumb != null) {
+ // This may be within the padding region.
+ invalidate(mThumb.getBounds());
+ }
+
+ onStartTrackingTouch();
+ trackTouchEvent(event);
+ attemptClaimDrag();
+ }
+
private void setHotspot(float x, float y) {
final Drawable bg = getBackground();
if (bg != null) {
@@ -638,18 +639,20 @@
}
private void trackTouchEvent(MotionEvent event) {
+ final int x = Math.round(event.getX());
+ final int y = Math.round(event.getY());
final int width = getWidth();
- final int available = width - mPaddingLeft - mPaddingRight;
- final int x = (int) event.getX();
- float scale;
- float progress = 0;
+ final int availableWidth = width - mPaddingLeft - mPaddingRight;
+
+ final float scale;
+ float progress = 0.0f;
if (isLayoutRtl() && mMirrorForRtl) {
if (x > width - mPaddingRight) {
scale = 0.0f;
} else if (x < mPaddingLeft) {
scale = 1.0f;
} else {
- scale = (float)(available - x + mPaddingLeft) / (float)available;
+ scale = (availableWidth - x + mPaddingLeft) / (float) availableWidth;
progress = mTouchProgressOffset;
}
} else {
@@ -658,15 +661,16 @@
} else if (x > width - mPaddingRight) {
scale = 1.0f;
} else {
- scale = (float)(x - mPaddingLeft) / (float)available;
+ scale = (x - mPaddingLeft) / (float) availableWidth;
progress = mTouchProgressOffset;
}
}
+
final int max = getMax();
progress += scale * max;
- setHotspot(x, (int) event.getY());
- setProgressInternal((int) progress, true, false);
+ setHotspot(x, y);
+ setProgressInternal(Math.round(progress), true, false);
}
/**
diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java
index 41f1ce7..0032f17 100644
--- a/core/java/android/widget/ActionMenuPresenter.java
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -933,7 +933,7 @@
super(context, menu, anchorView, overflowOnly,
com.android.internal.R.attr.actionOverflowMenuStyle);
setGravity(Gravity.END);
- setCallback(mPopupPresenterCallback);
+ setPresenterCallback(mPopupPresenterCallback);
}
@Override
@@ -956,7 +956,7 @@
setAnchorView(mOverflowButton == null ? (View) mMenuView : mOverflowButton);
}
- setCallback(mPopupPresenterCallback);
+ setPresenterCallback(mPopupPresenterCallback);
}
@Override
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 6becd1e..2d1f855 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -75,6 +75,7 @@
import android.view.DisplayListCanvas;
import android.view.DragEvent;
import android.view.Gravity;
+import android.view.InputDevice;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -229,7 +230,14 @@
// Set when this TextView gained focus with some text selected. Will start selection mode.
boolean mCreatedWithASelection;
- boolean mDoubleTap = false;
+ // Indicates the current tap state (first tap, double tap, or triple click).
+ private int mTapState = TAP_STATE_INITIAL;
+ private long mLastTouchUpTime = 0;
+ private static final int TAP_STATE_INITIAL = 0;
+ private static final int TAP_STATE_FIRST_TAP = 1;
+ private static final int TAP_STATE_DOUBLE_TAP = 2;
+ // Only for mouse input.
+ private static final int TAP_STATE_TRIPLE_CLICK = 3;
private Runnable mInsertionActionModeRunnable;
@@ -769,20 +777,12 @@
return retOffset;
}
- /**
- * Adjusts selection to the word under last touch offset. Return true if the operation was
- * successfully performed.
- */
- private boolean selectCurrentWord() {
- if (!mTextView.canSelectText()) {
- return false;
- }
-
+ private boolean needsToSelectAllToSelectWordOrParagraph() {
if (mTextView.hasPasswordTransformationMethod()) {
// Always select all on a password field.
// Cut/copy menu entries are not available for passwords, but being able to select all
// is however useful to delete or paste to replace the entire content.
- return mTextView.selectAllText();
+ return true;
}
int inputType = mTextView.getInputType();
@@ -797,6 +797,21 @@
variation == InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS ||
variation == InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS ||
variation == InputType.TYPE_TEXT_VARIATION_FILTER) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Adjusts selection to the word under last touch offset. Return true if the operation was
+ * successfully performed.
+ */
+ private boolean selectCurrentWord() {
+ if (!mTextView.canSelectText()) {
+ return false;
+ }
+
+ if (needsToSelectAllToSelectWordOrParagraph()) {
return mTextView.selectAllText();
}
@@ -805,8 +820,8 @@
final int maxOffset = TextUtils.unpackRangeEndFromLong(lastTouchOffsets);
// Safety check in case standard touch event handling has been bypassed
- if (minOffset < 0 || minOffset >= mTextView.getText().length()) return false;
- if (maxOffset < 0 || maxOffset >= mTextView.getText().length()) return false;
+ if (minOffset < 0 || minOffset > mTextView.getText().length()) return false;
+ if (maxOffset < 0 || maxOffset > mTextView.getText().length()) return false;
int selectionStart, selectionEnd;
@@ -839,6 +854,63 @@
return selectionEnd > selectionStart;
}
+ /**
+ * Adjusts selection to the paragraph under last touch offset. Return true if the operation was
+ * successfully performed.
+ */
+ private boolean selectCurrentParagraph() {
+ if (!mTextView.canSelectText()) {
+ return false;
+ }
+
+ if (needsToSelectAllToSelectWordOrParagraph()) {
+ return mTextView.selectAllText();
+ }
+
+ long lastTouchOffsets = getLastTouchOffsets();
+ final int minLastTouchOffset = TextUtils.unpackRangeStartFromLong(lastTouchOffsets);
+ final int maxLastTouchOffset = TextUtils.unpackRangeEndFromLong(lastTouchOffsets);
+
+ final long paragraphsRange = getParagraphsRange(minLastTouchOffset, maxLastTouchOffset);
+ final int start = TextUtils.unpackRangeStartFromLong(paragraphsRange);
+ final int end = TextUtils.unpackRangeEndFromLong(paragraphsRange);
+ if (start < end) {
+ Selection.setSelection((Spannable) mTextView.getText(), start, end);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Get the minimum range of paragraphs that contains startOffset and endOffset.
+ */
+ private long getParagraphsRange(int startOffset, int endOffset) {
+ final Layout layout = mTextView.getLayout();
+ if (layout == null) {
+ return TextUtils.packRangeInLong(-1, -1);
+ }
+ final CharSequence text = mTextView.getText();
+ int minLine = layout.getLineForOffset(startOffset);
+ // Search paragraph start.
+ while (minLine > 0) {
+ final int prevLineEndOffset = layout.getLineEnd(minLine - 1);
+ if (text.charAt(prevLineEndOffset - 1) == '\n') {
+ break;
+ }
+ minLine--;
+ }
+ int maxLine = layout.getLineForOffset(endOffset);
+ // Search paragraph end.
+ while (maxLine < layout.getLineCount() - 1) {
+ final int lineEndOffset = layout.getLineEnd(maxLine);
+ if (text.charAt(lineEndOffset - 1) == '\n') {
+ break;
+ }
+ maxLine++;
+ }
+ return TextUtils.packRangeInLong(layout.getLineStart(minLine), layout.getLineEnd(maxLine));
+ }
+
void onLocaleChanged() {
// Will be re-created on demand in getWordIterator with the proper new locale
mWordIterator = null;
@@ -1219,7 +1291,31 @@
}
}
+ private void updateTapState(MotionEvent event) {
+ final int action = event.getActionMasked();
+ if (action == MotionEvent.ACTION_DOWN) {
+ final boolean isMouse = event.isFromSource(InputDevice.SOURCE_MOUSE);
+ // Detect double tap and triple click.
+ if (((mTapState == TAP_STATE_FIRST_TAP)
+ || ((mTapState == TAP_STATE_DOUBLE_TAP) && isMouse))
+ && (SystemClock.uptimeMillis() - mLastTouchUpTime) <=
+ ViewConfiguration.getDoubleTapTimeout()) {
+ if (mTapState == TAP_STATE_FIRST_TAP) {
+ mTapState = TAP_STATE_DOUBLE_TAP;
+ } else {
+ mTapState = TAP_STATE_TRIPLE_CLICK;
+ }
+ } else {
+ mTapState = TAP_STATE_FIRST_TAP;
+ }
+ }
+ if (action == MotionEvent.ACTION_UP) {
+ mLastTouchUpTime = SystemClock.uptimeMillis();
+ }
+ }
+
void onTouchEvent(MotionEvent event) {
+ updateTapState(event);
updateFloatingToolbarVisibility(event);
if (hasSelectionController()) {
@@ -1773,7 +1869,8 @@
stopTextActionMode();
mPreserveDetachedSelection = false;
- getSelectionController().enterDrag();
+ getSelectionController().enterDrag(
+ SelectionModifierCursorController.DRAG_ACCELERATOR_MODE_WORD);
return true;
}
@@ -3777,30 +3874,6 @@
}
}
- public void showAtLocation(int offset) {
- // TODO - investigate if there's a better way to show the handles
- // after the drag accelerator has occured.
- int[] tmpCords = new int[2];
- mTextView.getLocationInWindow(tmpCords);
-
- Layout layout = mTextView.getLayout();
- int posX = tmpCords[0];
- int posY = tmpCords[1];
-
- final int line = layout.getLineForOffset(offset);
-
- int startX = (int) (layout.getPrimaryHorizontal(offset) - 0.5f
- - mHotspotX - getHorizontalOffset() + getCursorOffset());
- int startY = layout.getLineBottom(line);
-
- // Take TextView's padding and scroll into account.
- startX += mTextView.viewportToContentHorizontalOffset();
- startY += mTextView.viewportToContentVerticalOffset();
-
- mContainer.showAtLocation(mTextView, Gravity.NO_GRAVITY,
- startX + posX, startY + posY);
- }
-
@Override
protected void onDraw(Canvas c) {
final int drawWidth = mDrawable.getIntrinsicWidth();
@@ -3933,13 +4006,16 @@
// Cancel the single tap delayed runnable.
if (mInsertionActionModeRunnable != null
- && (mDoubleTap || isCursorInsideEasyCorrectionSpan())) {
+ && ((mTapState == TAP_STATE_DOUBLE_TAP)
+ || (mTapState == TAP_STATE_TRIPLE_CLICK)
+ || isCursorInsideEasyCorrectionSpan())) {
mTextView.removeCallbacks(mInsertionActionModeRunnable);
}
// Prepare and schedule the single tap runnable to run exactly after the double tap
// timeout has passed.
- if (!mDoubleTap && !isCursorInsideEasyCorrectionSpan()
+ if ((mTapState != TAP_STATE_DOUBLE_TAP) && (mTapState != TAP_STATE_TRIPLE_CLICK)
+ && !isCursorInsideEasyCorrectionSpan()
&& (durationSinceCutOrCopy < RECENT_CUT_COPY_DURATION)) {
if (mTextActionMode == null) {
if (mInsertionActionModeRunnable == null) {
@@ -4497,14 +4573,24 @@
// Where the user first starts the drag motion.
private int mStartOffset = -1;
- // Indicates whether the user is selecting text and using the drag accelerator.
- private boolean mDragAcceleratorActive;
+
private boolean mHaventMovedEnoughToStartDrag;
// The line that a selection happened most recently with the drag accelerator.
private int mLineSelectionIsOn = -1;
// Whether the drag accelerator has selected past the initial line.
private boolean mSwitchedLines = false;
+ // Indicates the drag accelerator mode that the user is currently using.
+ private int mDragAcceleratorMode = DRAG_ACCELERATOR_MODE_INACTIVE;
+ // Drag accelerator is inactive.
+ private static final int DRAG_ACCELERATOR_MODE_INACTIVE = 0;
+ // Character based selection by dragging. Only for mouse.
+ private static final int DRAG_ACCELERATOR_MODE_CHARACTER = 1;
+ // Word based selection by dragging. Enabled after long pressing or double tapping.
+ private static final int DRAG_ACCELERATOR_MODE_WORD = 2;
+ // Paragraph based selection by dragging. Enabled after mouse triple click.
+ private static final int DRAG_ACCELERATOR_MODE_PARAGRAPH = 3;
+
SelectionModifierCursorController() {
resetTouchOffsets();
}
@@ -4515,7 +4601,6 @@
}
initDrawables();
initHandles();
- hideInsertionPointCursorController();
}
private void initDrawables() {
@@ -4553,10 +4638,10 @@
if (mEndHandle != null) mEndHandle.hide();
}
- public void enterDrag() {
+ public void enterDrag(int dragAcceleratorMode) {
// Just need to init the handles / hide insertion cursor.
show();
- mDragAcceleratorActive = true;
+ mDragAcceleratorMode = dragAcceleratorMode;
// Start location of selection.
mStartOffset = mTextView.getOffsetForPosition(mLastDownPositionX,
mLastDownPositionY);
@@ -4568,6 +4653,7 @@
// the user to continue dragging across the screen to select text; TextView will
// scroll as necessary.
mTextView.getParent().requestDisallowInterceptTouchEvent(true);
+ mTextView.cancelLongPress();
}
public void onTouchEvent(MotionEvent event) {
@@ -4575,6 +4661,7 @@
// selection and tap can move cursor from this tap position.
final float eventX = event.getX();
final float eventY = event.getY();
+ final boolean isMouse = event.isFromSource(InputDevice.SOURCE_MOUSE);
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
if (extractedTextModeWillBeStarted()) {
@@ -4587,7 +4674,8 @@
// Double tap detection
if (mGestureStayedInTapRegion) {
- if (mDoubleTap) {
+ if (mTapState == TAP_STATE_DOUBLE_TAP
+ || mTapState == TAP_STATE_TRIPLE_CLICK) {
final float deltaX = eventX - mDownPositionX;
final float deltaY = eventY - mDownPositionY;
final float distanceSquared = deltaX * deltaX + deltaY * deltaY;
@@ -4598,8 +4686,12 @@
boolean stayedInArea =
distanceSquared < doubleTapSlop * doubleTapSlop;
- if (stayedInArea && isPositionOnText(eventX, eventY)) {
- selectCurrentWordAndStartDrag();
+ if (stayedInArea && (isMouse || isPositionOnText(eventX, eventY))) {
+ if (mTapState == TAP_STATE_DOUBLE_TAP) {
+ selectCurrentWordAndStartDrag();
+ } else if (mTapState == TAP_STATE_TRIPLE_CLICK) {
+ selectCurrentParagraphAndStartDrag();
+ }
mDiscardNextActionUp = true;
}
}
@@ -4644,94 +4736,168 @@
}
}
+ if (isMouse && !isDragAcceleratorActive()) {
+ final int offset = mTextView.getOffsetForPosition(eventX, eventY);
+ if (mStartOffset != offset) {
+ // Start character based drag accelerator.
+ if (mTextActionMode != null) {
+ mTextActionMode.finish();
+ }
+ enterDrag(DRAG_ACCELERATOR_MODE_CHARACTER);
+ mDiscardNextActionUp = true;
+ mHaventMovedEnoughToStartDrag = false;
+ }
+ }
+
if (mStartHandle != null && mStartHandle.isShowing()) {
// Don't do the drag if the handles are showing already.
break;
}
- if (mStartOffset != -1 && mTextView.getLayout() != null) {
- if (!mHaventMovedEnoughToStartDrag) {
-
- float y = eventY;
- if (mSwitchedLines) {
- // Offset the finger by the same vertical offset as the handles.
- // This improves visibility of the content being selected by
- // shifting the finger below the content, this is applied once
- // the user has switched lines.
- final float fingerOffset = (mStartHandle != null)
- ? mStartHandle.getIdealVerticalOffset()
- : touchSlop;
- y = eventY - fingerOffset;
- }
-
- final int currLine = getCurrentLineAdjustedForSlop(
- mTextView.getLayout(),
- mLineSelectionIsOn, y);
- if (!mSwitchedLines && currLine != mLineSelectionIsOn) {
- // Break early here, we want to offset the finger position from
- // the selection highlight, once the user moved their finger
- // to a different line we should apply the offset and *not* switch
- // lines until recomputing the position with the finger offset.
- mSwitchedLines = true;
- break;
- }
-
- int startOffset;
- int offset = mTextView.getOffsetAtCoordinate(currLine, eventX);
- // Snap to word boundaries.
- if (mStartOffset < offset) {
- // Expanding with end handle.
- offset = getWordEnd(offset);
- startOffset = getWordStart(mStartOffset);
- } else {
- // Expanding with start handle.
- offset = getWordStart(offset);
- startOffset = getWordEnd(mStartOffset);
- }
- mLineSelectionIsOn = currLine;
- Selection.setSelection((Spannable) mTextView.getText(),
- startOffset, offset);
- }
- }
+ updateSelection(event);
break;
case MotionEvent.ACTION_UP:
- if (mDragAcceleratorActive) {
- // No longer dragging to select text, let the parent intercept events.
- mTextView.getParent().requestDisallowInterceptTouchEvent(false);
-
- show();
- int startOffset = mTextView.getSelectionStart();
- int endOffset = mTextView.getSelectionEnd();
-
- // Since we don't let drag handles pass once they're visible, we need to
- // make sure the start / end locations are correct because the user *can*
- // switch directions during the initial drag.
- if (endOffset < startOffset) {
- int tmp = endOffset;
- endOffset = startOffset;
- startOffset = tmp;
-
- // Also update the selection with the right offsets in this case.
- Selection.setSelection((Spannable) mTextView.getText(),
- startOffset, endOffset);
- }
-
- // Need to do this to display the handles.
- mStartHandle.showAtLocation(startOffset);
- mEndHandle.showAtLocation(endOffset);
-
- // No longer the first dragging motion, reset.
- startSelectionActionMode();
-
- mDragAcceleratorActive = false;
- mStartOffset = -1;
- mSwitchedLines = false;
+ if (!isDragAcceleratorActive()) {
+ break;
}
+ updateSelection(event);
+
+ // No longer dragging to select text, let the parent intercept events.
+ mTextView.getParent().requestDisallowInterceptTouchEvent(false);
+
+ int startOffset = mTextView.getSelectionStart();
+ int endOffset = mTextView.getSelectionEnd();
+
+ // Since we don't let drag handles pass once they're visible, we need to
+ // make sure the start / end locations are correct because the user *can*
+ // switch directions during the initial drag.
+ if (endOffset < startOffset) {
+ int tmp = endOffset;
+ endOffset = startOffset;
+ startOffset = tmp;
+
+ // Also update the selection with the right offsets in this case.
+ Selection.setSelection((Spannable) mTextView.getText(),
+ startOffset, endOffset);
+ }
+ if (startOffset != endOffset) {
+ startSelectionActionMode();
+ }
+
+ // No longer the first dragging motion, reset.
+ resetDragAcceleratorState();
break;
}
}
+ private void updateSelection(MotionEvent event) {
+ if (mTextView.getLayout() != null) {
+ switch (mDragAcceleratorMode) {
+ case DRAG_ACCELERATOR_MODE_CHARACTER:
+ updateCharacterBasedSelection(event);
+ break;
+ case DRAG_ACCELERATOR_MODE_WORD:
+ updateWordBasedSelection(event);
+ break;
+ case DRAG_ACCELERATOR_MODE_PARAGRAPH:
+ updateParagraphBasedSelection(event);
+ break;
+ }
+ }
+ }
+
+ /**
+ * If the TextView allows text selection, selects the current paragraph and starts a drag.
+ *
+ * @return true if the drag was started.
+ */
+ private boolean selectCurrentParagraphAndStartDrag() {
+ if (mInsertionActionModeRunnable != null) {
+ mTextView.removeCallbacks(mInsertionActionModeRunnable);
+ }
+ if (mTextActionMode != null) {
+ mTextActionMode.finish();
+ }
+ if (!selectCurrentParagraph()) {
+ return false;
+ }
+ enterDrag(SelectionModifierCursorController.DRAG_ACCELERATOR_MODE_PARAGRAPH);
+ return true;
+ }
+
+ private void updateCharacterBasedSelection(MotionEvent event) {
+ final int offset = mTextView.getOffsetForPosition(event.getX(), event.getY());
+ Selection.setSelection((Spannable) mTextView.getText(), mStartOffset, offset);
+ }
+
+ private void updateWordBasedSelection(MotionEvent event) {
+ if (mHaventMovedEnoughToStartDrag) {
+ return;
+ }
+ final boolean isMouse = event.isFromSource(InputDevice.SOURCE_MOUSE);
+ final ViewConfiguration viewConfig = ViewConfiguration.get(
+ mTextView.getContext());
+ final float eventX = event.getX();
+ final float eventY = event.getY();
+ final int currLine;
+ if (isMouse) {
+ // No need to offset the y coordinate for mouse input.
+ currLine = mTextView.getLineAtCoordinate(eventY);
+ } else {
+ float y = eventY;
+ if (mSwitchedLines) {
+ // Offset the finger by the same vertical offset as the handles.
+ // This improves visibility of the content being selected by
+ // shifting the finger below the content, this is applied once
+ // the user has switched lines.
+ final int touchSlop = viewConfig.getScaledTouchSlop();
+ final float fingerOffset = (mStartHandle != null)
+ ? mStartHandle.getIdealVerticalOffset()
+ : touchSlop;
+ y = eventY - fingerOffset;
+ }
+
+ currLine = getCurrentLineAdjustedForSlop(mTextView.getLayout(), mLineSelectionIsOn,
+ y);
+ if (!mSwitchedLines && currLine != mLineSelectionIsOn) {
+ // Break early here, we want to offset the finger position from
+ // the selection highlight, once the user moved their finger
+ // to a different line we should apply the offset and *not* switch
+ // lines until recomputing the position with the finger offset.
+ mSwitchedLines = true;
+ return;
+ }
+ }
+
+ int startOffset;
+ int offset = mTextView.getOffsetAtCoordinate(currLine, eventX);
+ // Snap to word boundaries.
+ if (mStartOffset < offset) {
+ // Expanding with end handle.
+ offset = getWordEnd(offset);
+ startOffset = getWordStart(mStartOffset);
+ } else {
+ // Expanding with start handle.
+ offset = getWordStart(offset);
+ startOffset = getWordEnd(mStartOffset);
+ }
+ mLineSelectionIsOn = currLine;
+ Selection.setSelection((Spannable) mTextView.getText(),
+ startOffset, offset);
+ }
+
+ private void updateParagraphBasedSelection(MotionEvent event) {
+ final int offset = mTextView.getOffsetForPosition(event.getX(), event.getY());
+
+ final int start = Math.min(offset, mStartOffset);
+ final int end = Math.max(offset, mStartOffset);
+ final long paragraphsRange = getParagraphsRange(start, end);
+ final int selectionStart = TextUtils.unpackRangeStartFromLong(paragraphsRange);
+ final int selectionEnd = TextUtils.unpackRangeEndFromLong(paragraphsRange);
+ Selection.setSelection((Spannable) mTextView.getText(), selectionStart, selectionEnd);
+ }
+
/**
* @param event
*/
@@ -4754,8 +4920,12 @@
public void resetTouchOffsets() {
mMinTouchOffset = mMaxTouchOffset = -1;
+ resetDragAcceleratorState();
+ }
+
+ private void resetDragAcceleratorState() {
mStartOffset = -1;
- mDragAcceleratorActive = false;
+ mDragAcceleratorMode = DRAG_ACCELERATOR_MODE_INACTIVE;
mSwitchedLines = false;
}
@@ -4770,7 +4940,7 @@
* @return true if the user is selecting text using the drag accelerator.
*/
public boolean isDragAcceleratorActive() {
- return mDragAcceleratorActive;
+ return mDragAcceleratorMode != DRAG_ACCELERATOR_MODE_INACTIVE;
}
public void onTouchModeChanged(boolean isInTouchMode) {
diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java
index 4d9f55c..280ff15 100644
--- a/core/java/android/widget/FrameLayout.java
+++ b/core/java/android/widget/FrameLayout.java
@@ -21,8 +21,12 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
+import android.content.res.ColorStateList;
import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.PorterDuff;
import android.graphics.Rect;
+import android.graphics.Region;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
@@ -32,6 +36,9 @@
import android.view.ViewHierarchyEncoder;
import android.widget.RemoteViews.RemoteView;
+import com.android.internal.R;
+
+
/**
* FrameLayout is designed to block out an area on the screen to display
* a single item. Generally, FrameLayout should be used to hold a single child view, because it can
@@ -164,10 +171,6 @@
mPaddingBottom + mForegroundPaddingBottom;
}
- @Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- return findDependentLayoutAxesHelper(child, axisFilter, LayoutParams.class);
- }
/**
* {@inheritDoc}
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index ba868a1..ad939be 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -16,7 +16,6 @@
package android.widget;
-import android.view.ViewParent;
import com.android.internal.R;
import android.annotation.IntDef;
@@ -38,8 +37,6 @@
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
/**
* A Layout that arranges its children in a single column or a single row. The direction of
@@ -647,60 +644,6 @@
}
}
- @Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- // This implementation is almost exactly equivalent to the default implementation
- // offered to the rest of the framework in ViewGroup, but we treat weight to be
- // functionally equivalent to MATCH_PARENT along the orientation axis.
-
- if (!checkPartialLayoutParams(child, LayoutParams.class)) return axisFilter;
- final LayoutParams lp = (LayoutParams) child.getLayoutParams();
- if (child.didLayoutParamsChange()) {
- // Anything could have changed about our previous assumptions.
- return axisFilter;
- }
-
- // Our layout can always end up depending on a WRAP_CONTENT child.
- final int wrapAxisFilter = ((lp.width == WRAP_CONTENT ? FLAG_LAYOUT_AXIS_HORIZONTAL : 0)
- | (lp.height == WRAP_CONTENT ? FLAG_LAYOUT_AXIS_VERTICAL : 0)) & axisFilter;
-
- if (wrapAxisFilter == axisFilter) {
- // We know all queried axes are affected, just return early.
- return wrapAxisFilter;
- }
-
- // Our layout *may* depend on a MATCH_PARENT child, depending on whether we can determine
- // that our layout will remain stable within our parent. We need to ask.
- int matchAxisFilter = ((lp.width == MATCH_PARENT ? FLAG_LAYOUT_AXIS_HORIZONTAL : 0)
- | (lp.height == MATCH_PARENT ? FLAG_LAYOUT_AXIS_VERTICAL : 0)) & axisFilter;
-
- // For LinearLayout, a nonzero weight is equivalent to MATCH_PARENT for this purpose.
- if (lp.weight > 0) {
- if (mOrientation == HORIZONTAL) {
- matchAxisFilter |= FLAG_LAYOUT_AXIS_HORIZONTAL & axisFilter;
- } else {
- matchAxisFilter |= FLAG_LAYOUT_AXIS_VERTICAL & axisFilter;
- }
- }
-
- if (matchAxisFilter != 0) {
- final ViewParent parent = getParent();
- if (parent != null) {
- // If our parent depends on us for an axis, then our layout can also be affected
- // by a MATCH_PARENT child along that axis.
- return getParent().findDependentLayoutAxes(this, matchAxisFilter)
- | wrapAxisFilter;
- }
-
- // If we don't have a parent, assume we're affected
- // in any determined affected direction.
- return matchAxisFilter | wrapAxisFilter;
- }
-
- // Two exact sizes and LayoutParams didn't change. We're safe.
- return 0;
- }
-
/**
* Determines where to position dividers between children.
*
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index b43ea76..53ca6d1 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1158,7 +1158,7 @@
final View child = obtainView(0, mIsScrap);
// Lay out child directly against the parent measure spec so that
- // we can obtain expected minimum width and height.
+ // we can obtain exected minimum width and height.
measureScrapChild(child, 0, widthMeasureSpec, heightSize);
childWidth = child.getMeasuredWidth();
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 04c68ae..2099b04 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -121,7 +121,7 @@
* }
* }</pre>
*
- * <p>To add a progress bar to a layout file, you can use the {@code <ProgressBar>} element.
+ * <p>To add a progress bar to a layout file, you can use the {@code <ProgressBar>} element.
* By default, the progress bar is a spinning wheel (an indeterminate indicator). To change to a
* horizontal progress bar, apply the {@link android.R.style#Widget_ProgressBar_Horizontal
* Widget.ProgressBar.Horizontal} style, like so:</p>
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 0ed72e4d..0dd803a2 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -1666,6 +1666,7 @@
ViewGroup.LayoutParams layoutParams = target.getLayoutParams();
if (layoutParams instanceof ViewGroup.MarginLayoutParams) {
((ViewGroup.MarginLayoutParams) layoutParams).setMarginEnd(end);
+ target.setLayoutParams(layoutParams);
}
}
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 529d295..78b931d 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -557,10 +557,12 @@
initOrResetVelocityTracker();
mVelocityTracker.addMovement(ev);
/*
- * If being flinged and user touches the screen, initiate drag;
- * otherwise don't. mScroller.isFinished should be false when
- * being flinged.
+ * If being flinged and user touches the screen, initiate drag;
+ * otherwise don't. mScroller.isFinished should be false when
+ * being flinged. We need to call computeScrollOffset() first so that
+ * isFinished() is correct.
*/
+ mScroller.computeScrollOffset();
mIsBeingDragged = !mScroller.isFinished();
if (mIsBeingDragged && mScrollStrictSpan == null) {
mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll");
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 88f02d1..45fc6c3 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -45,7 +45,9 @@
import android.text.TextWatcher;
import android.text.style.ImageSpan;
import android.util.AttributeSet;
+import android.util.DisplayMetrics;
import android.util.Log;
+import android.util.TypedValue;
import android.view.CollapsibleActionView;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@@ -1722,6 +1724,14 @@
mThreshold = getThreshold();
}
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+ DisplayMetrics metrics = getResources().getDisplayMetrics();
+ setMinWidth((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+ getSearchViewTextMinWidthDp(), metrics));
+ }
+
void setSearchView(SearchView searchView) {
mSearchView = searchView;
}
@@ -1818,5 +1828,21 @@
return super.onKeyPreIme(keyCode, event);
}
+ /**
+ * Get minimum width of the search view text entry area.
+ */
+ private int getSearchViewTextMinWidthDp() {
+ final Configuration configuration = getResources().getConfiguration();
+ final int width = configuration.screenWidthDp;
+ final int height = configuration.screenHeightDp;
+ final int orientation = configuration.orientation;
+ if (width >= 960 && height >= 720
+ && orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ return 256;
+ } else if (width >= 600 || (width >= 640 && height >= 480)) {
+ return 192;
+ };
+ return 160;
+ }
}
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d666939..5574f86 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -17,7 +17,6 @@
package android.widget;
import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
-
import android.R;
import android.annotation.ColorInt;
import android.annotation.DrawableRes;
@@ -115,6 +114,7 @@
import android.view.DragEvent;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
+import android.view.InputDevice;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -618,9 +618,6 @@
private final Paint mHighlightPaint;
private boolean mHighlightPathBogus = true;
- private boolean mFirstTouch = false;
- private long mLastTouchUpTime = 0;
-
// Although these fields are specific to editable text, they are not added to Editor because
// they are defined by the TextView's style and are theme-dependent.
int mCursorDrawableRes;
@@ -6439,6 +6436,9 @@
outAttrs.initialCapsMode = ic.getCursorCapsMode(getInputType());
return ic;
}
+ // LocaleList is designed to be immutable. This is theoretically equivalent to copy
+ // the snapshot of the current text locales.
+ outAttrs.locales = getTextLocales();
}
return null;
}
@@ -6811,11 +6811,10 @@
if (mEllipsize == TextUtils.TruncateAt.MARQUEE) {
if (!compressText(ellipsisWidth)) {
+ final int height = mLayoutParams.height;
// If the size of the view does not depend on the size of the text, try to
// start the marquee immediately
- final ViewParent parent = getParent();
- if (parent != null && parent.findDependentLayoutAxes(this,
- ViewParent.FLAG_LAYOUT_AXIS_VERTICAL) == 0) {
+ if (height != LayoutParams.WRAP_CONTENT && height != LayoutParams.MATCH_PARENT) {
startMarquee();
} else {
// Defer the start of the marquee until we know our width (see setFrame())
@@ -7214,9 +7213,37 @@
* new view layout.
*/
private void checkForResize() {
- // Always request a layout. The parent will perform the correct version
- // of the intended optimizations as part of requestLayoutForChild.
- requestLayout();
+ boolean sizeChanged = false;
+
+ if (mLayout != null) {
+ // Check if our width changed
+ if (mLayoutParams.width == LayoutParams.WRAP_CONTENT) {
+ sizeChanged = true;
+ invalidate();
+ }
+
+ // Check if our height changed
+ if (mLayoutParams.height == LayoutParams.WRAP_CONTENT) {
+ int desiredHeight = getDesiredHeight();
+
+ if (desiredHeight != this.getHeight()) {
+ sizeChanged = true;
+ }
+ } else if (mLayoutParams.height == LayoutParams.MATCH_PARENT) {
+ if (mDesiredHeightAtMeasure >= 0) {
+ int desiredHeight = getDesiredHeight();
+
+ if (desiredHeight != mDesiredHeightAtMeasure) {
+ sizeChanged = true;
+ }
+ }
+ }
+ }
+
+ if (sizeChanged) {
+ requestLayout();
+ // caller will have already invalidated
+ }
}
/**
@@ -7224,11 +7251,56 @@
* or merely a new text layout.
*/
private void checkForRelayout() {
- // Always request a layout. The parent will perform the correct version
- // of the intended optimizations as part of requestLayoutForChild.
- nullLayouts();
- requestLayout();
- invalidate();
+ // If we have a fixed width, we can just swap in a new text layout
+ // if the text height stays the same or if the view height is fixed.
+
+ if ((mLayoutParams.width != LayoutParams.WRAP_CONTENT ||
+ (mMaxWidthMode == mMinWidthMode && mMaxWidth == mMinWidth)) &&
+ (mHint == null || mHintLayout != null) &&
+ (mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight() > 0)) {
+ // Static width, so try making a new text layout.
+
+ int oldht = mLayout.getHeight();
+ int want = mLayout.getWidth();
+ int hintWant = mHintLayout == null ? 0 : mHintLayout.getWidth();
+
+ /*
+ * No need to bring the text into view, since the size is not
+ * changing (unless we do the requestLayout(), in which case it
+ * will happen at measure).
+ */
+ makeNewLayout(want, hintWant, UNKNOWN_BORING, UNKNOWN_BORING,
+ mRight - mLeft - getCompoundPaddingLeft() - getCompoundPaddingRight(),
+ false);
+
+ if (mEllipsize != TextUtils.TruncateAt.MARQUEE) {
+ // In a fixed-height view, so use our new text layout.
+ if (mLayoutParams.height != LayoutParams.WRAP_CONTENT &&
+ mLayoutParams.height != LayoutParams.MATCH_PARENT) {
+ invalidate();
+ return;
+ }
+
+ // Dynamic height, but height has stayed the same,
+ // so use our new text layout.
+ if (mLayout.getHeight() == oldht &&
+ (mHintLayout == null || mHintLayout.getHeight() == oldht)) {
+ invalidate();
+ return;
+ }
+ }
+
+ // We lose: the height has changed and we have a dynamic height.
+ // Request a new view layout using our new text layout.
+ requestLayout();
+ invalidate();
+ } else {
+ // Dynamic width, so we have no choice but to request a new
+ // view layout with a new text layout.
+ nullLayouts();
+ requestLayout();
+ invalidate();
+ }
}
@Override
@@ -8331,23 +8403,6 @@
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getActionMasked();
-
- if (mEditor != null && action == MotionEvent.ACTION_DOWN) {
- // Detect double tap and inform the Editor.
- if (mFirstTouch && (SystemClock.uptimeMillis() - mLastTouchUpTime) <=
- ViewConfiguration.getDoubleTapTimeout()) {
- mEditor.mDoubleTap = true;
- mFirstTouch = false;
- } else {
- mEditor.mDoubleTap = false;
- mFirstTouch = true;
- }
- }
-
- if (action == MotionEvent.ACTION_UP) {
- mLastTouchUpTime = SystemClock.uptimeMillis();
- }
-
if (mEditor != null) {
mEditor.onTouchEvent(event);
@@ -8782,7 +8837,7 @@
final SpellCheckerSubtype subtype = textServicesManager.getCurrentSpellCheckerSubtype(true);
final Locale locale;
if (subtype != null) {
- locale = SpellCheckerSubtype.constructLocaleFromString(subtype.getLocale());
+ locale = subtype.getLocaleObject();
} else {
locale = null;
}
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java
index 6e56513..acbf5eb 100644
--- a/core/java/android/widget/Toolbar.java
+++ b/core/java/android/widget/Toolbar.java
@@ -1368,11 +1368,6 @@
}
@Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- return findDependentLayoutAxesHelper(child, axisFilter, LayoutParams.class);
- }
-
- @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = 0;
int height = 0;
diff --git a/core/java/com/android/internal/content/PackageHelper.java b/core/java/com/android/internal/content/PackageHelper.java
index de29a96..8219c61 100644
--- a/core/java/com/android/internal/content/PackageHelper.java
+++ b/core/java/com/android/internal/content/PackageHelper.java
@@ -58,6 +58,7 @@
public class PackageHelper {
public static final int RECOMMEND_INSTALL_INTERNAL = 1;
public static final int RECOMMEND_INSTALL_EXTERNAL = 2;
+ public static final int RECOMMEND_INSTALL_EPHEMERAL = 3;
public static final int RECOMMEND_FAILED_INSUFFICIENT_STORAGE = -1;
public static final int RECOMMEND_FAILED_INVALID_APK = -2;
public static final int RECOMMEND_FAILED_INVALID_LOCATION = -3;
@@ -442,7 +443,12 @@
final int prefer;
final boolean checkBoth;
- if ((installFlags & PackageManager.INSTALL_INTERNAL) != 0) {
+ boolean ephemeral = false;
+ if ((installFlags & PackageManager.INSTALL_EPHEMERAL) != 0) {
+ prefer = RECOMMEND_INSTALL_INTERNAL;
+ ephemeral = true;
+ checkBoth = false;
+ } else if ((installFlags & PackageManager.INSTALL_INTERNAL) != 0) {
prefer = RECOMMEND_INSTALL_INTERNAL;
checkBoth = false;
} else if ((installFlags & PackageManager.INSTALL_EXTERNAL) != 0) {
@@ -483,8 +489,12 @@
}
if (prefer == RECOMMEND_INSTALL_INTERNAL) {
+ // The ephemeral case will either fit and return EPHEMERAL, or will not fit
+ // and will fall through to return INSUFFICIENT_STORAGE
if (fitsOnInternal) {
- return PackageHelper.RECOMMEND_INSTALL_INTERNAL;
+ return (ephemeral)
+ ? PackageHelper.RECOMMEND_INSTALL_EPHEMERAL
+ : PackageHelper.RECOMMEND_INSTALL_INTERNAL;
}
} else if (prefer == RECOMMEND_INSTALL_EXTERNAL) {
if (fitsOnExternal) {
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index 01ac22e..f0c1094 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -371,17 +371,17 @@
}
// TODO: Use {@link Locale#toLanguageTag()} and {@link Locale#forLanguageTag(languageTag)}.
String[] localeParams = localeStr.split("_", 3);
+ if (localeParams.length >= 1 && "tl".equals(localeParams[0])) {
+ // Convert a locale whose language is "tl" to one whose language is "fil".
+ // For example, "tl_PH" will get converted to "fil_PH".
+ // Versions of Android earlier than Lollipop did not support three letter language
+ // codes, and used "tl" (Tagalog) as the language string for "fil" (Filipino).
+ // On Lollipop and above, the current three letter version must be used.
+ localeParams[0] = "fil";
+ }
// The length of localeStr is guaranteed to always return a 1 <= value <= 3
// because localeStr is not empty.
if (localeParams.length == 1) {
- if (localeParams.length >= 1 && "tl".equals(localeParams[0])) {
- // Convert a locale whose language is "tl" to one whose language is "fil".
- // For example, "tl_PH" will get converted to "fil_PH".
- // Versions of Android earlier than Lollipop did not support three letter language
- // codes, and used "tl" (Tagalog) as the language string for "fil" (Filipino).
- // On Lollipop and above, the current three letter version must be used.
- localeParams[0] = "fil";
- }
return new Locale(localeParams[0]);
} else if (localeParams.length == 2) {
return new Locale(localeParams[0], localeParams[1]);
diff --git a/core/java/com/android/internal/logging/MetricsConstants.java b/core/java/com/android/internal/logging/MetricsConstants.java
index 6cc8ba9..37bf71c 100644
--- a/core/java/com/android/internal/logging/MetricsConstants.java
+++ b/core/java/com/android/internal/logging/MetricsConstants.java
@@ -280,6 +280,8 @@
public static final int ACTION_FINGERPRINT_RENAME = 254;
public static final int ACTION_DOUBLE_TAP_POWER_CAMERA_GESTURE = 255;
public static final int ACTION_WIGGLE_CAMERA_GESTURE = 256;
+ public static final int QS_WORKMODE = 257;
+ public static final int BACKGROUND_CHECK_SUMMARY = 258;
// These constants must match those in the analytic pipeline, do not edit.
// Add temporary values to the top of MetricsLogger instead.
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 9391c60..4a969b2 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -105,7 +105,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 136 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 138 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -2621,10 +2621,9 @@
}
}
- public void noteProcessStateLocked(String name, int uid, int state) {
+ public void noteUidProcessStateLocked(int uid, int state) {
uid = mapUid(uid);
- final long elapsedRealtime = SystemClock.elapsedRealtime();
- getUidStatsLocked(uid).updateProcessStateLocked(name, state, elapsedRealtime);
+ getUidStatsLocked(uid).updateUidProcessStateLocked(state);
}
public void noteProcessFinishLocked(String name, int uid) {
@@ -2632,13 +2631,11 @@
if (!mActiveEvents.updateState(HistoryItem.EVENT_PROC_FINISH, name, uid, 0)) {
return;
}
- final long elapsedRealtime = SystemClock.elapsedRealtime();
- final long uptime = SystemClock.uptimeMillis();
- getUidStatsLocked(uid).updateProcessStateLocked(name, Uid.PROCESS_STATE_NONE,
- elapsedRealtime);
if (!mRecordAllHistory) {
return;
}
+ final long elapsedRealtime = SystemClock.elapsedRealtime();
+ final long uptime = SystemClock.uptimeMillis();
addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_FINISH, name, uid);
}
@@ -4446,8 +4443,7 @@
StopwatchTimer mForegroundActivityTimer;
- static final int PROCESS_STATE_NONE = NUM_PROCESS_STATE;
- int mProcessState = PROCESS_STATE_NONE;
+ int mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT;
StopwatchTimer[] mProcessStateTimer;
BatchTimer mVibratorOnTimer;
@@ -4812,21 +4808,6 @@
}
}
- void updateUidProcessStateLocked(int state, long elapsedRealtimeMs) {
- if (mProcessState == state) return;
-
- if (mProcessState != PROCESS_STATE_NONE) {
- mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtimeMs);
- }
- mProcessState = state;
- if (state != PROCESS_STATE_NONE) {
- if (mProcessStateTimer[state] == null) {
- makeProcessState(state, null);
- }
- mProcessStateTimer[state].startRunningLocked(elapsedRealtimeMs);
- }
- }
-
public BatchTimer createVibratorOnTimerLocked() {
if (mVibratorOnTimer == null) {
mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase);
@@ -5167,7 +5148,7 @@
active |= !mProcessStateTimer[i].reset(false);
}
}
- active |= (mProcessState != PROCESS_STATE_NONE);
+ active |= (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT);
}
if (mVibratorOnTimer != null) {
if (mVibratorOnTimer.reset(false)) {
@@ -5261,14 +5242,9 @@
}
for (int ip=mProcessStats.size()-1; ip>=0; ip--) {
Proc proc = mProcessStats.valueAt(ip);
- if (proc.mProcessState == PROCESS_STATE_NONE) {
- proc.detach();
- mProcessStats.removeAt(ip);
- } else {
- proc.reset();
- active = true;
- }
+ proc.detach();
}
+ mProcessStats.clear();
if (mPids.size() > 0) {
for (int i=mPids.size()-1; i>=0; i--) {
Pid pid = mPids.valueAt(i);
@@ -5697,7 +5673,7 @@
} else {
mForegroundActivityTimer = null;
}
- mProcessState = PROCESS_STATE_NONE;
+ mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT;
for (int i = 0; i < NUM_PROCESS_STATE; i++) {
if (in.readInt() != 0) {
makeProcessState(i, in);
@@ -6080,11 +6056,6 @@
*/
int mUnpluggedNumAnrs;
- /**
- * Current process state.
- */
- int mProcessState = PROCESS_STATE_NONE;
-
ArrayList<ExcessivePower> mExcessivePower;
Proc(String name) {
@@ -6104,16 +6075,6 @@
public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
}
- void reset() {
- mUserTime = mSystemTime = mForegroundTime = 0;
- mStarts = mNumCrashes = mNumAnrs = 0;
- mLoadedUserTime = mLoadedSystemTime = mLoadedForegroundTime = 0;
- mLoadedStarts = mLoadedNumCrashes = mLoadedNumAnrs = 0;
- mUnpluggedUserTime = mUnpluggedSystemTime = mUnpluggedForegroundTime = 0;
- mUnpluggedStarts = mUnpluggedNumCrashes = mUnpluggedNumAnrs = 0;
- mExcessivePower = null;
- }
-
void detach() {
mActive = false;
mOnBatteryTimeBase.remove(this);
@@ -6668,46 +6629,39 @@
return ps;
}
- public void updateProcessStateLocked(String procName, int state, long elapsedRealtimeMs) {
- int procState;
- if (state <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
- procState = PROCESS_STATE_FOREGROUND;
- } else if (state <= ActivityManager.PROCESS_STATE_RECEIVER) {
- procState = PROCESS_STATE_ACTIVE;
+ public void updateUidProcessStateLocked(int procState) {
+ int uidRunningState;
+ if (procState == ActivityManager.PROCESS_STATE_NONEXISTENT) {
+ uidRunningState = ActivityManager.PROCESS_STATE_NONEXISTENT;
+ } else if (procState == ActivityManager.PROCESS_STATE_TOP) {
+ uidRunningState = PROCESS_STATE_TOP;
+ } else if (procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) {
+ // Persistent and other foreground states go here.
+ uidRunningState = PROCESS_STATE_FOREGROUND_SERVICE;
+ } else if (procState <= ActivityManager.PROCESS_STATE_TOP_SLEEPING) {
+ uidRunningState = PROCESS_STATE_TOP_SLEEPING;
+ } else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
+ // Persistent and other foreground states go here.
+ uidRunningState = PROCESS_STATE_FOREGROUND;
+ } else if (procState <= ActivityManager.PROCESS_STATE_RECEIVER) {
+ uidRunningState = PROCESS_STATE_BACKGROUND;
} else {
- procState = PROCESS_STATE_RUNNING;
+ uidRunningState = PROCESS_STATE_CACHED;
}
- updateRealProcessStateLocked(procName, procState, elapsedRealtimeMs);
- }
- public void updateRealProcessStateLocked(String procName, int procState,
- long elapsedRealtimeMs) {
- Proc proc = getProcessStatsLocked(procName);
- if (proc.mProcessState != procState) {
- boolean changed;
- if (procState < proc.mProcessState) {
- // Has this process become more important? If so,
- // we may need to change the uid if the currrent uid proc state
- // is not as important as what we are now setting.
- changed = mProcessState > procState;
- } else {
- // Has this process become less important? If so,
- // we may need to change the uid if the current uid proc state
- // is the same importance as the old setting.
- changed = mProcessState == proc.mProcessState;
+ if (mProcessState == uidRunningState) return;
+
+ final long elapsedRealtime = SystemClock.elapsedRealtime();
+
+ if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
+ mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtime);
+ }
+ mProcessState = uidRunningState;
+ if (uidRunningState != ActivityManager.PROCESS_STATE_NONEXISTENT) {
+ if (mProcessStateTimer[uidRunningState] == null) {
+ makeProcessState(uidRunningState, null);
}
- proc.mProcessState = procState;
- if (changed) {
- // uid's state may have changed; compute what the new state should be.
- int uidProcState = PROCESS_STATE_NONE;
- for (int ip=mProcessStats.size()-1; ip>=0; ip--) {
- proc = mProcessStats.valueAt(ip);
- if (proc.mProcessState < uidProcState) {
- uidProcState = proc.mProcessState;
- }
- }
- updateUidProcessStateLocked(uidProcState, elapsedRealtimeMs);
- }
+ mProcessStateTimer[uidRunningState].startRunningLocked(elapsedRealtime);
}
}
@@ -9423,7 +9377,7 @@
if (in.readInt() != 0) {
u.createForegroundActivityTimerLocked().readSummaryFromParcelLocked(in);
}
- u.mProcessState = Uid.PROCESS_STATE_NONE;
+ u.mProcessState = ActivityManager.PROCESS_STATE_NONEXISTENT;
for (int i = 0; i < Uid.NUM_PROCESS_STATE; i++) {
if (in.readInt() != 0) {
u.makeProcessState(i, null);
diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java
index b101733..1b44ff3 100644
--- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java
+++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java
@@ -17,6 +17,7 @@
package com.android.internal.policy;
import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Looper;
import android.view.Choreographer;
@@ -44,6 +45,7 @@
// The render nodes for the multi threaded renderer.
private ThreadedRenderer mRenderer;
private RenderNode mFrameAndBackdropNode;
+ private RenderNode mSystemBarBackgroundNode;
private final Rect mOldTargetRect = new Rect();
private final Rect mNewTargetRect = new Rect();
@@ -61,14 +63,18 @@
private boolean mReportNextDraw;
private Drawable mCaptionBackgroundDrawable;
+ private Drawable mUserCaptionBackgroundDrawable;
private Drawable mResizingBackgroundDrawable;
+ private ColorDrawable mStatusBarColor;
public BackdropFrameRenderer(DecorView decorView, ThreadedRenderer renderer, Rect initialBounds,
- Drawable resizingBackgroundDrawable, Drawable captionBackgroundDrawable) {
+ Drawable resizingBackgroundDrawable, Drawable captionBackgroundDrawable,
+ Drawable userCaptionBackgroundDrawable, int statusBarColor) {
setName("ResizeFrame");
mRenderer = renderer;
- onResourcesLoaded(decorView, resizingBackgroundDrawable, captionBackgroundDrawable);
+ onResourcesLoaded(decorView, resizingBackgroundDrawable, captionBackgroundDrawable,
+ userCaptionBackgroundDrawable, statusBarColor);
// Create a render node for the content and frame backdrop
// which can be resized independently from the content.
@@ -87,10 +93,26 @@
}
void onResourcesLoaded(DecorView decorView, Drawable resizingBackgroundDrawable,
- Drawable captionBackgroundDrawableDrawable) {
+ Drawable captionBackgroundDrawableDrawable, Drawable userCaptionBackgroundDrawable,
+ int statusBarColor) {
mDecorView = decorView;
mResizingBackgroundDrawable = resizingBackgroundDrawable;
mCaptionBackgroundDrawable = captionBackgroundDrawableDrawable;
+ mUserCaptionBackgroundDrawable = userCaptionBackgroundDrawable;
+ if (statusBarColor != 0) {
+ mStatusBarColor = new ColorDrawable(statusBarColor);
+ addSystemBarNodeIfNeeded();
+ } else {
+ mStatusBarColor = null;
+ }
+ }
+
+ private void addSystemBarNodeIfNeeded() {
+ if (mSystemBarBackgroundNode != null) {
+ return;
+ }
+ mSystemBarBackgroundNode = RenderNode.create("SystemBarBackgroundNode", null);
+ mRenderer.addRenderNode(mSystemBarBackgroundNode, false);
}
/**
@@ -132,6 +154,9 @@
// Remove the render node again
// (see comment above - better to do that only once).
mRenderer.removeRenderNode(mFrameAndBackdropNode);
+ if (mSystemBarBackgroundNode != null) {
+ mRenderer.removeRenderNode(mSystemBarBackgroundNode);
+ }
mRenderer = null;
@@ -232,6 +257,8 @@
// inaccessible. For that case we remember the previous metrics to avoid flashes.
// Note that even when there is no visible caption, the caption child will exist.
final int captionHeight = mDecorView.getCaptionHeight();
+ final int statusBarHeight = mDecorView.getStatusBarHeight();
+
// The caption height will probably never dynamically change while we are resizing.
// Once set to something other then 0 it should be kept that way.
if (captionHeight != 0) {
@@ -256,15 +283,26 @@
mFrameAndBackdropNode.setLeftTopRightBottom(left, top, left + width, top + height);
// Draw the caption and content backdrops in to our render node.
- final DisplayListCanvas canvas = mFrameAndBackdropNode.start(width, height);
- mCaptionBackgroundDrawable.setBounds(0, 0, left + width, top + mLastCaptionHeight);
- mCaptionBackgroundDrawable.draw(canvas);
+ DisplayListCanvas canvas = mFrameAndBackdropNode.start(width, height);
+ final Drawable drawable = mUserCaptionBackgroundDrawable != null
+ ? mUserCaptionBackgroundDrawable : mCaptionBackgroundDrawable;
+ drawable.setBounds(0, 0, left + width, top + mLastCaptionHeight);
+ drawable.draw(canvas);
// The backdrop: clear everything with the background. Clipping is done elsewhere.
mResizingBackgroundDrawable.setBounds(0, mLastCaptionHeight, left + width, top + height);
mResizingBackgroundDrawable.draw(canvas);
mFrameAndBackdropNode.end(canvas);
+ if (mSystemBarBackgroundNode != null && mStatusBarColor != null) {
+ canvas = mSystemBarBackgroundNode.start(width, height);
+ mSystemBarBackgroundNode.setLeftTopRightBottom(left, top, left + width, top + height);
+ mStatusBarColor.setBounds(0, 0, left + width, statusBarHeight);
+ mStatusBarColor.draw(canvas);
+ mSystemBarBackgroundNode.end(canvas);
+ mRenderer.drawRenderNode(mSystemBarBackgroundNode);
+ }
+
// We need to render the node explicitly
mRenderer.drawRenderNode(mFrameAndBackdropNode);
@@ -291,4 +329,8 @@
mChoreographer.postFrameCallback(this);
}
}
+
+ void setUserCaptionBackgroundDrawable(Drawable userCaptionBackgroundDrawable) {
+ mUserCaptionBackgroundDrawable = userCaptionBackgroundDrawable;
+ }
}
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index 27fe03c..e405564 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -21,8 +21,7 @@
import com.android.internal.view.RootViewSurfaceTaker;
import com.android.internal.view.StandaloneActionMode;
import com.android.internal.view.menu.ContextMenuBuilder;
-import com.android.internal.view.menu.MenuDialogHelper;
-import com.android.internal.view.menu.MenuPopupHelper;
+import com.android.internal.view.menu.MenuHelper;
import com.android.internal.widget.ActionBarContextView;
import com.android.internal.widget.BackgroundFallback;
import com.android.internal.widget.DecorCaptionView;
@@ -75,6 +74,8 @@
import static android.view.View.MeasureSpec.getMode;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import static android.view.Window.DECOR_CAPTION_SHADE_DARK;
+import static android.view.Window.DECOR_CAPTION_SHADE_LIGHT;
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_TRANSLUCENT_NAVIGATION;
@@ -152,6 +153,8 @@
private final Interpolator mShowInterpolator;
private final Interpolator mHideInterpolator;
private final int mBarEnterExitDuration;
+ private final boolean mForceWindowDrawsStatusBarBackground;
+ private final int mSemiTransparentStatusBarColor;
private final BackgroundFallback mBackgroundFallback = new BackgroundFallback();
@@ -183,9 +186,10 @@
private boolean mWindowResizeCallbacksAdded = false;
- BackdropFrameRenderer mBackdropFrameRenderer = null;
+ private BackdropFrameRenderer mBackdropFrameRenderer = null;
private Drawable mResizingBackgroundDrawable;
private Drawable mCaptionBackgroundDrawable;
+ private Drawable mUserCaptionBackgroundDrawable;
DecorView(Context context, int featureId, PhoneWindow window) {
super(context);
@@ -198,6 +202,10 @@
mBarEnterExitDuration = context.getResources().getInteger(
R.integer.dock_enter_exit_duration);
+ mForceWindowDrawsStatusBarBackground = context.getResources().getBoolean(
+ R.bool.config_forceWindowDrawsStatusBarBackground);
+ mSemiTransparentStatusBarColor = context.getResources().getColor(
+ R.color.system_bar_background_semi_transparent, null /* theme */);
setWindow(window);
}
@@ -659,30 +667,23 @@
@Override
public boolean showContextMenuForChild(View originalView) {
- // Reuse the context menu builder
- if (mWindow.mContextMenu == null) {
- mWindow.mContextMenu = new ContextMenuBuilder(getContext());
- mWindow.mContextMenu.setCallback(mWindow.mContextMenuCallback);
- } else {
- mWindow.mContextMenu.clearAll();
- }
-
- final MenuDialogHelper helper = mWindow.mContextMenu.show(originalView,
- originalView.getWindowToken());
- if (helper != null) {
- helper.setPresenterCallback(mWindow.mContextMenuCallback);
- } else if (mWindow.mContextMenuHelper != null) {
- // No menu to show, but if we have a menu currently showing it just became blank.
- // Close it.
- mWindow.mContextMenuHelper.dismiss();
- }
- mWindow.mContextMenuHelper = helper;
- return helper != null;
+ return showContextMenuForChildInternal(originalView, 0, 0, false);
}
@Override
public boolean showContextMenuForChild(View originalView, float x, float y) {
- // Reuse the context menu builder
+ return showContextMenuForChildInternal(originalView, x, y, true);
+ }
+
+ private boolean showContextMenuForChildInternal(View originalView,
+ float x, float y, boolean isPopup) {
+ // Only allow one context menu at a time.
+ if (mWindow.mContextMenuHelper != null) {
+ mWindow.mContextMenuHelper.dismiss();
+ mWindow.mContextMenuHelper = null;
+ }
+
+ // Reuse the context menu builder.
if (mWindow.mContextMenu == null) {
mWindow.mContextMenu = new ContextMenuBuilder(getContext());
mWindow.mContextMenu.setCallback(mWindow.mContextMenuCallback);
@@ -690,16 +691,18 @@
mWindow.mContextMenu.clearAll();
}
- final MenuPopupHelper helper = mWindow.mContextMenu.showPopup(
- getContext(), originalView, x, y);
- if (helper != null) {
- helper.setCallback(mWindow.mContextMenuCallback);
- } else if (mWindow.mContextMenuPopupHelper != null) {
- // No menu to show, but if we have a menu currently showing it just became blank.
- // Close it.
- mWindow.mContextMenuPopupHelper.dismiss();
+ final MenuHelper helper;
+ if (isPopup) {
+ helper = mWindow.mContextMenu.showPopup(getContext(), originalView, x, y);
+ } else {
+ helper = mWindow.mContextMenu.showDialog(originalView, originalView.getWindowToken());
}
- mWindow.mContextMenuPopupHelper = helper;
+
+ if (helper != null) {
+ helper.setPresenterCallback(mWindow.mContextMenuCallback);
+ }
+
+ mWindow.mContextMenuHelper = helper;
return helper != null;
}
@@ -890,14 +893,15 @@
int navBarSize = navBarToRightEdge ? mLastRightInset : mLastBottomInset;
updateColorViewInt(mNavigationColorViewState, sysUiVisibility,
mWindow.mNavigationBarColor, navBarSize, navBarToRightEdge,
- 0 /* rightInset */, animate && !disallowAnimate);
+ 0 /* rightInset */, animate && !disallowAnimate, false /* force */);
boolean statusBarNeedsRightInset = navBarToRightEdge
&& mNavigationColorViewState.present;
int statusBarRightInset = statusBarNeedsRightInset ? mLastRightInset : 0;
- updateColorViewInt(mStatusColorViewState, sysUiVisibility, mWindow.mStatusBarColor,
- mLastTopInset, false /* matchVertical */, statusBarRightInset,
- animate && !disallowAnimate);
+ updateColorViewInt(mStatusColorViewState, sysUiVisibility,
+ calculateStatusBarColor(), mLastTopInset,
+ false /* matchVertical */, statusBarRightInset, animate && !disallowAnimate,
+ mForceWindowDrawsStatusBarBackground);
}
// When we expand the window with FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, we still need
@@ -941,6 +945,21 @@
return insets;
}
+ private int calculateStatusBarColor() {
+ int flags = mWindow.getAttributes().flags;
+ return (flags & FLAG_TRANSLUCENT_STATUS) != 0 ? mSemiTransparentStatusBarColor
+ : (flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 ? mWindow.mStatusBarColor
+ : Color.BLACK;
+ }
+
+ private int getCurrentColor(ColorViewState state) {
+ if (state.visible) {
+ return state.color;
+ } else {
+ return 0;
+ }
+ }
+
/**
* Update a color view
*
@@ -954,13 +973,15 @@
* @param animate if true, the change will be animated.
*/
private void updateColorViewInt(final ColorViewState state, int sysUiVis, int color,
- int size, boolean verticalBar, int rightMargin, boolean animate) {
+ int size, boolean verticalBar, int rightMargin, boolean animate, boolean force) {
state.present = size > 0 && (sysUiVis & state.systemUiHideFlag) == 0
&& (mWindow.getAttributes().flags & state.hideWindowFlag) == 0
- && (mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0;
+ && ((mWindow.getAttributes().flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
+ || force);
boolean show = state.present
&& (color & Color.BLACK) != 0
- && (mWindow.getAttributes().flags & state.translucentFlag) == 0;
+ && ((mWindow.getAttributes().flags & state.translucentFlag) == 0 || force);
+ boolean showView = show && !isResizing();
boolean visibilityChanged = false;
View view = state.view;
@@ -970,7 +991,7 @@
int resolvedGravity = verticalBar ? state.horizontalGravity : state.verticalGravity;
if (view == null) {
- if (show) {
+ if (showView) {
state.view = view = new View(mContext);
view.setBackgroundColor(color);
view.setTransitionName(state.transitionName);
@@ -986,7 +1007,7 @@
updateColorViewTranslations();
}
} else {
- int vis = show ? VISIBLE : INVISIBLE;
+ int vis = showView ? VISIBLE : INVISIBLE;
visibilityChanged = state.targetVisibility != vis;
state.targetVisibility = vis;
LayoutParams lp = (LayoutParams) view.getLayoutParams();
@@ -998,14 +1019,14 @@
lp.rightMargin = rightMargin;
view.setLayoutParams(lp);
}
- if (show) {
+ if (showView) {
view.setBackgroundColor(color);
}
}
if (visibilityChanged) {
view.animate().cancel();
- if (animate) {
- if (show) {
+ if (animate && !isResizing()) {
+ if (showView) {
if (view.getVisibility() != VISIBLE) {
view.setVisibility(VISIBLE);
view.setAlpha(0.0f);
@@ -1025,9 +1046,11 @@
}
} else {
view.setAlpha(1.0f);
- view.setVisibility(show ? VISIBLE : INVISIBLE);
+ view.setVisibility(showView ? VISIBLE : INVISIBLE);
}
}
+ state.visible = show;
+ state.color = color;
}
private void updateColorViewTranslations() {
@@ -1138,6 +1161,17 @@
lp.height = insets.getSystemWindowInsetBottom();
mNavigationGuard.setLayoutParams(lp);
}
+ updateNavigationGuardColor();
+ }
+ }
+
+ void updateNavigationGuardColor() {
+ if (mNavigationGuard != null) {
+ // Make navigation bar guard invisible if the transparent color is specified.
+ // Only TRANSPARENT is sufficient for hiding the navigation bar if the no software
+ // keyboard is shown by IMS.
+ mNavigationGuard.setVisibility(mWindow.getNavigationBarColor() == Color.TRANSPARENT ?
+ View.INVISIBLE : View.VISIBLE);
}
}
@@ -1549,17 +1583,20 @@
initializeElevation();
}
- View onResourcesLoaded(LayoutInflater inflater, int layoutResource) {
+ void onResourcesLoaded(LayoutInflater inflater, int layoutResource) {
mStackId = getStackId();
mResizingBackgroundDrawable = getResizingBackgroundDrawable(
mWindow.mBackgroundResource, mWindow.mBackgroundFallbackResource);
- mCaptionBackgroundDrawable =
- getContext().getDrawable(R.drawable.decor_caption_title_focused);
+ if (mCaptionBackgroundDrawable == null) {
+ mCaptionBackgroundDrawable = getContext().getDrawable(
+ R.drawable.decor_caption_title_focused);
+ }
if (mBackdropFrameRenderer != null) {
mBackdropFrameRenderer.onResourcesLoaded(
- this, mResizingBackgroundDrawable, mCaptionBackgroundDrawable);
+ this, mResizingBackgroundDrawable, mCaptionBackgroundDrawable,
+ mUserCaptionBackgroundDrawable, getCurrentColor(mStatusColorViewState));
}
mDecorCaptionView = createDecorCaptionView(inflater);
@@ -1576,17 +1613,16 @@
}
mContentRoot = (ViewGroup) root;
initializeElevation();
- return root;
}
// Free floating overlapping windows require a caption.
private DecorCaptionView createDecorCaptionView(LayoutInflater inflater) {
- DecorCaptionView DecorCaptionView = null;
- for (int i = getChildCount() - 1; i >= 0 && DecorCaptionView == null; i--) {
+ DecorCaptionView decorCaptionView = null;
+ for (int i = getChildCount() - 1; i >= 0 && decorCaptionView == null; i--) {
View view = getChildAt(i);
if (view instanceof DecorCaptionView) {
// The decor was most likely saved from a relaunch - so reuse it.
- DecorCaptionView = (DecorCaptionView) view;
+ decorCaptionView = (DecorCaptionView) view;
removeViewAt(i);
}
}
@@ -1598,27 +1634,72 @@
&& ActivityManager.StackId.hasWindowDecor(mStackId)) {
// Dependent on the brightness of the used title we either use the
// dark or the light button frame.
- if (DecorCaptionView == null) {
- Context context = getContext();
- TypedValue value = new TypedValue();
- context.getTheme().resolveAttribute(R.attr.colorPrimary, value, true);
- inflater = inflater.from(context);
- if (Color.luminance(value.data) < 0.5) {
- DecorCaptionView = (DecorCaptionView) inflater.inflate(
- R.layout.decor_caption_dark, null);
- } else {
- DecorCaptionView = (DecorCaptionView) inflater.inflate(
- R.layout.decor_caption_light, null);
- }
+ if (decorCaptionView == null) {
+ decorCaptionView = inflateDecorCaptionView(inflater);
}
- DecorCaptionView.setPhoneWindow(mWindow, true /*showDecor*/);
+ decorCaptionView.setPhoneWindow(mWindow, true /*showDecor*/);
} else {
- DecorCaptionView = null;
+ decorCaptionView = null;
}
// Tell the decor if it has a visible caption.
- enableCaption(DecorCaptionView != null);
- return DecorCaptionView;
+ enableCaption(decorCaptionView != null);
+ return decorCaptionView;
+ }
+
+ private DecorCaptionView inflateDecorCaptionView(LayoutInflater inflater) {
+ final Context context = getContext();
+ // We make a copy of the inflater, so it has the right context associated with it.
+ inflater = inflater.from(context);
+ final DecorCaptionView view = (DecorCaptionView) inflater.inflate(R.layout.decor_caption,
+ null);
+ setDecorCaptionShade(context, view);
+ return view;
+ }
+
+ private void setDecorCaptionShade(Context context, DecorCaptionView view) {
+ final int shade = mWindow.getDecorCaptionShade();
+ switch (shade) {
+ case DECOR_CAPTION_SHADE_LIGHT:
+ setLightDecorCaptionShade(view);
+ break;
+ case DECOR_CAPTION_SHADE_DARK:
+ setDarkDecorCaptionShade(view);
+ break;
+ default: {
+ TypedValue value = new TypedValue();
+ context.getTheme().resolveAttribute(R.attr.colorPrimary, value, true);
+ // We invert the shade depending on brightness of the theme. Dark shade for light
+ // theme and vice versa. Thanks to this the buttons should be visible on the
+ // background.
+ if (Color.luminance(value.data) < 0.5) {
+ setLightDecorCaptionShade(view);
+ } else {
+ setDarkDecorCaptionShade(view);
+ }
+ break;
+ }
+ }
+ }
+
+ void updateDecorCaptionShade() {
+ if (mDecorCaptionView != null) {
+ setDecorCaptionShade(getContext(), mDecorCaptionView);
+ }
+ }
+
+ private void setLightDecorCaptionShade(DecorCaptionView view) {
+ view.findViewById(R.id.maximize_window).setBackgroundResource(
+ R.drawable.decor_maximize_button_light);
+ view.findViewById(R.id.close_window).setBackgroundResource(
+ R.drawable.decor_close_button_light);
+ }
+
+ private void setDarkDecorCaptionShade(DecorCaptionView view) {
+ view.findViewById(R.id.maximize_window).setBackgroundResource(
+ R.drawable.decor_maximize_button_dark);
+ view.findViewById(R.id.close_window).setBackgroundResource(
+ R.drawable.decor_close_button_dark);
}
/**
@@ -1674,9 +1755,15 @@
if (mDecorCaptionView != null) {
mDecorCaptionView.removeContentView();
} else {
- // This window doesn't have caption, so we need to just remove the
- // children of the decor view.
- removeAllViews();
+ // This window doesn't have caption, so we need to remove everything except our views
+ // we might have added.
+ for (int i = getChildCount() - 1; i >= 0; i--) {
+ View v = getChildAt(i);
+ if (v != mStatusColorViewState.view && v != mNavigationColorViewState.view
+ && v != mStatusGuard && v != mNavigationGuard) {
+ removeViewAt(i);
+ }
+ }
}
}
@@ -1697,21 +1784,25 @@
if (mBackdropFrameRenderer != null) {
return;
}
- final ThreadedRenderer renderer = (ThreadedRenderer) getHardwareRenderer();
+ final ThreadedRenderer renderer = getHardwareRenderer();
if (renderer != null) {
mBackdropFrameRenderer = new BackdropFrameRenderer(this, renderer,
- initialBounds, mResizingBackgroundDrawable, mCaptionBackgroundDrawable);
+ initialBounds, mResizingBackgroundDrawable, mCaptionBackgroundDrawable,
+ mUserCaptionBackgroundDrawable, getCurrentColor(mStatusColorViewState));
// Get rid of the shadow while we are resizing. Shadow drawing takes considerable time.
// If we want to get the shadow shown while resizing, we would need to elevate a new
// element which owns the caption and has the elevation.
updateElevation();
+
+ updateColorViews(null /* insets */, false);
}
}
@Override
public void onWindowDragResizeEnd() {
releaseThreadedRenderer();
+ updateColorViews(null /* insets */, false);
}
@Override
@@ -1744,6 +1835,10 @@
}
}
+ private boolean isResizing() {
+ return mBackdropFrameRenderer != null;
+ }
+
/**
* The elevation gets set for the first time and the framework needs to be informed that
* the surface layer gets created with the shadow size in mind.
@@ -1759,8 +1854,7 @@
final boolean wasAdjustedForStack = mElevationAdjustedForStack;
// Do not use a shadow when we are in resizing mode (mBackdropFrameRenderer not null)
// since the shadow is bound to the content size and not the target size.
- if (ActivityManager.StackId.hasWindowShadow(mStackId)
- && mBackdropFrameRenderer == null) {
+ if (ActivityManager.StackId.hasWindowShadow(mStackId) && !isResizing()) {
elevation = hasWindowFocus() ?
DECOR_SHADOW_FOCUSED_HEIGHT_IN_DIP : DECOR_SHADOW_UNFOCUSED_HEIGHT_IN_DIP;
// TODO(skuhne): Remove this if clause once b/22668382 got fixed.
@@ -1790,6 +1884,10 @@
return isShowingCaption() ? mDecorCaptionView.getCaptionHeight() : 0;
}
+ int getStatusBarHeight() {
+ return mStatusColorViewState.view != null ? mStatusColorViewState.view.getHeight() : 0;
+ }
+
/**
* Converts a DIP measure into physical pixels.
* @param dip The dip value.
@@ -1800,10 +1898,22 @@
getResources().getDisplayMetrics());
}
+ /**
+ * Provide an override of the caption background drawable.
+ */
+ void setUserCaptionBackgroundDrawable(Drawable drawable) {
+ mUserCaptionBackgroundDrawable = drawable;
+ if (mBackdropFrameRenderer != null) {
+ mBackdropFrameRenderer.setUserCaptionBackgroundDrawable(drawable);
+ }
+ }
+
private static class ColorViewState {
View view = null;
int targetVisibility = View.INVISIBLE;
boolean present = false;
+ boolean visible;
+ int color;
final int id;
final int systemUiHideFlag;
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 6e7e5cf..86bd782 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -53,7 +53,7 @@
import com.android.internal.view.menu.ListMenuPresenter;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.view.menu.MenuDialogHelper;
-import com.android.internal.view.menu.MenuPopupHelper;
+import com.android.internal.view.menu.MenuHelper;
import com.android.internal.view.menu.MenuPresenter;
import com.android.internal.view.menu.MenuView;
import com.android.internal.widget.DecorContentParent;
@@ -94,7 +94,6 @@
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
-import android.widget.LinearLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -232,8 +231,7 @@
private boolean mAlwaysReadCloseOnTouchAttr = false;
ContextMenuBuilder mContextMenu;
- MenuDialogHelper mContextMenuHelper;
- MenuPopupHelper mContextMenuPopupHelper;
+ MenuHelper mContextMenuHelper;
private boolean mClosingActionMenu;
private int mVolumeControlStreamType = AudioManager.USE_DEFAULT_STREAM_TYPE;
@@ -274,6 +272,8 @@
private boolean mIsStartingWindow;
private int mTheme = -1;
+ private int mDecorCaptionShade = DECOR_CAPTION_SHADE_AUTO;
+
static class WindowManagerHolder {
static final IWindowManager sWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService("window"));
@@ -424,30 +424,6 @@
}
@Override
- public void setDecorView(int layoutResID) {
- View v = mLayoutInflater.inflate(layoutResID, null);
- setDecorView(v);
- }
-
- @Override
- public void setDecorView(View view) {
- if (mContentParent == null) {
- installDecor();
- }
-
- LinearLayout clientDecorPlaceholder =
- (LinearLayout) findViewById(R.id.client_decor_placeholder);
-
- if (clientDecorPlaceholder != null) {
- clientDecorPlaceholder.removeAllViews();
-
- if (view != null) {
- clientDecorPlaceholder.addView(view);
- }
- }
- }
-
- @Override
public void addContentView(View view, ViewGroup.LayoutParams params) {
if (mContentParent == null) {
installDecor();
@@ -1103,10 +1079,6 @@
mContextMenuHelper.dismiss();
mContextMenuHelper = null;
}
- if (mContextMenuPopupHelper != null) {
- mContextMenuPopupHelper.dismiss();
- mContextMenuPopupHelper = null;
- }
}
@Override
@@ -2411,6 +2383,13 @@
setNeedsMenuKey(WindowManager.LayoutParams.NEEDS_MENU_SET_FALSE);
}
+ if (!mForcedStatusBarColor) {
+ mStatusBarColor = a.getColor(R.styleable.Window_statusBarColor, 0xFF000000);
+ }
+ if (!mForcedNavigationBarColor) {
+ mNavigationBarColor = a.getColor(R.styleable.Window_navigationBarColor, 0xFF000000);
+ }
+
// Non-floating windows on high end devices must put up decor beneath the system bars and
// therefore must know about visibility changes of those.
if (!mIsFloating && ActivityManager.isHighEndGfx()) {
@@ -2421,12 +2400,6 @@
FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS & ~getForcedWindowFlags());
}
}
- if (!mForcedStatusBarColor) {
- mStatusBarColor = a.getColor(R.styleable.Window_statusBarColor, 0xFF000000);
- }
- if (!mForcedNavigationBarColor) {
- mNavigationBarColor = a.getColor(R.styleable.Window_navigationBarColor, 0xFF000000);
- }
if (a.getBoolean(R.styleable.Window_windowLightStatusBar, false)) {
decor.setSystemUiVisibility(
decor.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
@@ -2555,7 +2528,7 @@
}
mDecor.startChanging();
- final View in = mDecor.onResourcesLoaded(mLayoutInflater, layoutResource);
+ mDecor.onResourcesLoaded(mLayoutInflater, layoutResource);
ViewGroup contentParent = (ViewGroup)findViewById(ID_ANDROID_CONTENT);
if (contentParent == null) {
@@ -3730,6 +3703,7 @@
mForcedNavigationBarColor = true;
if (mDecor != null) {
mDecor.updateColorViews(null, false /* animate */);
+ mDecor.updateNavigationGuardColor();
}
}
@@ -3747,4 +3721,21 @@
}
}
}
+
+ @Override
+ public void setResizingCaptionDrawable(Drawable drawable) {
+ mDecor.setUserCaptionBackgroundDrawable(drawable);
+ }
+
+ @Override
+ public void setDecorCaptionShade(int decorCaptionShade) {
+ mDecorCaptionShade = decorCaptionShade;
+ if (mDecor != null) {
+ mDecor.updateDecorCaptionShade();
+ }
+ }
+
+ int getDecorCaptionShade() {
+ return mDecorCaptionShade;
+ }
}
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java
index 6816646..554d367 100644
--- a/core/java/com/android/internal/util/StateMachine.java
+++ b/core/java/com/android/internal/util/StateMachine.java
@@ -1879,6 +1879,33 @@
}
/**
+ * Check if there are any pending messages with code 'what' in deferred messages queue.
+ */
+ protected final boolean hasDeferredMessages(int what) {
+ SmHandler smh = mSmHandler;
+ if (smh == null) return false;
+
+ Iterator<Message> iterator = smh.mDeferredMessages.iterator();
+ while (iterator.hasNext()) {
+ Message msg = iterator.next();
+ if (msg.what == what) return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Check if there are any pending posts of messages with code 'what' in
+ * the message queue. This does NOT check messages in deferred message queue.
+ */
+ protected final boolean hasMessages(int what) {
+ SmHandler smh = mSmHandler;
+ if (smh == null) return false;
+
+ return smh.hasMessages(what);
+ }
+
+ /**
* Validate that the message was sent by
* {@link StateMachine#quit} or {@link StateMachine#quitNow}.
* */
diff --git a/core/java/com/android/internal/util/WakeupMessage.java b/core/java/com/android/internal/util/WakeupMessage.java
new file mode 100644
index 0000000..77859b8
--- /dev/null
+++ b/core/java/com/android/internal/util/WakeupMessage.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.util;
+
+import android.app.AlarmManager;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+
+ /**
+ * An AlarmListener that sends the specified message to a Handler and keeps the system awake until
+ * the message is processed.
+ *
+ * This is useful when using the AlarmManager direct callback interface to wake up the system and
+ * request that an object whose API consists of messages (such as a StateMachine) perform some
+ * action.
+ *
+ * In this situation, using AlarmManager.onAlarmListener by itself will wake up the system to send
+ * the message, but does not guarantee that the system will be awake until the target object has
+ * processed it. This is because as soon as the onAlarmListener sends the message and returns, the
+ * AlarmManager releases its wakelock and the system is free to go to sleep again.
+ *
+ */
+public class WakeupMessage implements AlarmManager.OnAlarmListener {
+ private static AlarmManager sAlarmManager;
+ private final Handler mHandler;
+ private final String mCmdName;
+ private final int mCmd, mArg1, mArg2;
+
+ public WakeupMessage(Context context, Handler handler,
+ String cmdName, int cmd, int arg1, int arg2) {
+ if (sAlarmManager == null) {
+ sAlarmManager = context.getSystemService(AlarmManager.class);
+ }
+ mHandler = handler;
+ mCmdName = cmdName;
+ mCmd = cmd;
+ mArg1 = arg1;
+ mArg2 = arg2;
+ }
+
+ public WakeupMessage(Context context, Handler handler, String cmdName, int cmd, int arg1) {
+ this(context, handler, cmdName, cmd, arg1, 0);
+ }
+
+ public WakeupMessage(Context context, Handler handler, String cmdName, int cmd) {
+ this(context, handler, cmdName, cmd, 0, 0);
+ }
+
+ public void schedule(long when) {
+ sAlarmManager.setExact(
+ AlarmManager.ELAPSED_REALTIME_WAKEUP, when, mCmdName, this, mHandler);
+ }
+
+ public void cancel() {
+ sAlarmManager.cancel(this);
+ }
+
+ @Override
+ public void onAlarm() {
+ Message msg = mHandler.obtainMessage(mCmd, mArg1, mArg2);
+ mHandler.handleMessage(msg);
+ msg.recycle();
+ }
+}
diff --git a/core/java/com/android/internal/view/ActionBarPolicy.java b/core/java/com/android/internal/view/ActionBarPolicy.java
index 007ab29..755faf3 100644
--- a/core/java/com/android/internal/view/ActionBarPolicy.java
+++ b/core/java/com/android/internal/view/ActionBarPolicy.java
@@ -78,7 +78,11 @@
// The embedded tabs policy changed in Jellybean; give older apps the old policy
// so they get what they expect.
- return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb);
+ final Configuration configuration = mContext.getResources().getConfiguration();
+ final int width = configuration.screenWidthDp;
+ final int height = configuration.screenHeightDp;
+ return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE ||
+ width >= 480 || (width >= 640 && height >= 480);
}
public int getTabContainerHeight() {
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index ce5bc90..bd97e5d 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -72,8 +72,7 @@
public ActionMenuItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
final Resources res = context.getResources();
- mAllowTextWithIcon = res.getBoolean(
- com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
+ mAllowTextWithIcon = shouldAllowTextWithIcon();
final TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.ActionMenuItemView, defStyleAttr, defStyleRes);
mMinWidth = a.getDimensionPixelSize(
@@ -93,11 +92,22 @@
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- mAllowTextWithIcon = getContext().getResources().getBoolean(
- com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
+ mAllowTextWithIcon = shouldAllowTextWithIcon();
updateTextButtonVisibility();
}
+ /**
+ * Whether action menu items should obey the "withText" showAsAction flag. This may be set to
+ * false for situations where space is extremely limited. -->
+ */
+ private boolean shouldAllowTextWithIcon() {
+ final Configuration configuration = getContext().getResources().getConfiguration();
+ final int width = configuration.screenWidthDp;
+ final int height = configuration.screenHeightDp;
+ return width >= 480 || (width >= 640 && height >= 480)
+ || configuration.orientation == Configuration.ORIENTATION_LANDSCAPE;
+ }
+
@Override
public void setPadding(int l, int t, int r, int b) {
mSavedPaddingLeft = l;
diff --git a/core/java/com/android/internal/view/menu/ContextMenuBuilder.java b/core/java/com/android/internal/view/menu/ContextMenuBuilder.java
index aaa1bf1..82f061c 100644
--- a/core/java/com/android/internal/view/menu/ContextMenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/ContextMenuBuilder.java
@@ -17,7 +17,6 @@
package com.android.internal.view.menu;
import android.content.Context;
-import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.IBinder;
import android.util.EventLog;
@@ -35,7 +34,7 @@
* <p>
* To use this class, instantiate it via {@link #ContextMenuBuilder(Context)},
* and optionally populate it with any of your custom items. Finally,
- * call {@link #show(View, IBinder)} which will populate the menu
+ * call {@link #showDialog(View, IBinder)} which will populate the menu
* with a view's context menu items and show the context menu.
*/
public class ContextMenuBuilder extends MenuBuilder implements ContextMenu {
@@ -75,7 +74,7 @@
* @return If the context menu was shown, the {@link MenuDialogHelper} for
* dismissing it. Otherwise, null.
*/
- public MenuDialogHelper show(View originalView, IBinder token) {
+ public MenuDialogHelper showDialog(View originalView, IBinder token) {
if (originalView != null) {
// Let relevant views and their populate context listeners populate
// the context menu
diff --git a/core/java/com/android/internal/view/menu/MenuDialogHelper.java b/core/java/com/android/internal/view/menu/MenuDialogHelper.java
index b9e0e40..ecab29f 100644
--- a/core/java/com/android/internal/view/menu/MenuDialogHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuDialogHelper.java
@@ -26,13 +26,10 @@
import android.view.WindowManager;
/**
- * Helper for menus that appear as Dialogs (context and submenus).
- *
- * @hide
+ * Presents a menu as a modal dialog.
*/
-public class MenuDialogHelper implements DialogInterface.OnKeyListener,
- DialogInterface.OnClickListener,
- DialogInterface.OnDismissListener,
+public class MenuDialogHelper implements MenuHelper, DialogInterface.OnKeyListener,
+ DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
MenuPresenter.Callback {
private MenuBuilder mMenu;
private AlertDialog mDialog;
@@ -125,6 +122,7 @@
}
+ @Override
public void setPresenterCallback(MenuPresenter.Callback cb) {
mPresenterCallback = cb;
}
@@ -134,6 +132,7 @@
*
* @see Dialog#dismiss()
*/
+ @Override
public void dismiss() {
if (mDialog != null) {
mDialog.dismiss();
diff --git a/core/java/com/android/internal/view/menu/MenuHelper.java b/core/java/com/android/internal/view/menu/MenuHelper.java
new file mode 100644
index 0000000..9534722
--- /dev/null
+++ b/core/java/com/android/internal/view/menu/MenuHelper.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.menu;
+
+/**
+ * Interface for a helper capable of presenting a menu.
+ */
+public interface MenuHelper {
+ void setPresenterCallback(MenuPresenter.Callback cb);
+ void dismiss();
+}
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index 59d5f94..044ee6e 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -30,7 +30,7 @@
/**
* Presents a menu as a small, simple popup anchored to another view.
*/
-public class MenuPopupHelper {
+public class MenuPopupHelper implements MenuHelper {
private final Context mContext;
// Immutable cached popup menu properties.
@@ -244,6 +244,7 @@
/**
* Dismisses the popup, if showing.
*/
+ @Override
public void dismiss() {
if (isShowing()) {
mPopup.dismiss();
@@ -270,7 +271,8 @@
return mPopup != null && mPopup.isShowing();
}
- public void setCallback(@Nullable MenuPresenter.Callback cb) {
+ @Override
+ public void setPresenterCallback(@Nullable MenuPresenter.Callback cb) {
mPresenterCallback = cb;
if (mPopup != null) {
mPopup.setCallback(cb);
diff --git a/core/java/com/android/internal/view/menu/StandardMenuPopup.java b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
index caee0d2..6a5f6d8 100644
--- a/core/java/com/android/internal/view/menu/StandardMenuPopup.java
+++ b/core/java/com/android/internal/view/menu/StandardMenuPopup.java
@@ -245,7 +245,7 @@
MenuPopupHelper subPopup = new MenuPopupHelper(
mContext, subMenu, mShownAnchorView, mOverflowOnly, mPopupStyleAttr,
mPopupStyleRes);
- subPopup.setCallback(mPresenterCallback);
+ subPopup.setPresenterCallback(mPresenterCallback);
subPopup.setForceShowIcon(mAdapter.getForceShowIcon());
if (subPopup.tryShow()) {
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index 3e65320..c3a7460 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -360,11 +360,6 @@
}
@Override
- public int findDependentLayoutAxes(View child, int axisFilter) {
- return findDependentLayoutAxesHelper(child, axisFilter, LayoutParams.class);
- }
-
- @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
pullChildren();
diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java
index d747686..c3fe9e7 100644
--- a/core/java/com/android/internal/widget/DecorCaptionView.java
+++ b/core/java/com/android/internal/widget/DecorCaptionView.java
@@ -319,6 +319,10 @@
captionHeight + mContent.getMeasuredHeight());
}
}
+
+ // This assumes that the caption bar is at the top.
+ mOwner.notifyRestrictedCaptionAreaCallback(mMaximize.getLeft(), mMaximize.getTop(),
+ mClose.getRight(), mClose.getBottom());
}
/**
* Determine if the workspace is entirely covered by the window.
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 889c7b3..6c223c3 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -1270,6 +1270,10 @@
}
}
+ public static boolean isSeparateWorkChallengeEnabled() {
+ return StorageManager.isFileBasedEncryptionEnabled();
+ }
+
public void registerStrongAuthTracker(final StrongAuthTracker strongAuthTracker) {
try {
getLockSettings().registerStrongAuthTracker(strongAuthTracker.mStub);
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index 0473016f..f1e7afb 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -199,7 +199,6 @@
external/sqlite/android \
external/expat/lib \
external/tremor/Tremor \
- external/jpeg \
external/harfbuzz_ng/src \
libcore/include \
$(call include-path-for, audio-utils) \
diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp
index 3cdf640..f10f4bd 100644
--- a/core/jni/android/graphics/BitmapRegionDecoder.cpp
+++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp
@@ -16,17 +16,20 @@
#define LOG_TAG "BitmapRegionDecoder"
-#include "AutoDecodeCancel.h"
#include "BitmapFactory.h"
#include "CreateJavaOutputStreamAdaptor.h"
-#include "SkBitmap.h"
-#include "SkData.h"
#include "GraphicsJNI.h"
-#include "SkImageEncoder.h"
+#include "Utils.h"
+
+#include "SkBitmap.h"
+#include "SkBitmapRegionDecoder.h"
+#include "SkCodec.h"
+#include "SkData.h"
+#include "SkEncodedFormat.h"
#include "SkUtils.h"
#include "SkPixelRef.h"
#include "SkStream.h"
-#include "Utils.h"
+
#include "android_nio_utils.h"
#include "android_util_Binder.h"
#include "core_jni_helpers.h"
@@ -39,60 +42,54 @@
using namespace android;
-class BitmapRegionDecoder {
-public:
- BitmapRegionDecoder(SkImageDecoder* decoder, int width, int height) {
- fDecoder = decoder;
- fWidth = width;
- fHeight = height;
- }
- ~BitmapRegionDecoder() {
- delete fDecoder;
+// This is very similar to, and based on, getMimeTypeString() in BitmapFactory.
+jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format) {
+ const char* mimeType;
+ switch (format) {
+ case SkEncodedFormat::kBMP_SkEncodedFormat:
+ mimeType = "image/bmp";
+ break;
+ case SkEncodedFormat::kGIF_SkEncodedFormat:
+ mimeType = "image/gif";
+ break;
+ case SkEncodedFormat::kICO_SkEncodedFormat:
+ mimeType = "image/x-ico";
+ break;
+ case SkEncodedFormat::kJPEG_SkEncodedFormat:
+ mimeType = "image/jpeg";
+ break;
+ case SkEncodedFormat::kPNG_SkEncodedFormat:
+ mimeType = "image/png";
+ break;
+ case SkEncodedFormat::kWEBP_SkEncodedFormat:
+ mimeType = "image/webp";
+ break;
+ case SkEncodedFormat::kWBMP_SkEncodedFormat:
+ mimeType = "image/vnd.wap.wbmp";
+ break;
+ default:
+ mimeType = nullptr;
+ break;
}
- bool decodeRegion(SkBitmap* bitmap, const SkIRect& rect,
- SkColorType pref, int sampleSize) {
- fDecoder->setSampleSize(sampleSize);
- return fDecoder->decodeSubset(bitmap, rect, pref);
+ jstring jstr = nullptr;
+ if (mimeType != nullptr) {
+ jstr = env->NewStringUTF(mimeType);
}
-
- SkImageDecoder* getDecoder() const { return fDecoder; }
- int getWidth() const { return fWidth; }
- int getHeight() const { return fHeight; }
-
-private:
- SkImageDecoder* fDecoder;
- int fWidth;
- int fHeight;
-};
+ return jstr;
+}
// Takes ownership of the SkStreamRewindable. For consistency, deletes stream even
// when returning null.
static jobject createBitmapRegionDecoder(JNIEnv* env, SkStreamRewindable* stream) {
- SkImageDecoder* decoder = SkImageDecoder::Factory(stream);
- int width, height;
- if (NULL == decoder) {
- delete stream;
+ SkAutoTDelete<SkBitmapRegionDecoder> brd(
+ SkBitmapRegionDecoder::Create(stream, SkBitmapRegionDecoder::kAndroidCodec_Strategy));
+ if (NULL == brd) {
doThrowIOE(env, "Image format not supported");
- return nullObjectReturn("SkImageDecoder::Factory returned null");
+ return nullObjectReturn("CreateBitmapRegionDecoder returned null");
}
- JavaPixelAllocator *javaAllocator = new JavaPixelAllocator(env);
- decoder->setAllocator(javaAllocator);
- javaAllocator->unref();
-
- // This call passes ownership of stream to the decoder, or deletes on failure.
- if (!decoder->buildTileIndex(stream, &width, &height)) {
- char msg[100];
- snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder",
- decoder->getFormatName());
- doThrowIOE(env, msg);
- delete decoder;
- return nullObjectReturn("decoder->buildTileIndex returned false");
- }
-
- BitmapRegionDecoder *bm = new BitmapRegionDecoder(decoder, width, height);
- return GraphicsJNI::createBitmapRegionDecoder(env, bm);
+ return GraphicsJNI::createBitmapRegionDecoder(env, brd.detach());
}
static jobject nativeNewInstanceFromByteArray(JNIEnv* env, jobject, jbyteArray byteArray,
@@ -160,102 +157,106 @@
/*
* nine patch not supported
- *
* purgeable not supported
* reportSizeToVM not supported
*/
-static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle,
- jint start_x, jint start_y, jint width, jint height, jobject options) {
- BitmapRegionDecoder *brd = reinterpret_cast<BitmapRegionDecoder*>(brdHandle);
- jobject tileBitmap = NULL;
- SkImageDecoder *decoder = brd->getDecoder();
- int sampleSize = 1;
- SkColorType prefColorType = kUnknown_SkColorType;
- bool doDither = true;
- bool preferQualityOverSpeed = false;
- bool requireUnpremultiplied = false;
+static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint inputX,
+ jint inputY, jint inputWidth, jint inputHeight, jobject options) {
+ // Set default options.
+ int sampleSize = 1;
+ SkColorType colorType = kN32_SkColorType;
+ bool requireUnpremul = false;
+ jobject javaBitmap = NULL;
+
+ // Update the default options with any options supplied by the client.
if (NULL != options) {
sampleSize = env->GetIntField(options, gOptions_sampleSizeFieldID);
- // initialize these, in case we fail later on
+ jobject jconfig = env->GetObjectField(options, gOptions_configFieldID);
+ colorType = GraphicsJNI::getNativeBitmapColorType(env, jconfig);
+ if (kAlpha_8_SkColorType == colorType) {
+ colorType = kGray_8_SkColorType;
+ }
+ requireUnpremul = !env->GetBooleanField(options, gOptions_premultipliedFieldID);
+ javaBitmap = env->GetObjectField(options, gOptions_bitmapFieldID);
+ // The Java options of ditherMode and preferQualityOverSpeed are deprecated. We will
+ // ignore the values of these fields.
+
+ // Initialize these fields to indicate a failure. If the decode succeeds, we
+ // will update them later on.
env->SetIntField(options, gOptions_widthFieldID, -1);
env->SetIntField(options, gOptions_heightFieldID, -1);
env->SetObjectField(options, gOptions_mimeFieldID, 0);
-
- jobject jconfig = env->GetObjectField(options, gOptions_configFieldID);
- prefColorType = GraphicsJNI::getNativeBitmapColorType(env, jconfig);
- doDither = env->GetBooleanField(options, gOptions_ditherFieldID);
- preferQualityOverSpeed = env->GetBooleanField(options,
- gOptions_preferQualityOverSpeedFieldID);
- // Get the bitmap for re-use if it exists.
- tileBitmap = env->GetObjectField(options, gOptions_bitmapFieldID);
- requireUnpremultiplied = !env->GetBooleanField(options, gOptions_premultipliedFieldID);
}
- decoder->setDitherImage(doDither);
- decoder->setPreferQualityOverSpeed(preferQualityOverSpeed);
- decoder->setRequireUnpremultipliedColors(requireUnpremultiplied);
- AutoDecoderCancel adc(options, decoder);
-
- // To fix the race condition in case "requestCancelDecode"
- // happens earlier than AutoDecoderCancel object is added
- // to the gAutoDecoderCancelMutex linked list.
- if (NULL != options && env->GetBooleanField(options, gOptions_mCancelID)) {
- return nullObjectReturn("gOptions_mCancelID");;
+ // Recycle a bitmap if possible.
+ android::Bitmap* recycledBitmap = nullptr;
+ size_t recycledBytes = 0;
+ if (javaBitmap) {
+ recycledBitmap = GraphicsJNI::getBitmap(env, javaBitmap);
+ if (recycledBitmap->peekAtPixelRef()->isImmutable()) {
+ ALOGW("Warning: Reusing an immutable bitmap as an image decoder target.");
+ }
+ recycledBytes = GraphicsJNI::getBitmapAllocationByteCount(env, javaBitmap);
}
- SkIRect region;
- region.fLeft = start_x;
- region.fTop = start_y;
- region.fRight = start_x + width;
- region.fBottom = start_y + height;
+ // Set up the pixel allocator
+ SkBRDAllocator* allocator = nullptr;
+ RecyclingClippingPixelAllocator recycleAlloc(recycledBitmap, recycledBytes);
+ JavaPixelAllocator javaAlloc(env);
+ if (javaBitmap) {
+ allocator = &recycleAlloc;
+ // We are required to match the color type of the recycled bitmap.
+ colorType = recycledBitmap->info().colorType();
+ } else {
+ allocator = &javaAlloc;
+ }
+
+ // Decode the region.
+ SkIRect subset = SkIRect::MakeXYWH(inputX, inputY, inputWidth, inputHeight);
+ SkBitmapRegionDecoder* brd =
+ reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
SkBitmap bitmap;
-
- if (tileBitmap != NULL) {
- // Re-use bitmap.
- GraphicsJNI::getSkBitmap(env, tileBitmap, &bitmap);
+ if (!brd->decodeRegion(&bitmap, allocator, subset, sampleSize, colorType, requireUnpremul)) {
+ return nullObjectReturn("Failed to decode region.");
}
- if (!brd->decodeRegion(&bitmap, region, prefColorType, sampleSize)) {
- return nullObjectReturn("decoder->decodeRegion returned false");
- }
-
- // update options (if any)
+ // If the client provided options, indicate that the decode was successful.
if (NULL != options) {
env->SetIntField(options, gOptions_widthFieldID, bitmap.width());
env->SetIntField(options, gOptions_heightFieldID, bitmap.height());
- // TODO: set the mimeType field with the data from the codec.
- // but how to reuse a set of strings, rather than allocating new one
- // each time?
env->SetObjectField(options, gOptions_mimeFieldID,
- getMimeTypeString(env, decoder->getFormat()));
+ encodedFormatToString(env, brd->getEncodedFormat()));
}
- if (tileBitmap != NULL) {
- bitmap.notifyPixelsChanged();
- return tileBitmap;
+ // If we may have reused a bitmap, we need to indicate that the pixels have changed.
+ if (javaBitmap) {
+ recycleAlloc.copyIfNecessary();
+ return javaBitmap;
}
- JavaPixelAllocator* allocator = (JavaPixelAllocator*) decoder->getAllocator();
-
int bitmapCreateFlags = 0;
- if (!requireUnpremultiplied) bitmapCreateFlags |= GraphicsJNI::kBitmapCreateFlag_Premultiplied;
- return GraphicsJNI::createBitmap(env, allocator->getStorageObjAndReset(),
- bitmapCreateFlags);
+ if (!requireUnpremul) {
+ bitmapCreateFlags |= GraphicsJNI::kBitmapCreateFlag_Premultiplied;
+ }
+ return GraphicsJNI::createBitmap(env, javaAlloc.getStorageObjAndReset(), bitmapCreateFlags);
}
static jint nativeGetHeight(JNIEnv* env, jobject, jlong brdHandle) {
- BitmapRegionDecoder *brd = reinterpret_cast<BitmapRegionDecoder*>(brdHandle);
- return static_cast<jint>(brd->getHeight());
+ SkBitmapRegionDecoder* brd =
+ reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
+ return static_cast<jint>(brd->height());
}
static jint nativeGetWidth(JNIEnv* env, jobject, jlong brdHandle) {
- BitmapRegionDecoder *brd = reinterpret_cast<BitmapRegionDecoder*>(brdHandle);
- return static_cast<jint>(brd->getWidth());
+ SkBitmapRegionDecoder* brd =
+ reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
+ return static_cast<jint>(brd->width());
}
static void nativeClean(JNIEnv* env, jobject, jlong brdHandle) {
- BitmapRegionDecoder *brd = reinterpret_cast<BitmapRegionDecoder*>(brdHandle);
+ SkBitmapRegionDecoder* brd =
+ reinterpret_cast<SkBitmapRegionDecoder*>(brdHandle);
delete brd;
}
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index ed44019..3d5091a 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -439,7 +439,7 @@
return env->CallIntMethod(javaBitmap, gBitmap_getAllocationByteCountMethodID);
}
-jobject GraphicsJNI::createBitmapRegionDecoder(JNIEnv* env, BitmapRegionDecoder* bitmap)
+jobject GraphicsJNI::createBitmapRegionDecoder(JNIEnv* env, SkBitmapRegionDecoder* bitmap)
{
SkASSERT(bitmap != NULL);
@@ -677,6 +677,91 @@
////////////////////////////////////////////////////////////////////////////////
+RecyclingClippingPixelAllocator::RecyclingClippingPixelAllocator(
+ android::Bitmap* recycledBitmap, size_t recycledBytes)
+ : mRecycledBitmap(recycledBitmap)
+ , mRecycledBytes(recycledBytes)
+ , mSkiaBitmap(nullptr)
+ , mNeedsCopy(false)
+{}
+
+RecyclingClippingPixelAllocator::~RecyclingClippingPixelAllocator() {}
+
+bool RecyclingClippingPixelAllocator::allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
+ // Ensure that the caller did not pass in a NULL bitmap to the constructor or this
+ // function.
+ LOG_ALWAYS_FATAL_IF(!mRecycledBitmap);
+ LOG_ALWAYS_FATAL_IF(!bitmap);
+ mSkiaBitmap = bitmap;
+
+ // This behaves differently than the RecyclingPixelAllocator. For backwards
+ // compatibility, the original color type of the recycled bitmap must be maintained.
+ if (mRecycledBitmap->info().colorType() != bitmap->colorType()) {
+ return false;
+ }
+
+ // The Skia bitmap specifies the width and height needed by the decoder.
+ // mRecycledBitmap specifies the width and height of the bitmap that we
+ // want to reuse. Neither can be changed. We will try to find a way
+ // to reuse the memory.
+ const int maxWidth = SkTMax(bitmap->width(), mRecycledBitmap->info().width());
+ const int maxHeight = SkTMax(bitmap->height(), mRecycledBitmap->info().height());
+ const SkImageInfo maxInfo = bitmap->info().makeWH(maxWidth, maxHeight);
+ const size_t rowBytes = maxInfo.minRowBytes();
+ const size_t bytesNeeded = maxInfo.getSafeSize(rowBytes);
+ if (bytesNeeded <= mRecycledBytes) {
+ // Here we take advantage of reconfigure() to reset the rowBytes and ctable
+ // of mRecycledBitmap. It is very important that we pass in
+ // mRecycledBitmap->info() for the SkImageInfo. According to the
+ // specification for BitmapRegionDecoder, we are not allowed to change
+ // the SkImageInfo.
+ mRecycledBitmap->reconfigure(mRecycledBitmap->info(), rowBytes, ctable);
+
+ // This call will give the bitmap the same pixelRef as mRecycledBitmap.
+ bitmap->setPixelRef(mRecycledBitmap->refPixelRef())->unref();
+
+ // Make sure that the recycled bitmap has the correct alpha type.
+ mRecycledBitmap->setAlphaType(bitmap->alphaType());
+
+ bitmap->lockPixels();
+ mNeedsCopy = false;
+
+ // TODO: If the dimensions of the SkBitmap are smaller than those of
+ // mRecycledBitmap, should we zero the memory in mRecycledBitmap?
+ return true;
+ }
+
+ // In the event that mRecycledBitmap is not large enough, allocate new memory
+ // on the heap.
+ SkBitmap::HeapAllocator heapAllocator;
+
+ // We will need to copy from heap memory to mRecycledBitmap's memory after the
+ // decode is complete.
+ mNeedsCopy = true;
+
+ return heapAllocator.allocPixelRef(bitmap, ctable);
+}
+
+void RecyclingClippingPixelAllocator::copyIfNecessary() {
+ if (mNeedsCopy) {
+ SkPixelRef* recycledPixels = mRecycledBitmap->refPixelRef();
+ void* dst = recycledPixels->pixels();
+ size_t dstRowBytes = mRecycledBitmap->rowBytes();
+ size_t bytesToCopy = SkTMin(mRecycledBitmap->info().minRowBytes(),
+ mSkiaBitmap->info().minRowBytes());
+ for (int y = 0; y < mRecycledBitmap->info().height(); y++) {
+ memcpy(dst, mSkiaBitmap->getAddr(0, y), bytesToCopy);
+ dst = SkTAddOffset<void>(dst, dstRowBytes);
+ }
+ recycledPixels->notifyPixelsChanged();
+ recycledPixels->unref();
+ }
+ mRecycledBitmap = nullptr;
+ mSkiaBitmap = nullptr;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
AshmemPixelAllocator::AshmemPixelAllocator(JNIEnv *env) {
LOG_ALWAYS_FATAL_IF(env->GetJavaVM(&mJavaVM) != JNI_OK,
"env->GetJavaVM failed");
diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h
index 90f8291..e99a3ff 100644
--- a/core/jni/android/graphics/GraphicsJNI.h
+++ b/core/jni/android/graphics/GraphicsJNI.h
@@ -3,6 +3,8 @@
#include "Bitmap.h"
#include "SkBitmap.h"
+#include "SkBRDAllocator.h"
+#include "SkCodec.h"
#include "SkDevice.h"
#include "SkPixelRef.h"
#include "SkMallocPixelRef.h"
@@ -12,7 +14,7 @@
#include <Canvas.h>
#include <jni.h>
-class BitmapRegionDecoder;
+class SkBitmapRegionDecoder;
class SkCanvas;
namespace android {
@@ -90,7 +92,7 @@
static jobject createRegion(JNIEnv* env, SkRegion* region);
- static jobject createBitmapRegionDecoder(JNIEnv* env, BitmapRegionDecoder* bitmap);
+ static jobject createBitmapRegionDecoder(JNIEnv* env, SkBitmapRegionDecoder* bitmap);
static android::Bitmap* allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
SkColorTable* ctable);
@@ -123,7 +125,7 @@
* ensure that the allocated buffer is properly accounted for with a
* reference in the heap (or a JNI global reference).
*/
-class JavaPixelAllocator : public SkBitmap::Allocator {
+class JavaPixelAllocator : public SkBRDAllocator {
public:
JavaPixelAllocator(JNIEnv* env);
~JavaPixelAllocator();
@@ -139,11 +141,78 @@
return result;
};
+ /**
+ * Indicates that this allocator allocates zero initialized
+ * memory.
+ */
+ SkCodec::ZeroInitialized zeroInit() const override { return SkCodec::kYes_ZeroInitialized; }
+
private:
JavaVM* mJavaVM;
android::Bitmap* mStorage = nullptr;
};
+/**
+ * Allocator to handle reusing bitmaps for BitmapRegionDecoder.
+ *
+ * The BitmapRegionDecoder documentation states that, if it is
+ * provided, the recycled bitmap will always be reused, clipping
+ * the decoded output to fit in the recycled bitmap if necessary.
+ * This allocator implements that behavior.
+ *
+ * Skia's SkBitmapRegionDecoder expects the memory that
+ * is allocated to be large enough to decode the entire region
+ * that is requested. It will decode directly into the memory
+ * that is provided.
+ *
+ * FIXME: BUG:25465958
+ * If the recycled bitmap is not large enough for the decode
+ * requested, meaning that a clip is required, we will allocate
+ * enough memory for Skia to perform the decode, and then copy
+ * from the decoded output into the recycled bitmap.
+ *
+ * If the recycled bitmap is large enough for the decode requested,
+ * we will provide that memory for Skia to decode directly into.
+ *
+ * This allocator should only be used for a single allocation.
+ * After we reuse the recycledBitmap once, it is dangerous to
+ * reuse it again, given that it still may be in use from our
+ * first allocation.
+ */
+class RecyclingClippingPixelAllocator : public SkBRDAllocator {
+public:
+
+ RecyclingClippingPixelAllocator(android::Bitmap* recycledBitmap,
+ size_t recycledBytes);
+
+ ~RecyclingClippingPixelAllocator();
+
+ virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) override;
+
+ /**
+ * Must be called!
+ *
+ * In the event that the recycled bitmap is not large enough for
+ * the allocation requested, we will allocate memory on the heap
+ * instead. As a final step, once we are done using this memory,
+ * we will copy the contents of the heap memory into the recycled
+ * bitmap's memory, clipping as necessary.
+ */
+ void copyIfNecessary();
+
+ /**
+ * Indicates that this allocator does not allocate zero initialized
+ * memory.
+ */
+ SkCodec::ZeroInitialized zeroInit() const override { return SkCodec::kNo_ZeroInitialized; }
+
+private:
+ android::Bitmap* mRecycledBitmap;
+ const size_t mRecycledBytes;
+ SkBitmap* mSkiaBitmap;
+ bool mNeedsCopy;
+};
+
class AshmemPixelAllocator : public SkBitmap::Allocator {
public:
AshmemPixelAllocator(JNIEnv* env);
diff --git a/core/jni/android/graphics/MinikinUtils.cpp b/core/jni/android/graphics/MinikinUtils.cpp
index 9b774b3..0597d3f 100644
--- a/core/jni/android/graphics/MinikinUtils.cpp
+++ b/core/jni/android/graphics/MinikinUtils.cpp
@@ -33,11 +33,10 @@
FontStyle resolved = resolvedFace->fStyle;
/* Prepare minikin FontStyle */
- const std::string& langs = paint->getTextLocales();
- FontLanguages minikinLangs(langs.c_str(), langs.size());
FontVariant minikinVariant = (paint->getFontVariant() == VARIANT_ELEGANT) ? VARIANT_ELEGANT
: VARIANT_COMPACT;
- FontStyle minikinStyle(minikinLangs, minikinVariant, resolved.getWeight(), resolved.getItalic());
+ const uint32_t langListId = paint->getMinikinLangListId();
+ FontStyle minikinStyle(langListId, minikinVariant, resolved.getWeight(), resolved.getItalic());
/* Prepare minikin Paint */
// Note: it would be nice to handle fractional size values (it would improve smooth zoom
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index 9c11dd1..654d148 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -71,13 +71,6 @@
paint->setTextEncoding(Paint::kGlyphID_TextEncoding);
}
-struct LocalesCacheEntry {
- std::string javaLocales;
- std::string languageTags;
-};
-
-static thread_local LocalesCacheEntry sSingleEntryLocalesCache;
-
namespace PaintGlue {
enum MoveOpt {
AFTER, AT_OR_AFTER, BEFORE, AT_OR_BEFORE, AT
@@ -402,15 +395,20 @@
}
}
- static void setTextLocales(JNIEnv* env, jobject clazz, jlong objHandle, jstring locales) {
+ static jint setTextLocales(JNIEnv* env, jobject clazz, jlong objHandle, jstring locales) {
Paint* obj = reinterpret_cast<Paint*>(objHandle);
ScopedUtfChars localesChars(env, locales);
- if (sSingleEntryLocalesCache.javaLocales != localesChars.c_str()) {
- sSingleEntryLocalesCache.javaLocales = localesChars.c_str();
- toLanguageTags(&sSingleEntryLocalesCache.languageTags, localesChars.c_str());
- }
+ std::string buf;
+ toLanguageTags(&buf, localesChars.c_str());
+ jint minikinLangListId = FontStyle::registerLanguageList(buf);
+ obj->setMinikinLangListId(minikinLangListId);
+ return minikinLangListId;
+ }
- obj->setTextLocales(sSingleEntryLocalesCache.languageTags);
+ static void setTextLocalesByMinikinLangListId(JNIEnv* env, jobject clazz, jlong objHandle,
+ jint minikinLangListId) {
+ Paint* obj = reinterpret_cast<Paint*>(objHandle);
+ obj->setMinikinLangListId(minikinLangListId);
}
static jboolean isElegantTextHeight(JNIEnv* env, jobject, jlong paintHandle) {
@@ -991,7 +989,9 @@
{"nSetRasterizer","!(JJ)J", (void*) PaintGlue::setRasterizer},
{"nGetTextAlign","!(J)I", (void*) PaintGlue::getTextAlign},
{"nSetTextAlign","!(JI)V", (void*) PaintGlue::setTextAlign},
- {"nSetTextLocales","!(JLjava/lang/String;)V", (void*) PaintGlue::setTextLocales},
+ {"nSetTextLocales","!(JLjava/lang/String;)I", (void*) PaintGlue::setTextLocales},
+ {"nSetTextLocalesByMinikinLangListId","!(JI)V",
+ (void*) PaintGlue::setTextLocalesByMinikinLangListId},
{"nIsElegantTextHeight","!(J)Z", (void*) PaintGlue::isElegantTextHeight},
{"nSetElegantTextHeight","!(JZ)V", (void*) PaintGlue::setElegantTextHeight},
{"nGetTextSize","!(J)F", (void*) PaintGlue::getTextSize},
diff --git a/core/jni/android/graphics/Paint.h b/core/jni/android/graphics/Paint.h
index 7a34bc2..cb6e622 100644
--- a/core/jni/android/graphics/Paint.h
+++ b/core/jni/android/graphics/Paint.h
@@ -53,12 +53,12 @@
return mFontFeatureSettings;
}
- void setTextLocales(const std::string &textLocales) {
- mTextLocales = textLocales;
+ void setMinikinLangListId(uint32_t minikinLangListId) {
+ mMinikinLangListId = minikinLangListId;
}
- const std::string& getTextLocales() const {
- return mTextLocales;
+ uint32_t getMinikinLangListId() const {
+ return mMinikinLangListId;
}
void setFontVariant(FontVariant variant) {
@@ -80,7 +80,7 @@
private:
float mLetterSpacing = 0;
std::string mFontFeatureSettings;
- std::string mTextLocales;
+ uint32_t mMinikinLangListId;
FontVariant mFontVariant;
uint32_t mHyphenEdit = 0;
};
diff --git a/core/jni/android/graphics/PaintImpl.cpp b/core/jni/android/graphics/PaintImpl.cpp
index d5a0972..bd513ae 100644
--- a/core/jni/android/graphics/PaintImpl.cpp
+++ b/core/jni/android/graphics/PaintImpl.cpp
@@ -22,13 +22,14 @@
namespace android {
-Paint::Paint() : SkPaint(),
- mLetterSpacing(0), mFontFeatureSettings(), mTextLocales(), mFontVariant(VARIANT_DEFAULT) {
+Paint::Paint() :
+ SkPaint(), mLetterSpacing(0), mFontFeatureSettings(), mMinikinLangListId(0),
+ mFontVariant(VARIANT_DEFAULT) {
}
Paint::Paint(const Paint& paint) : SkPaint(paint),
mLetterSpacing(paint.mLetterSpacing), mFontFeatureSettings(paint.mFontFeatureSettings),
- mTextLocales(paint.mTextLocales), mFontVariant(paint.mFontVariant),
+ mMinikinLangListId(paint.mMinikinLangListId), mFontVariant(paint.mFontVariant),
mHyphenEdit(paint.mHyphenEdit) {
}
@@ -39,7 +40,7 @@
SkPaint::operator=(other);
mLetterSpacing = other.mLetterSpacing;
mFontFeatureSettings = other.mFontFeatureSettings;
- mTextLocales = other.mTextLocales;
+ mMinikinLangListId = other.mMinikinLangListId;
mFontVariant = other.mFontVariant;
mHyphenEdit = other.mHyphenEdit;
return *this;
@@ -49,7 +50,7 @@
return static_cast<const SkPaint&>(a) == static_cast<const SkPaint&>(b)
&& a.mLetterSpacing == b.mLetterSpacing
&& a.mFontFeatureSettings == b.mFontFeatureSettings
- && a.mTextLocales == b.mTextLocales
+ && a.mMinikinLangListId == b.mMinikinLangListId
&& a.mFontVariant == b.mFontVariant
&& a.mHyphenEdit == b.mHyphenEdit;
}
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index 1ee7ea8..71f881e 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -595,6 +595,36 @@
MEMINFO_COUNT
};
+static long get_zram_mem_used()
+{
+#define ZRAM_SYSFS "/sys/block/zram0/"
+ FILE *f = fopen(ZRAM_SYSFS "mm_stat", "r");
+ if (f) {
+ long mem_used_total = 0;
+
+ int matched = fscanf(f, "%*d %*d %ld %*d %*d %*d %*d", &mem_used_total);
+ if (matched != 1)
+ ALOGW("failed to parse " ZRAM_SYSFS "mm_stat");
+
+ fclose(f);
+ return mem_used_total;
+ }
+
+ f = fopen(ZRAM_SYSFS "mem_used_total", "r");
+ if (f) {
+ long mem_used_total = 0;
+
+ int matched = fscanf(f, "%ld", &mem_used_total);
+ if (matched != 1)
+ ALOGW("failed to parse " ZRAM_SYSFS "mem_used_total");
+
+ fclose(f);
+ return mem_used_total;
+ }
+
+ return 0;
+}
+
static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray out)
{
char buffer[1024];
@@ -680,15 +710,7 @@
if (*p) p++;
}
- fd = open("/sys/block/zram0/mem_used_total", O_RDONLY);
- if (fd >= 0) {
- len = read(fd, buffer, sizeof(buffer)-1);
- close(fd);
- if (len > 0) {
- buffer[len] = 0;
- mem[MEMINFO_ZRAM_TOTAL] = atoll(buffer)/1024;
- }
- }
+ mem[MEMINFO_ZRAM_TOTAL] = get_zram_mem_used() / 1024;
// Recompute Vmalloc Used since the value in meminfo
// doesn't account for I/O remapping which doesn't use RAM.
mem[MEMINFO_VMALLOC_USED] = get_allocated_vmalloc_memory() / 1024;
diff --git a/core/jni/android_util_Binder.cpp b/core/jni/android_util_Binder.cpp
index c139cd7..ae109c6 100644
--- a/core/jni/android_util_Binder.cpp
+++ b/core/jni/android_util_Binder.cpp
@@ -711,6 +711,9 @@
jniThrowException(env, "java/lang/RuntimeException",
"Not allowed to write file descriptors here");
break;
+ case UNEXPECTED_NULL:
+ jniThrowNullPointerException(env, NULL);
+ break;
case -EBADF:
jniThrowException(env, "java/lang/RuntimeException",
"Bad file descriptor");
diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp
index ff51e4e..f6e68c4 100644
--- a/core/jni/android_view_Surface.cpp
+++ b/core/jni/android_view_Surface.cpp
@@ -149,7 +149,9 @@
case PublicFormat::DEPTH16:
return HAL_DATASPACE_DEPTH;
case PublicFormat::RAW_SENSOR:
+ case PublicFormat::RAW_PRIVATE:
case PublicFormat::RAW10:
+ case PublicFormat::RAW12:
return HAL_DATASPACE_ARBITRARY;
case PublicFormat::YUV_420_888:
case PublicFormat::NV21:
@@ -170,6 +172,7 @@
case HAL_PIXEL_FORMAT_RGB_565:
case HAL_PIXEL_FORMAT_Y8:
case HAL_PIXEL_FORMAT_RAW10:
+ case HAL_PIXEL_FORMAT_RAW12:
case HAL_PIXEL_FORMAT_YCbCr_420_888:
case HAL_PIXEL_FORMAT_YV12:
// Enums overlap in both name and value
@@ -177,6 +180,9 @@
case HAL_PIXEL_FORMAT_RAW16:
// Name differs, though value is the same
return PublicFormat::RAW_SENSOR;
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ // Name differs, though value is the same
+ return PublicFormat::RAW_PRIVATE;
case HAL_PIXEL_FORMAT_YCbCr_422_SP:
// Name differs, though the value is the same
return PublicFormat::NV16;
@@ -212,7 +218,6 @@
}
break;
case HAL_PIXEL_FORMAT_BGRA_8888:
- case HAL_PIXEL_FORMAT_RAW_OPAQUE:
// Not defined in public API
return PublicFormat::UNKNOWN;
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 568b601..5251b20 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -322,6 +322,52 @@
<protected-broadcast android:name="android.internal.policy.action.BURN_IN_PROTECTION" />
<protected-broadcast android:name="android.app.action.SYSTEM_UPDATE_POLICY_CHANGED" />
<protected-broadcast android:name="android.app.action.DEVICE_OWNER_CHANGED" />
+
+ <protected-broadcast android:name="android.intent.action.MANAGED_PROFILE_AVAILABILITY_CHANGED" />
+ <protected-broadcast android:name="android.intent.action.AVAILABILITY_CHANGED" />
+
+ <!-- Added in N -->
+ <protected-broadcast android:name="android.intent.action.ANR" />
+ <protected-broadcast android:name="android.intent.action.CALL" />
+ <protected-broadcast android:name="android.intent.action.DROPBOX_ENTRY_ADDED" />
+ <protected-broadcast android:name="android.intent.action.INPUT_METHOD_CHANGED" />
+ <protected-broadcast android:name="android.intent.action.internal_sim_state_changed" />
+ <protected-broadcast android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ <protected-broadcast android:name="android.intent.action.PRECISE_CALL_STATE" />
+ <protected-broadcast android:name="android.intent.action.PRECISE_DATA_CONNECTION_STATE_CHANGED" />
+ <protected-broadcast android:name="android.intent.action.SUBSCRIPTION_PHONE_STATE" />
+ <protected-broadcast android:name="android.intent.action.USER_INFO_CHANGED" />
+ <protected-broadcast android:name="android.intent.action.USER_UNLOCKED" />
+ <protected-broadcast android:name="android.intent.action.WALLPAPER_CHANGED" />
+
+ <protected-broadcast android:name="android.app.action.DEVICE_POLICY_MANAGER_STATE_CHANGED" />
+ <protected-broadcast android:name="android.bluetooth.adapter.action.BLE_STATE_CHANGED" />
+ <protected-broadcast android:name="android.content.jobscheduler.JOB_DELAY_EXPIRED" />
+ <protected-broadcast android:name="android.content.syncmanager.SYNC_ALARM" />
+ <protected-broadcast android:name="android.media.INTERNAL_RINGER_MODE_CHANGED_ACTION" />
+ <protected-broadcast android:name="android.media.STREAM_DEVICES_CHANGED_ACTION" />
+ <protected-broadcast android:name="android.media.STREAM_MUTE_CHANGED_ACTION" />
+ <protected-broadcast android:name="android.net.sip.SIP_SERVICE_UP" />
+ <protected-broadcast android:name="android.nfc.action.ADAPTER_STATE_CHANGED" />
+ <protected-broadcast android:name="android.os.action.CHARGING" />
+ <protected-broadcast android:name="android.os.action.DISCHARGING" />
+ <protected-broadcast android:name="android.search.action.SEARCHABLES_CHANGED" />
+ <protected-broadcast android:name="android.security.STORAGE_CHANGED" />
+ <protected-broadcast android:name="android.telecom.action.PHONE_ACCOUNT_REGISTERED" />
+ <protected-broadcast android:name="android.telecom.action.PHONE_ACCOUNT_UNREGISTERED" />
+ <protected-broadcast android:name="android.telephony.action.CARRIER_CONFIG_CHANGED" />
+
+ <protected-broadcast android:name="com.android.bluetooth.btservice.action.ALARM_WAKEUP" />
+ <protected-broadcast android:name="com.android.ims.IMS_SERVICE_UP" />
+ <protected-broadcast android:name="com.android.server.action.NETWORK_STATS_POLL" />
+ <protected-broadcast android:name="com.android.server.action.NETWORK_STATS_UPDATED" />
+ <protected-broadcast android:name="com.android.server.NetworkTimeUpdateService.action.POLL" />
+ <protected-broadcast android:name="com.android.server.telecom.intent.action.CALLS_ADD_ENTRY" />
+ <protected-broadcast android:name="com.android.settings.location.MODE_CHANGING" />
+
+ <protected-broadcast android:name="ScheduleConditionProvider.EVALUATE" />
+ <protected-broadcast android:name="wifi_scan_available" />
+
<!-- ====================================================================== -->
<!-- RUNTIME PERMISSIONS -->
<!-- ====================================================================== -->
@@ -709,8 +755,8 @@
<!-- Required to be able to access the camera device.
<p>This will automatically enforce the <a
- href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
- <uses-feature>}</a> manifest element for <em>all</em> camera features.
+ href="{@docRoot}guide/topics/manifest/uses-feature-element.html">
+ <uses-feature>}</a> manifest element for <em>all</em> camera features.
If you do not require all camera features or can properly operate if a camera
is not available, then you must modify your manifest as appropriate in order to
install on devices that don't support all camera features.</p>
@@ -1460,6 +1506,12 @@
android:description="@string/permdesc_killBackgroundProcesses"
android:protectionLevel="normal" />
+ <!-- @SystemApi @hide Allows an application to query process states and current
+ OOM adjustment scores.
+ <p>Not for use by third-party applications. -->
+ <permission android:name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"
+ android:protectionLevel="signature|privileged|development" />
+
<!-- @SystemApi @hide Allows an application to retrieve a package's importance.
This permission is not available to third party applications. -->
<permission android:name="android.permission.GET_PACKAGE_IMPORTANCE"
@@ -2601,6 +2653,14 @@
<permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
android:protectionLevel="signature" />
+ <!-- Must be required by an {@link
+ android.service.notification.NotificationAssistantService},
+ to ensure that only the system can bind to it.
+ <p>Protection level: signature
+ -->
+ <permission android:name="android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE"
+ android:protectionLevel="signature" />
+
<!-- Must be required by a {@link
android.service.chooser.ChooserTargetService}, to ensure that
only the system can bind to it.
@@ -2706,10 +2766,23 @@
<permission android:name="android.permission.DISPATCH_NFC_MESSAGE"
android:protectionLevel="signature|privileged" />
+ <!-- @SystemApi Allows changing day / night mode when system is configured with
+ config_lockDayNightMode set to true. If requesting app does not have permission,
+ it will be ignored.
+ @hide -->
+ <permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"
+ android:protectionLevel="signature|privileged" />
+
<!-- The system process is explicitly the only one allowed to launch the
confirmation UI for full backup/restore -->
<uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
+
+ <!-- Allows the holder to access the ephemeral applications on the device.
+ @hide -->
+ <permission android:name="android.permission.ACCESS_EPHEMERAL_APPS"
+ android:protectionLevel="signature" />
+
<application android:process="system"
android:persistent="true"
android:hasCode="false"
diff --git a/core/res/res/drawable-mdpi/pointer_alias_large.png b/core/res/res/drawable-mdpi/pointer_alias_large.png
new file mode 100644
index 0000000..283bf7f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_alias_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_all_scroll_large.png b/core/res/res/drawable-mdpi/pointer_all_scroll_large.png
new file mode 100644
index 0000000..c29db87
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_all_scroll_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_arrow_large.png b/core/res/res/drawable-mdpi/pointer_arrow_large.png
new file mode 100644
index 0000000..9f59c4c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_arrow_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_cell_large.png b/core/res/res/drawable-mdpi/pointer_cell_large.png
new file mode 100644
index 0000000..3dec5e5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_cell_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_context_menu_large.png b/core/res/res/drawable-mdpi/pointer_context_menu_large.png
new file mode 100644
index 0000000..7c9e250
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_context_menu_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_copy_large.png b/core/res/res/drawable-mdpi/pointer_copy_large.png
new file mode 100644
index 0000000..18f4696
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_copy_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_crosshair_large.png b/core/res/res/drawable-mdpi/pointer_crosshair_large.png
new file mode 100644
index 0000000..ea1f5fc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_crosshair_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_grab_large.png b/core/res/res/drawable-mdpi/pointer_grab_large.png
new file mode 100644
index 0000000..2e32766
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_grab_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_grabbing_large.png b/core/res/res/drawable-mdpi/pointer_grabbing_large.png
new file mode 100644
index 0000000..3c54751
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_grabbing_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_hand_large.png b/core/res/res/drawable-mdpi/pointer_hand_large.png
new file mode 100644
index 0000000..785047f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_hand_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_help_large.png b/core/res/res/drawable-mdpi/pointer_help_large.png
new file mode 100644
index 0000000..6552f9b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_help_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_horizontal_double_arrow_large.png b/core/res/res/drawable-mdpi/pointer_horizontal_double_arrow_large.png
new file mode 100644
index 0000000..7086106
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_horizontal_double_arrow_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_nodrop_large.png b/core/res/res/drawable-mdpi/pointer_nodrop_large.png
new file mode 100644
index 0000000..da981df
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_nodrop_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_text_large.png b/core/res/res/drawable-mdpi/pointer_text_large.png
new file mode 100644
index 0000000..2fba190
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_text_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_top_left_diagonal_double_arrow_large.png b/core/res/res/drawable-mdpi/pointer_top_left_diagonal_double_arrow_large.png
new file mode 100644
index 0000000..eecaa89
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_top_left_diagonal_double_arrow_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_top_right_diagonal_double_arrow_large.png b/core/res/res/drawable-mdpi/pointer_top_right_diagonal_double_arrow_large.png
new file mode 100644
index 0000000..9d47ecf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_top_right_diagonal_double_arrow_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_vertical_double_arrow_large.png b/core/res/res/drawable-mdpi/pointer_vertical_double_arrow_large.png
new file mode 100644
index 0000000..fd777b1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_vertical_double_arrow_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_vertical_text_large.png b/core/res/res/drawable-mdpi/pointer_vertical_text_large.png
new file mode 100644
index 0000000..1cbe49a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_vertical_text_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_zoom_in_large.png b/core/res/res/drawable-mdpi/pointer_zoom_in_large.png
new file mode 100644
index 0000000..923ad79
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_zoom_in_large.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/pointer_zoom_out_large.png b/core/res/res/drawable-mdpi/pointer_zoom_out_large.png
new file mode 100644
index 0000000..aa47eb9
--- /dev/null
+++ b/core/res/res/drawable-mdpi/pointer_zoom_out_large.png
Binary files differ
diff --git a/core/res/res/drawable/ic_arrow_drop_down.xml b/core/res/res/drawable/ic_collapse_bundle.xml
similarity index 68%
rename from core/res/res/drawable/ic_arrow_drop_down.xml
rename to core/res/res/drawable/ic_collapse_bundle.xml
index c8bb411..26c839d0 100644
--- a/core/res/res/drawable/ic_arrow_drop_down.xml
+++ b/core/res/res/drawable/ic_collapse_bundle.xml
@@ -15,11 +15,11 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14.0dp"
- android:height="14.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:width="14.0dp"
+ android:height="14.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:pathData="M16.600000,8.600000l-4.600000,4.599999 -4.600000,-4.599999 -1.400000,1.400000 6.000000,6.000000 6.000000,-6.000000z"
- android:fillColor="#FF000000"/>
+ android:fillColor="#FF000000"
+ android:pathData="M12.0,10.0l5.3,-5.2l-1.4,-1.4L12.0,7.2L8.2,3.4L6.8,4.8L12.0,10.0zM6.8,19.2l1.4,1.4l3.8,-3.8l3.9,3.8l1.4,-1.4L12.0,14.0L6.8,19.2z"/>
</vector>
diff --git a/core/res/res/drawable/ic_arrow_drop_down.xml b/core/res/res/drawable/ic_collapse_notification.xml
similarity index 67%
copy from core/res/res/drawable/ic_arrow_drop_down.xml
copy to core/res/res/drawable/ic_collapse_notification.xml
index c8bb411..603c159 100644
--- a/core/res/res/drawable/ic_arrow_drop_down.xml
+++ b/core/res/res/drawable/ic_collapse_notification.xml
@@ -15,11 +15,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14.0dp"
- android:height="14.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:width="14.0dp"
+ android:height="14.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:pathData="M16.600000,8.600000l-4.600000,4.599999 -4.600000,-4.599999 -1.400000,1.400000 6.000000,6.000000 6.000000,-6.000000z"
- android:fillColor="#FF000000"/>
+ android:fillColor="#FF000000"
+ android:pathData="M12.0,8.0l-6.0,6.0l1.4,1.4l4.6,-4.6l4.6,4.6L18.0,14.0L12.0,8.0z"/>
+ <path
+ android:pathData="M0,0h24v24H0V0z"
+ android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/ic_decor_close_button_dark_focused.xml b/core/res/res/drawable/ic_decor_close_button_dark_focused.xml
index d7b167dd..0794ed3 100644
--- a/core/res/res/drawable/ic_decor_close_button_dark_focused.xml
+++ b/core/res/res/drawable/ic_decor_close_button_dark_focused.xml
@@ -23,7 +23,7 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#FFFFFFFF"
+ android:fillColor="#ff000000"
android:pathData="M6.9,4.0l-2.9,2.9 9.1,9.1 -9.1,9.200001 2.9,2.799999 9.1,-9.1 9.1,9.1 2.9,-2.799999 -9.1,-9.200001 9.1,-9.1 -2.9,-2.9 -9.1,9.2z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_close_button_dark_unfocused.xml b/core/res/res/drawable/ic_decor_close_button_dark_unfocused.xml
index e2e81b9..bd1db51 100644
--- a/core/res/res/drawable/ic_decor_close_button_dark_unfocused.xml
+++ b/core/res/res/drawable/ic_decor_close_button_dark_unfocused.xml
@@ -23,7 +23,7 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#33FFFFFF"
+ android:fillColor="#33000000"
android:pathData="M6.9,4.0l-2.9,2.9 9.1,9.1 -9.1,9.200001 2.9,2.799999 9.1,-9.1 9.1,9.1 2.9,-2.799999 -9.1,-9.200001 9.1,-9.1 -2.9,-2.9 -9.1,9.2z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_close_button_light_focused.xml b/core/res/res/drawable/ic_decor_close_button_light_focused.xml
index 0794ed3..d7b167dd 100644
--- a/core/res/res/drawable/ic_decor_close_button_light_focused.xml
+++ b/core/res/res/drawable/ic_decor_close_button_light_focused.xml
@@ -23,7 +23,7 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#ff000000"
+ android:fillColor="#FFFFFFFF"
android:pathData="M6.9,4.0l-2.9,2.9 9.1,9.1 -9.1,9.200001 2.9,2.799999 9.1,-9.1 9.1,9.1 2.9,-2.799999 -9.1,-9.200001 9.1,-9.1 -2.9,-2.9 -9.1,9.2z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_close_button_light_unfocused.xml b/core/res/res/drawable/ic_decor_close_button_light_unfocused.xml
index bd1db51..e2e81b9 100644
--- a/core/res/res/drawable/ic_decor_close_button_light_unfocused.xml
+++ b/core/res/res/drawable/ic_decor_close_button_light_unfocused.xml
@@ -23,7 +23,7 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#33000000"
+ android:fillColor="#33FFFFFF"
android:pathData="M6.9,4.0l-2.9,2.9 9.1,9.1 -9.1,9.200001 2.9,2.799999 9.1,-9.1 9.1,9.1 2.9,-2.799999 -9.1,-9.200001 9.1,-9.1 -2.9,-2.9 -9.1,9.2z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_maximize_button_dark_focused.xml b/core/res/res/drawable/ic_decor_maximize_button_dark_focused.xml
index 73d808b..c23390e 100644
--- a/core/res/res/drawable/ic_decor_maximize_button_dark_focused.xml
+++ b/core/res/res/drawable/ic_decor_maximize_button_dark_focused.xml
@@ -23,10 +23,10 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#FFFFFFFF"
+ android:fillColor="#FF000000"
android:pathData="M2.0,4.0l0.0,16.0l28.0,0.0L30.0,4.0L2.0,4.0zM26.0,16.0L6.0,16.0L6.0,8.0l20.0,0.0L26.0,16.0z"/>
<path
- android:fillColor="#B2FFFFFF"
+ android:fillColor="#B2000000"
android:pathData="M2.0,24.0l28.0,0.0l0.0,4.0l-28.0,0.0z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_maximize_button_dark_unfocused.xml b/core/res/res/drawable/ic_decor_maximize_button_dark_unfocused.xml
index dc79e10..a194a39 100644
--- a/core/res/res/drawable/ic_decor_maximize_button_dark_unfocused.xml
+++ b/core/res/res/drawable/ic_decor_maximize_button_dark_unfocused.xml
@@ -23,10 +23,10 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#33FFFFFF"
+ android:fillColor="#33000000"
android:pathData="M2.0,4.0l0.0,16.0l28.0,0.0L30.0,4.0L2.0,4.0zM26.0,16.0L6.0,16.0L6.0,8.0l20.0,0.0L26.0,16.0z"/>
<path
- android:fillColor="#33FFFFFF"
+ android:fillColor="#33000000"
android:pathData="M2.0,24.0l28.0,0.0l0.0,4.0l-28.0,0.0z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_maximize_button_light_focused.xml b/core/res/res/drawable/ic_decor_maximize_button_light_focused.xml
index c23390e..73d808b 100644
--- a/core/res/res/drawable/ic_decor_maximize_button_light_focused.xml
+++ b/core/res/res/drawable/ic_decor_maximize_button_light_focused.xml
@@ -23,10 +23,10 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#FF000000"
+ android:fillColor="#FFFFFFFF"
android:pathData="M2.0,4.0l0.0,16.0l28.0,0.0L30.0,4.0L2.0,4.0zM26.0,16.0L6.0,16.0L6.0,8.0l20.0,0.0L26.0,16.0z"/>
<path
- android:fillColor="#B2000000"
+ android:fillColor="#B2FFFFFF"
android:pathData="M2.0,24.0l28.0,0.0l0.0,4.0l-28.0,0.0z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_decor_maximize_button_light_unfocused.xml b/core/res/res/drawable/ic_decor_maximize_button_light_unfocused.xml
index a194a39..dc79e10 100644
--- a/core/res/res/drawable/ic_decor_maximize_button_light_unfocused.xml
+++ b/core/res/res/drawable/ic_decor_maximize_button_light_unfocused.xml
@@ -23,10 +23,10 @@
android:translateX="8.0"
android:translateY="8.0" >
<path
- android:fillColor="#33000000"
+ android:fillColor="#33FFFFFF"
android:pathData="M2.0,4.0l0.0,16.0l28.0,0.0L30.0,4.0L2.0,4.0zM26.0,16.0L6.0,16.0L6.0,8.0l20.0,0.0L26.0,16.0z"/>
<path
- android:fillColor="#33000000"
+ android:fillColor="#33FFFFFF"
android:pathData="M2.0,24.0l28.0,0.0l0.0,4.0l-28.0,0.0z"/>
</group>
</vector>
diff --git a/core/res/res/drawable/ic_arrow_drop_down.xml b/core/res/res/drawable/ic_expand_bundle.xml
similarity index 68%
copy from core/res/res/drawable/ic_arrow_drop_down.xml
copy to core/res/res/drawable/ic_expand_bundle.xml
index c8bb411..2cc5005 100644
--- a/core/res/res/drawable/ic_arrow_drop_down.xml
+++ b/core/res/res/drawable/ic_expand_bundle.xml
@@ -15,11 +15,11 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14.0dp"
- android:height="14.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:width="14.0dp"
+ android:height="14.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:pathData="M16.600000,8.600000l-4.600000,4.599999 -4.600000,-4.599999 -1.400000,1.400000 6.000000,6.000000 6.000000,-6.000000z"
- android:fillColor="#FF000000"/>
+ android:fillColor="#FF000000"
+ android:pathData="M6.8,8.6L8.2,10.0L12.0,6.2l3.9,3.8l1.4,-1.4L12.0,3.4L6.8,8.6zM12.0,20.6l5.3,-5.2L15.8,14.0L12.0,17.8L8.2,14.0l-1.4,1.4L12.0,20.6z"/>
</vector>
diff --git a/core/res/res/drawable/ic_arrow_drop_down.xml b/core/res/res/drawable/ic_expand_notification.xml
similarity index 67%
copy from core/res/res/drawable/ic_arrow_drop_down.xml
copy to core/res/res/drawable/ic_expand_notification.xml
index c8bb411..db7d3eb 100644
--- a/core/res/res/drawable/ic_arrow_drop_down.xml
+++ b/core/res/res/drawable/ic_expand_notification.xml
@@ -15,11 +15,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14.0dp"
- android:height="14.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:width="14.0dp"
+ android:height="14.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
- android:pathData="M16.600000,8.600000l-4.600000,4.599999 -4.600000,-4.599999 -1.400000,1.400000 6.000000,6.000000 6.000000,-6.000000z"
- android:fillColor="#FF000000"/>
+ android:fillColor="#FF000000"
+ android:pathData="M16.6,8.6L12.0,13.2L7.4,8.6L6.0,10.0l6.0,6.0l6.0,-6.0L16.6,8.6z"/>
+ <path
+ android:pathData="M0,0h24v24H0V0z"
+ android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/pointer_alias_large_icon.xml b/core/res/res/drawable/pointer_alias_large_icon.xml
new file mode 100644
index 0000000..149f58c
--- /dev/null
+++ b/core/res/res/drawable/pointer_alias_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_alias_large"
+ android:hotSpotX="19dp"
+ android:hotSpotY="11dp" />
diff --git a/core/res/res/drawable/pointer_all_scroll_large_icon.xml b/core/res/res/drawable/pointer_all_scroll_large_icon.xml
new file mode 100644
index 0000000..c580f76
--- /dev/null
+++ b/core/res/res/drawable/pointer_all_scroll_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_all_scroll_large"
+ android:hotSpotX="32dp"
+ android:hotSpotY="31dp" />
diff --git a/core/res/res/drawable/pointer_arrow_large_icon.xml b/core/res/res/drawable/pointer_arrow_large_icon.xml
new file mode 100644
index 0000000..22c7bfe
--- /dev/null
+++ b/core/res/res/drawable/pointer_arrow_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_arrow_large"
+ android:hotSpotX="10dp"
+ android:hotSpotY="10dp" />
diff --git a/core/res/res/drawable/pointer_cell_large_icon.xml b/core/res/res/drawable/pointer_cell_large_icon.xml
new file mode 100644
index 0000000..f2530b7
--- /dev/null
+++ b/core/res/res/drawable/pointer_cell_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_cell_large"
+ android:hotSpotX="30dp"
+ android:hotSpotY="30dp" />
diff --git a/core/res/res/drawable/pointer_context_menu_large_icon.xml b/core/res/res/drawable/pointer_context_menu_large_icon.xml
new file mode 100644
index 0000000..c57e615
--- /dev/null
+++ b/core/res/res/drawable/pointer_context_menu_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_context_menu_large"
+ android:hotSpotX="11dp"
+ android:hotSpotY="11dp" />
diff --git a/core/res/res/drawable/pointer_copy_large_icon.xml b/core/res/res/drawable/pointer_copy_large_icon.xml
new file mode 100644
index 0000000..4ee3f18
--- /dev/null
+++ b/core/res/res/drawable/pointer_copy_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_copy_large"
+ android:hotSpotX="10dp"
+ android:hotSpotY="10dp" />
diff --git a/core/res/res/drawable/pointer_crosshair_large_icon.xml b/core/res/res/drawable/pointer_crosshair_large_icon.xml
new file mode 100644
index 0000000..6a71b7b
--- /dev/null
+++ b/core/res/res/drawable/pointer_crosshair_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_crosshair_large"
+ android:hotSpotX="31dp"
+ android:hotSpotY="30dp" />
diff --git a/core/res/res/drawable/pointer_grab_large_icon.xml b/core/res/res/drawable/pointer_grab_large_icon.xml
new file mode 100644
index 0000000..f2df1cb
--- /dev/null
+++ b/core/res/res/drawable/pointer_grab_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_grab_large"
+ android:hotSpotX="21dp"
+ android:hotSpotY="11dp" />
diff --git a/core/res/res/drawable/pointer_grabbing_large_icon.xml b/core/res/res/drawable/pointer_grabbing_large_icon.xml
new file mode 100644
index 0000000..e4042bf
--- /dev/null
+++ b/core/res/res/drawable/pointer_grabbing_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_grabbing_large"
+ android:hotSpotX="20dp"
+ android:hotSpotY="12dp" />
diff --git a/core/res/res/drawable/pointer_hand_large_icon.xml b/core/res/res/drawable/pointer_hand_large_icon.xml
new file mode 100644
index 0000000..e34422a
--- /dev/null
+++ b/core/res/res/drawable/pointer_hand_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_hand_large"
+ android:hotSpotX="25dp"
+ android:hotSpotY="7dp" />
diff --git a/core/res/res/drawable/pointer_help_large_icon.xml b/core/res/res/drawable/pointer_help_large_icon.xml
new file mode 100644
index 0000000..4c60a55
--- /dev/null
+++ b/core/res/res/drawable/pointer_help_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_help_large"
+ android:hotSpotX="10dp"
+ android:hotSpotY="11dp" />
diff --git a/core/res/res/drawable/pointer_horizontal_double_arrow_large_icon.xml b/core/res/res/drawable/pointer_horizontal_double_arrow_large_icon.xml
new file mode 100644
index 0000000..a2039e6
--- /dev/null
+++ b/core/res/res/drawable/pointer_horizontal_double_arrow_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_horizontal_double_arrow_large"
+ android:hotSpotX="35dp"
+ android:hotSpotY="29dp" />
diff --git a/core/res/res/drawable/pointer_nodrop_large_icon.xml b/core/res/res/drawable/pointer_nodrop_large_icon.xml
new file mode 100644
index 0000000..cde2e41
--- /dev/null
+++ b/core/res/res/drawable/pointer_nodrop_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_nodrop_large"
+ android:hotSpotX="10dp"
+ android:hotSpotY="10dp" />
diff --git a/core/res/res/drawable/pointer_text_large_icon.xml b/core/res/res/drawable/pointer_text_large_icon.xml
new file mode 100644
index 0000000..24d35b0
--- /dev/null
+++ b/core/res/res/drawable/pointer_text_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_text_large"
+ android:hotSpotX="30dp"
+ android:hotSpotY="32dp" />
diff --git a/core/res/res/drawable/pointer_top_left_diagonal_double_arrow_large_icon.xml b/core/res/res/drawable/pointer_top_left_diagonal_double_arrow_large_icon.xml
new file mode 100644
index 0000000..270ccc9
--- /dev/null
+++ b/core/res/res/drawable/pointer_top_left_diagonal_double_arrow_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_top_left_diagonal_double_arrow_large"
+ android:hotSpotX="32dp"
+ android:hotSpotY="30dp" />
diff --git a/core/res/res/drawable/pointer_top_right_diagonal_double_arrow_large_icon.xml b/core/res/res/drawable/pointer_top_right_diagonal_double_arrow_large_icon.xml
new file mode 100644
index 0000000..e350a43
--- /dev/null
+++ b/core/res/res/drawable/pointer_top_right_diagonal_double_arrow_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_top_right_diagonal_double_arrow_large"
+ android:hotSpotX="32dp"
+ android:hotSpotY="31dp" />
diff --git a/core/res/res/drawable/pointer_vertical_double_arrow_large_icon.xml b/core/res/res/drawable/pointer_vertical_double_arrow_large_icon.xml
new file mode 100644
index 0000000..65728ad
--- /dev/null
+++ b/core/res/res/drawable/pointer_vertical_double_arrow_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_vertical_double_arrow_large"
+ android:hotSpotX="29dp"
+ android:hotSpotY="32dp" />
diff --git a/core/res/res/drawable/pointer_vertical_text_large_icon.xml b/core/res/res/drawable/pointer_vertical_text_large_icon.xml
new file mode 100644
index 0000000..48211cb
--- /dev/null
+++ b/core/res/res/drawable/pointer_vertical_text_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_vertical_text_large"
+ android:hotSpotX="32dp"
+ android:hotSpotY="30dp" />
diff --git a/core/res/res/drawable/pointer_zoom_in_large_icon.xml b/core/res/res/drawable/pointer_zoom_in_large_icon.xml
new file mode 100644
index 0000000..3eb89f56
--- /dev/null
+++ b/core/res/res/drawable/pointer_zoom_in_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_zoom_in_large"
+ android:hotSpotX="25dp"
+ android:hotSpotY="26dp" />
diff --git a/core/res/res/drawable/pointer_zoom_out_large_icon.xml b/core/res/res/drawable/pointer_zoom_out_large_icon.xml
new file mode 100644
index 0000000..df6412e
--- /dev/null
+++ b/core/res/res/drawable/pointer_zoom_out_large_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<pointer-icon xmlns:android="http://schemas.android.com/apk/res/android"
+ android:bitmap="@drawable/pointer_zoom_out_large"
+ android:hotSpotX="26dp"
+ android:hotSpotY="26dp" />
diff --git a/core/res/res/layout/decor_caption.xml b/core/res/res/layout/decor_caption.xml
new file mode 100644
index 0000000..0246736
--- /dev/null
+++ b/core/res/res/layout/decor_caption.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2015, The Android Open 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.
+*/
+-->
+
+<com.android.internal.widget.DecorCaptionView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:descendantFocusability="beforeDescendants" >
+ <LinearLayout
+ android:id="@+id/caption"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="end"
+ android:background="@drawable/decor_caption_title"
+ android:focusable="false"
+ android:descendantFocusability="blocksDescendants" >
+ <Button
+ android:id="@+id/maximize_window"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_margin="5dp"
+ android:padding="4dp"
+ android:layout_gravity="center_vertical|end"
+ android:contentDescription="@string/maximize_button_text"
+ android:background="@drawable/decor_maximize_button_dark" />
+ <Button
+ android:id="@+id/close_window"
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_margin="5dp"
+ android:padding="4dp"
+ android:layout_gravity="center_vertical|end"
+ android:contentDescription="@string/close_button_text"
+ android:background="@drawable/decor_close_button_dark" />
+ </LinearLayout>
+</com.android.internal.widget.DecorCaptionView>
diff --git a/core/res/res/layout/decor_caption_dark.xml b/core/res/res/layout/decor_caption_dark.xml
deleted file mode 100644
index 273264d..0000000
--- a/core/res/res/layout/decor_caption_dark.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2015, The Android Open 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.
-*/
--->
-
-<com.android.internal.widget.DecorCaptionView xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:descendantFocusability="beforeDescendants" >
- <LinearLayout
- android:id="@+id/caption"
- android:layout_width="match_parent"
- android:layout_gravity="end"
- android:layout_height="wrap_content"
- android:background="@drawable/decor_caption_title"
- android:focusable="false"
- android:descendantFocusability="blocksDescendants" >
- <LinearLayout
- android:id="@+id/client_decor_placeholder"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- <Button
- android:id="@+id/maximize_window"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_margin="5dp"
- android:padding="4dp"
- android:layout_gravity="center_vertical|end"
- android:contentDescription="@string/maximize_button_text"
- android:background="@drawable/decor_maximize_button_dark" />
- <Button
- android:id="@+id/close_window"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_margin="5dp"
- android:padding="4dp"
- android:layout_gravity="center_vertical|end"
- android:contentDescription="@string/close_button_text"
- android:background="@drawable/decor_close_button_dark" />
- </LinearLayout>
-</com.android.internal.widget.DecorCaptionView>
diff --git a/core/res/res/layout/decor_caption_light.xml b/core/res/res/layout/decor_caption_light.xml
deleted file mode 100644
index fd9198e..0000000
--- a/core/res/res/layout/decor_caption_light.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2015, The Android Open 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.
-*/
--->
-
-<com.android.internal.widget.DecorCaptionView xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:descendantFocusability="beforeDescendants" >
- <LinearLayout
- android:id="@+id/caption"
- android:layout_width="match_parent"
- android:layout_gravity="end"
- android:layout_height="wrap_content"
- android:background="@drawable/decor_caption_title"
- android:focusable="false"
- android:descendantFocusability="blocksDescendants" >
- <LinearLayout
- android:id="@+id/client_decor_placeholder"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- <Button
- android:id="@+id/maximize_window"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_margin="5dp"
- android:padding="4dp"
- android:layout_gravity="center_vertical|end"
- android:contentDescription="@string/maximize_button_text"
- android:background="@drawable/decor_maximize_button_light" />
- <Button
- android:id="@+id/close_window"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_margin="5dp"
- android:padding="4dp"
- android:layout_gravity="center_vertical|end"
- android:contentDescription="@string/close_button_text"
- android:background="@drawable/decor_close_button_light" />
- </LinearLayout>
-</com.android.internal.widget.DecorCaptionView>
diff --git a/core/res/res/layout/notification_template_header.xml b/core/res/res/layout/notification_template_header.xml
index aceae9f..e45f52b 100644
--- a/core/res/res/layout/notification_template_header.xml
+++ b/core/res/res/layout/notification_template_header.xml
@@ -125,7 +125,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="1dp"
- android:src="@drawable/ic_arrow_drop_down"
android:visibility="gone"
/>
</NotificationHeaderView>
diff --git a/core/res/res/layout/notification_template_material_big_base.xml b/core/res/res/layout/notification_template_material_big_base.xml
index 8c78b8d..eb02e8b 100644
--- a/core/res/res/layout/notification_template_material_big_base.xml
+++ b/core/res/res/layout/notification_template_material_big_base.xml
@@ -55,12 +55,6 @@
</FrameLayout>
<include layout="@layout/notification_template_right_icon" />
</FrameLayout>
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:id="@+id/action_divider"
- android:visibility="gone"
- android:background="@drawable/notification_template_divider" />
<include
layout="@layout/notification_material_action_list"
android:layout_width="match_parent"
diff --git a/core/res/res/layout/notification_template_material_big_picture.xml b/core/res/res/layout/notification_template_material_big_picture.xml
index 74e7775..58e3d1b 100644
--- a/core/res/res/layout/notification_template_material_big_picture.xml
+++ b/core/res/res/layout/notification_template_material_big_picture.xml
@@ -52,14 +52,6 @@
android:layout_marginBottom="16dp"
android:scaleType="centerCrop"
/>
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginStart="-16dp"
- android:layout_marginEnd="-16dp"
- android:id="@+id/action_divider"
- android:visibility="gone"
- android:background="@drawable/notification_template_divider" />
<include layout="@layout/notification_material_action_list" />
</LinearLayout>
</FrameLayout>
diff --git a/core/res/res/layout/notification_template_material_big_text.xml b/core/res/res/layout/notification_template_material_big_text.xml
index 354c0fb..9e010f2 100644
--- a/core/res/res/layout/notification_template_material_big_text.xml
+++ b/core/res/res/layout/notification_template_material_big_text.xml
@@ -62,14 +62,6 @@
android:contentDescription="@string/notification_work_profile_content_description"
/>
</LinearLayout>
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginStart="-16dp"
- android:layout_marginEnd="-16dp"
- android:id="@+id/action_divider"
- android:visibility="gone"
- android:background="@drawable/notification_template_divider" />
<include layout="@layout/notification_material_action_list" />
</LinearLayout>
<include layout="@layout/notification_template_right_icon" />
diff --git a/core/res/res/layout/notification_template_material_inbox.xml b/core/res/res/layout/notification_template_material_inbox.xml
index 4f12d76..8c0abc9 100644
--- a/core/res/res/layout/notification_template_material_inbox.xml
+++ b/core/res/res/layout/notification_template_material_inbox.xml
@@ -130,14 +130,6 @@
android:visibility="gone"
android:layout_weight="0"
/>
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:id="@+id/action_divider"
- android:visibility="gone"
- android:layout_marginStart="-16dp"
- android:layout_marginEnd="-16dp"
- android:background="@drawable/notification_template_divider" />
<include layout="@layout/notification_material_action_list" />
</LinearLayout>
<include layout="@layout/notification_template_right_icon" />
diff --git a/core/res/res/layout/search_view.xml b/core/res/res/layout/search_view.xml
index b5b5b27..718e4a2 100644
--- a/core/res/res/layout/search_view.xml
+++ b/core/res/res/layout/search_view.xml
@@ -81,7 +81,6 @@
android:layout_height="36dip"
android:layout_width="0dp"
android:layout_weight="1"
- android:minWidth="@dimen/search_view_text_min_width"
android:layout_gravity="bottom"
android:paddingStart="@dimen/dropdownitem_text_padding_left"
android:paddingEnd="@dimen/dropdownitem_text_padding_right"
@@ -113,7 +112,7 @@
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent">
-
+
<ImageView
android:id="@+id/search_go_btn"
android:layout_width="wrap_content"
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index c3f7afc..eaf82fb 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Stembystand"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Sluit nou"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Veiligmodus"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-stelsel"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Persoonlik"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Opgedateer deur jou administrateur"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Deur jou administrateur uitgevee"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Om batterylewe te help verbeter, verminder batterybespaarder jou toestel se werkverrigting en beperk vibrasie, liggingdienste en die meeste agtergronddata. E-pos, boodskappe en ander programme wat op sinkronisering staatmaak, sal dalk nie opdateer tensy jy hulle oopmaak nie.\n\nBatterybespaarder skakel outomaties af wanneer jou toestel besig is om te laai."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Geblokkeer: Moet nooit hierdie kennisgewings wys nie"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Laag: Wys sonder klank aan die onderkant van die kennisgewinglys"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normaal: Wys hierdie kennisgewings sonder klank"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Hoog: Wys aan die bokant van die kennisgewingslys en maak \'n geluid"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Dringend: Verskyn vlugtig op die skerm en maak \'n geluid"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d minute lank (tot <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Een minuut lank (tot <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 4de0097..03dbcae 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"የድምጽ እርዳታ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"አሁን ቆልፍ"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"የሚያስተማምን ሁነታ"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android ስርዓት"</string>
<string name="user_owner_label" msgid="2804351898001038951">"የግል"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"በአስተዳዳሪዎ ተዘምኗል"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"በእርስዎ አስተዳዳሪ ተሰርዟል"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"የባትሪ ዕድሜን ለማሻሻል ማገዝ እንዲቻል፣ ኢሜይል፣ መልዕክት አላላክ እና ሌሎች በማመሳሰል ላይ የሚመረኮዙ መተግበሪያዎች እርስዎ ካልከፈቱዋቸው በቀር አይዘምኑም።\n\nየባትሪ ኃይል ቆጣቢ የእርስዎ መሣሪያ ኃይል በሚሞላበት ጊዜ በራስ-ሰር ይጠፋል።"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"የታገደ፦ እነኝህን ማሳወቂያዎች ፈፅሞ አታሳይ"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"ዝቅተኛ፦ በጸጥታ የማሳወቂያ ዝርዝር የታችኛውን ክፍል አሳይ"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"መደበኛ፦ በጸጥታ እነኝህን ማሳወቂያዎች አሳይ"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ከፍተኛ፦ የማሳወቂያዎችን ዝርዝር የላይኛውን ክፍል አሳይ እና ድምፅ አሰማ"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"አስቸኳይ፦ ወደ ገጸ ማያው አንሳ እና ድምፅ ቅዳ"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">ለ%1$d ደቂቃዎች (እስከ <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ድረስ)</item>
<item quantity="other">ለ%1$d ደቂቃዎች (እስከ <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ድረስ)</item>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 0c05bc4..b103b1b 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -226,8 +226,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"المساعد الصوتي"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"قفل الآن"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"الوضع الآمن"</string>
<string name="android_system_label" msgid="6577375335728551336">"نظام Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"شخصي"</string>
@@ -1477,6 +1476,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"تم التحديث بواسطة المشرف"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"تم حذف الحزمة عن طريق المشرف"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"للمساعدة في تحسين عمر البطارية، يساعد موفر البطارية في تقليل أداء الجهاز ويفرض قيدًا على الاهتزاز وخدمات الموقع ومعظم بيانات الخلفية. قد لا يتم تحديث البريد الإلكتروني والمراسلة والتطبيقات الأخرى التي تعتمد على المزامنة ما لم تفتحها.\n\nيتم إيقاف موفر البطارية تلقائيًا أثناء شحن الجهاز."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"محظور: عدم عرض هذه الإشعارات مطلقًا"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"منخفض الأهمية: عرض بأسفل قائمة الإشعارات وبدون تنبيه صوتي"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"عادي: عرض هذه الإشعارات بدون تنبيه صوتي"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"عالي الأهمية: عرض بأعلى قائمة الإشعارات مع إصدار تنبيه صوتي"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"عاجل: الظهور سريعًا على الشاشة مع إصدار تنبيه صوتي"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="zero">لمدة أقل من دقيقة (%1$d) (حتى <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="two">لمدة دقيقتين (%1$d) (حتى <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index 593400e..920068b 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Sizin administrator tərəfindən yeniləndi"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Administratorunuz tərəfindən silinib"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Batareyanın istismar müddətini təkmilləşdirmək üçün batareya qənaəti cihazınızın məhsuldarlığını azaldır və titrətmə, məkan xidmətləri və ən son fon məlumatlarını məhdudlaşdırır. Sinxronlaşmaya arxayın olan e-poçt, mesajlaşma və digər proqramlar siz onları açmayana kimi yenilənməyə bilər.\n\nCihazınız doldurulan zaman batareya qənaəti avtomatik olaraq sönür."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blok edildi: Bu bildirişləri heç vaxt göstərməyin"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Alçaq: Bildirişlər siyahısının aşağısında səssiz göstərin"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Bu bildişləri səssiz göstərin"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Yüksək: Bildirişlər siyahısında yuxarıda göstərin və səsli edin"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Təcili: Ekranda nəzər salın və səsli edin"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other"> %1$d dəqiqəlik (saat <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> radəsinə qədər)</item>
<item quantity="one">Bir dəqiqəlik (saat <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> radəsinə qədər)</item>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 50f2938..88b261e 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Гласова помощ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Заключване сега"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Безопасен режим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Системно от Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Личен"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Актуализирано от администратора ви"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Изтрито от администратора ви"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"С цел удължаване на живота на батерията режимът за запазването й намалява ефективността на устройството ви и ограничава вибрирането, услугите за местоположение и повечето данни на заден план. Приложенията за електронна поща, съобщения и др., които разчитат на синхронизиране, може да не се актуализират, освен ако не ги отворите.\n\nРежимът за запазване на батерията се изключва автоматично, когато устройството ви се зарежда."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Блокирано: Тези известия никога да не се показват"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Маловажно: Показване без звуков сигнал в долната част на списъка с известия"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Нормално: Тези известия да се показват без звуков сигнал"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Важно: Показване в горната част на списъка с известия и издаване на звуков сигнал"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Спешно: Показване на екрана и издаване на звуков сигнал"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">За %1$d минути (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">За една минута (до <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index fdd46172..91244e6 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ভয়েস সহায়তা"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"এখনই লক করুন"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"৯৯৯+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>টি)"</string>
<string name="safeMode" msgid="2788228061547930246">"নিরাপদ মোড"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android সিস্টেম"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ব্যক্তিগত"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"আপনার প্রশাসক দ্বারা আপডেট করা হয়েছে"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"আপনার প্রশাসক দ্বারা মুছে ফেলা হয়েছে"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ব্যাটরির লাইফ উন্নত করতে সহায়তা করতে, ব্যাটারি সাশ্রয়কারী আপনার ডিভাইসের কার্যসম্পাদনা হ্রাস করে এবং কম্পন, অবস্থান পরিষেবাসমূহ এবং অধিকাংশ ব্যাকগ্রাউন্ড ডেটা সীমিত করে৷ ইমেল, বার্তাপ্রেরণ এবং অন্যান্য অ্যাপ্লিকেশানগুলিকে যেগুলি সিঙ্কের উপর নির্ভর করে সেগুলিকে আপনি না খোলা পর্যন্ত নাও আপডেট হতে পারে৷\n\nআপনার ডিভাইসটিকে যখন চার্জ করা হয় তখন ব্যাটারি সাশ্রয়কারী স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়৷"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"অবরুদ্ধ: এই বিজ্ঞপ্তিগুলি কখনই দেখানো হবে না"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"নিম্ন: বিজ্ঞপ্তি তালিকার নীচের অংশে নিঃশব্দে প্রদর্শন করা হয়"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"সাধারন: এই বিজ্ঞপ্তিগুলি নিঃশব্দে প্রদর্শন করা হয়"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"উচ্চ: বিজ্ঞপ্তি তালিকার শীর্ষে দেখানো হয় এবং শব্দ করে"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"জরুরী: স্ক্রীনের উপরে প্রদর্শিত হয় এবং শব্দ করে"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d মিনিটের জন্য (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> পর্যন্ত)</item>
<item quantity="other">%1$d মিনিটের জন্য (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> পর্যন্ত)</item>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index cb24d26..0d2b46c 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. per veu"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloqueja ara"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"+999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mode segur"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"L\'administrador l\'ha actualitzat"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"L\'administrador ho ha suprimit"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Per tal d\'augmentar la durada de la bateria, la funció d\'estalvi de bateria redueix el rendiment del dispositiu i en limita la vibració i la majoria de dades en segon pla. És possible que el correu electrònic, la missatgeria i la resta d\'aplicacions que se sincronitzen amb freqüència no s\'actualitzin llevat que les obris.\n\nL\'estalvi de bateria es desactiva automàticament mentre el dispositiu s\'està carregant."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloquejada: no mostra mai aquestes notificacions"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baixa: mostra de manera silenciosa a la part inferior de la llista de notificacions"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostra aquestes notificacions de manera silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostra a la part superior de la llista de notificacions i emet un so"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent: mostra a la pantalla i emet un so"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Durant %1$d minuts (fins a les <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Durant 1 minut (fins a les <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index c2f1364..4c554bc 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Hlas. asistence"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Zamknout"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Nouzový režim"</string>
<string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Osobní"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Aktualizováno administrátorem"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Smazáno administrátorem"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Spořič baterie za účelem prodloužení výdrže baterie snižuje výkon zařízení a omezuje vibrace, služby určování polohy a většinu dat na pozadí. E-mail, aplikace pro zasílání zpráv a další aplikace, které používají synchronizaci, se nemusejí aktualizovat, dokud je neotevřete.\n\nPři nabíjení zařízení se spořič baterie automaticky vypne."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokováno: Tato oznámení nikdy nezobrazovat"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Nízká: Tato oznámení zobrazovat na konci seznamu bez zvukového upozornění"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normální: Tato oznámení zobrazovat bez zvukového upozornění"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Vysoká: Tato oznámení zobrazovat na začátku seznamu a upozornit na ně zvukem"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgentní: Tato oznámení zobrazovat přímo na obrazovce a upozornit na ně zvukem"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="few">%1$d minuty (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="many">%1$d minuty (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 42cb42b..850b8a2 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Opdateret af administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Slettet af din administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Batterisparefunktionen hjælper med at forlænge batteriets levetid ved at reducere enhedens ydeevne og begrænse vibration, placeringstjenester og det meste baggrundsdata. E-mail, beskedfunktioner og andre apps, der benytter synkronisering, opdateres muligvis ikke, medmindre du åbner dem.\n\nBatterisparefunktionen slukker automatisk, når enheden oplader."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokeret: Vis aldrig disse underretninger"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Lav: Vis lydløst nederst på listen over underretninger"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Vis disse underretninger lydløst"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Høj: Vis øverst på listen over underretninger, og giv lyd"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Presserende: Vis på skærmen, og giv lyd"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">I %1$d minutter (indtil <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">I %1$d minutter (indtil <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index d52c728..ab45504 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Sprachassistent"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Jetzt sperren"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Abgesicherter Modus"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-System"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Privat"</string>
@@ -245,7 +244,7 @@
<string name="permgrouplab_phone" msgid="5229115638567440675">"Telefon"</string>
<string name="permgroupdesc_phone" msgid="6234224354060641055">"Telefonanrufe zu tätigen und zu verwalten"</string>
<string name="permgrouplab_sensors" msgid="416037179223226722">"Körpersensoren"</string>
- <string name="permgroupdesc_sensors" msgid="7147968539346634043">"Auf Sensordaten zu Ihren Vitaldaten zugreifen"</string>
+ <string name="permgroupdesc_sensors" msgid="7147968539346634043">"auf Sensordaten zu Ihren Vitaldaten zuzugreifen"</string>
<string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Fensterinhalte abrufen"</string>
<string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Die Inhalte eines Fensters, mit dem Sie interagieren, werden abgerufen."</string>
<string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"\"Tippen & Entdecken\" aktivieren"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Von Ihrem Administrator aktualisiert"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Von Ihrem Administrator gelöscht"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Der Energiesparmodus schont den Akku, indem er die Leistung des Geräts reduziert und die Vibrationsfunktion sowie die meisten Hintergrunddatenaktivitäten einschränkt. E-Mail, SMS/MMS und andere Apps, die auf Ihrem Gerät synchronisiert werden, werden möglicherweise erst nach dem Öffnen aktualisiert.\n\nDer Energiesparmodus wird automatisch deaktiviert, wenn Ihr Gerät aufgeladen wird."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blockiert: Keine Benachrichtigungen anzeigen"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Niedrig: Benachrichtigungen ganz unten in der Benachrichtigungsliste und ohne Ton anzeigen"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Benachrichtigungen ohne Ton anzeigen"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Hoch: Benachrichtigungen ganz oben in der Benachrichtigungsliste und mit Ton anzeigen"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Dringend: Mit Ton auf dem Display einblenden"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d Minuten (bis <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">1 Minute (bis <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index f86c2fd..d5fdd29 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Φων.υποβοηθ."</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Κλείδωμα τώρα"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Ασφαλής λειτουργία"</string>
<string name="android_system_label" msgid="6577375335728551336">"Σύστημα Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Προσωπικό"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ενημερώθηκε από το διαχειριστή σας"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Διαγράφηκε από το διαχειριστή σας"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Προκειμένου να βελτιώσει τη διάρκεια ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας μειώνει την απόδοση της συσκευής σας και περιορίζει λειτουργίες όπως η δόνηση, οι υπηρεσίες τοποθεσίας και τα περισσότερα δεδομένα παρασκηνίου. Το ηλεκτρονικό ταχυδρομείο, η ανταλλαγή μηνυμάτων και άλλες εφαρμογές που βασίζονται στο συγχρονισμό ενδέχεται να μην ενημερώνονται έως ότου τις ανοίξετε.\n\nΗ Εξοικονόμηση μπαταρίας απενεργοποιείται αυτόματα όταν η συσκευή σας φορτίζει."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Αποκλεισμένες: Να μην εμφανίζονται ποτέ αυτές οι ειδοποιήσεις"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Χαμηλής βαρύτητας: Να εμφανίζονται στο κάτω τμήμα της λίστας ειδοποιήσεων χωρίς τη συνοδεία ήχου"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Κανονική βαρύτητα: Να εμφανίζονται αυτές οι ειδοποιήσεις χωρίς ήχο"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Υψηλής βαρύτητας: Να εμφανίζονται στην κορυφή της λίστας ειδοποιήσεων συνοδευόμενες από κάποιον ήχο"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Επείγουσες: Να προβάλλονται στην οθόνη και να συνοδεύονται από κάποιον ήχο"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Για %1$d λεπτά (έως τις <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Για ένα λεπτό (έως τις <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index e23f8d5..6c20763 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blocked: Never show these notifications"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Low: Silently show at the bottom of the notification list"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Silently show these notifications"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"High: Show at the top of the notifications list and make sound"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent: Peek onto the screen and make sound"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">For %1$d minutes (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">For one minute (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index e23f8d5..6c20763 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blocked: Never show these notifications"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Low: Silently show at the bottom of the notification list"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Silently show these notifications"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"High: Show at the top of the notifications list and make sound"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent: Peek onto the screen and make sound"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">For %1$d minutes (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">For one minute (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index e23f8d5..6c20763 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Updated by your administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Deleted by your administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blocked: Never show these notifications"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Low: Silently show at the bottom of the notification list"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Silently show these notifications"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"High: Show at the top of the notifications list and make sound"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent: Peek onto the screen and make sound"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">For %1$d minutes (until <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">For one minute (until <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index b442bc1f..4e2029f 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear ahora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personal"</string>
@@ -237,7 +236,7 @@
<string name="permgrouplab_sms" msgid="228308803364967808">"SMS"</string>
<string name="permgroupdesc_sms" msgid="4656988620100940350">"enviar y ver mensajes SMS"</string>
<string name="permgrouplab_storage" msgid="1971118770546336966">"Espacio de almacenamiento"</string>
- <string name="permgroupdesc_storage" msgid="637758554581589203">"acceder a las fotos, el contenido multimedia y los archivos del dispositivo"</string>
+ <string name="permgroupdesc_storage" msgid="637758554581589203">"acceder a las fotos, el contenido multimedia y los archivos"</string>
<string name="permgrouplab_microphone" msgid="171539900250043464">"Micrófono"</string>
<string name="permgroupdesc_microphone" msgid="4988812113943554584">"grabar audio"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"Cámara"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado por el administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Lo eliminó el administrador."</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para ayudar a mejorar la duración de la batería, el ahorro de batería reduce el rendimiento del dispositivo y limita la vibración, los servicios de ubicación y la mayoría de los datos en segundo plano. Es posible que el correo electrónico, la mensajería y otras aplicaciones que se basan en la sincronización no puedan actualizarse, a menos que los abras.\n\nEl ahorro de batería se desactiva de forma automática cuando el dispositivo se está cargando."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueada: no mostrar nunca estas notificaciones"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baja: mostrar en la parte inferior de la lista de notificación sin emitir sonido"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar estas notificaciones de manera silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostrar en la parte superior de la lista de notificaciones y emitir sonido"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: mostrar en la pantalla y emitir sonido"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Durante %1$d minutos hasta la(s) <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g></item>
<item quantity="one">Durante 1 minuto; hasta la(s) <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g></item>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index acbef23..4868f6b 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear ahora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"> 999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado por tu administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado por tu administrador"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para ayudar a mejorar la duración de la batería, la función de ahorro de energía reduce el rendimiento del dispositivo y limita la vibración, los servicios de ubicación y la mayor parte de la transmisión de datos en segundo plano. Es posible que las aplicaciones que se sincronizan, como las de correo y mensajes, no se actualicen a menos que las abras.\n\nLa función de ahorro de energía se desactiva automáticamente cuando el dispositivo se está cargando."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueada: no mostrar estas notificaciones"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baja: mostrar en la parte inferior de la lista de notificaciones de forma silenciosa"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar estas notificaciones de forma silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostrar en la parte superior de la lista de notificaciones y emitir sonido"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: mostrar en la pantalla y emitir sonido"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Durante %1$d minutos (hasta las <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Durante un minuto (hasta las <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 9a96683..3bbdcdf 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Häälabi"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Lukusta kohe"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Turvarežiim"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-süsteem"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Isiklik"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Värskendas administraator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Kustutas teie administraator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Aku kestuse parandamiseks vähendab akusäästja teie seadme toimivust ning piirab vibratsiooni, asukohateenuseid ja suuremat osa taustaandmetest. E-posti, sõnumsidet ja muid sünkroonimisele tuginevaid rakendusi võidakse värskendada ainult siis, kui te need avate.\n\nAkusäästja lülitatakse seadme laadimise ajal automaatselt välja."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokeeritud: ära kunagi näita neid märguandeid"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Madal: kuva vaikselt märguannete loendi allosas"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Tavaline: kuva need märguanded vaikselt"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Kõrge: kuva märguannete loendi ülaosas koos heliga"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Kiireloomuline: kuva ekraani servas koos heliga"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d minutiks (kuni <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Üheks minutiks (kuni <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index a30c437..13c8720 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ahots-laguntza"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Blokeatu"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modu segurua"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android sistema"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Pertsonalak"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Administratzaileak eguneratu du"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Administratzaileak ezabatu du"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Bateriak gehiago iraun dezan, bateria-aurrezleak gailuaren funtzionamendua, dardara, kokapen-zerbitzuak eta atzeko planoko datuen erabilera gehiena mugatzen ditu. Posta elektronikoa, mezuak eta sinkronizatzen diren gainerako zerbitzuak ez dira eguneratuko ireki ezean.\n\nGailua kargatzen ezarri orduko desaktibatzen da bateria-aurrezlea."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokeatuta: ez erakutsi jakinarazpen hauek"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Txikia: erakutsi jakinarazpen hauek zerrendaren behealdean"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normala: erakutsi jakinarazpen hauek, baina soinurik egin gabe"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Handia: erakutsi jakinarazpen hauek zerrendaren goialdean eta egin soinua"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Premiazkoa: agerrarazi jakinarazpen hauek pantailan eta egin soinua"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d minutuz (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> arte)</item>
<item quantity="one">Minutu batez (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> arte)</item>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 8672171..9cbb29b 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"دستیار صوتی"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"اکنون قفل شود"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"بیشتر از 999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"حالت ایمن"</string>
<string name="android_system_label" msgid="6577375335728551336">"سیستم Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"شخصی"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"توسط سرپرست شما بهروزرسانی شد"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"توسط سرپرستتان حذف شد"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"برای کمک به بهبود عمر باتری، بهینهسازی باتری عملکرد دستگاهتان را کاهش میدهد و لرزش، سرویسهای مبتنی بر مکان، و دسترسی به اکثر دادهها در پسزمینه را محدود میکند. ایمیل، پیامرسانی و برنامههای دیگری که به همگامسازی وابستهاند، تا زمانیکه آنها را باز نکنید نمیتوانند بهروز شوند.\n\nبهینهسازی باتری بهصورت خودکار در هنگام شارژ شدن دستگاه خاموش میشود."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"مسدود: هرگز این اعلانها نشان داده نشود"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"پایین: بدون صدا در پایین فهرست اعلان نشان داده شود"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"عادی: این اعلانها بدون صدا نشان داده شود"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"بالا: در بالای فهرست اعلانها و به همراه صدا نشان داده شود"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ضروری: نمای کلی به همراه صدا در صفحه نشان داده شود"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">به مدت %1$d دقیقه (تا <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">به مدت %1$d دقیقه (تا <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 8100305..34b5fad 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ääniapuri"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Lukitse nyt"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Suojattu tila"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-järjestelmä"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Henkilökoht."</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Järjestelmänvalvojasi on päivittänyt paketin."</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Järjestelmänvalvoja on poistanut paketin."</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Jos haluat parantaa akun kestoa, virransäästö vähentää laitteesi suorituskykyä ja rajoittaa värinää, sijaintipalveluita ja useimpia taustatietoja. Sähköposti, viestit ja muut synkronointiin perustuvat sovellukset eivät välttämättä päivity, ellet avaa niitä.\n\nVirransäästö poistuu käytöstä automaattisesti, kun laitteesi latautuu."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Estetty: älä koskaan näytä näitä ilmoituksia."</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Matala: näytä nämä ilmoitukset huomaamattomasti luettelon alaosassa."</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Tavallinen: näytä nämä ilmoitukset huomaamattomasti."</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Korkea: näytä nämä ilmoitukset luettelon yläosassa ja toista äänimerkki."</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Kiireellinen: näytä ilmoitus näytöllä ja toista äänimerkki."</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d minuutiksi (kunnes kello on <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Yhdeksi minuutiksi (kunnes kello on <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index b273980..9dad4c0 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. vocale"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Verrouiller"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string>
<string name="android_system_label" msgid="6577375335728551336">"Système Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personnel"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Mis à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Supprimé par votre administrateur"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Pour améliorer l\'autonomie de la pile, la fonction d\'économie d\'énergie réduit les performances de votre appareil et limite la vibration, les services de localisation ainsi que la plupart des données en arrière-plan. Les applications Courriel, Messages et d\'autres qui reposent sur la synchronisation ne peuvent pas se mettre à jour, sauf si vous les ouvrez. \n\n L\'économiseur d\'énergie se désactive automatiquement lorsque votre appareil est en charge."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloquée : ne jamais afficher ces notifications"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Faible : afficher en mode silencieux au bas de la liste de notifications"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normale : afficher ces notifications en mode silencieux"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Élevée : afficher en haut de la liste des notifications et émettre un son"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent : afficher sur l\'écran et émettre un son"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Pendant %1$d minute (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Pendant %1$d minutes (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 850c18a..dc08738 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Assistance vocale"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Verrouiller"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string>
<string name="android_system_label" msgid="6577375335728551336">"Système Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personnel"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Mis à jour par votre administrateur"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Supprimé par votre administrateur"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Pour améliorer l\'autonomie de la batterie, l\'économiseur de batterie réduit les performances et désactive le vibreur, les services de localisation et la plupart des données en arrière-plan. Les messageries électroniques ou autres applications utilisant la synchronisation pourraient ne pas se mettre à jour, sauf si vous les ouvrez.\n\nL\'économiseur de batterie s\'éteint automatiquement lorsque l\'appareil est en charge."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloquée : ne jamais afficher ces notifications"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Faible : afficher en mode silencieux au bas de la liste de notifications"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normale : afficher ces notifications en mode silencieux"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Élevée : afficher en haut de la liste des notifications et émettre un son"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent : afficher sur l\'écran et émettre un son"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Pendant %1$d minute (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Pendant %1$d minutes (jusqu\'à <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index 998f494..02ee7b45 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Asistente voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Persoal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizado polo administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado polo administrador"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para axudar a mellorar a duración da batería, a función aforro de batería reduce o rendemento do teu dispositivo e limita a vibración, os servizos de localización e a maioría dos datos en segundo plano. É posible que o correo electrónico, as mensaxes e outras aplicacións que dependen da sincronización non se actualicen a menos que os abras. \n\nA función aforro de batería desactívase automaticamente cando pos a cargar o teu dispositivo."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueada: non mostrar nunca estas notificacións"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baixa: mostrar de forma silenciosa na parte inferior da lista de notificacións"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar estas notificacións de forma silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostrar na parte superior da lista de notificacións e emitir son"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urxente: mostrar na pantalla e emitir son"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Durante %1$d minutos (ata as <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Durante un minuto (ata as <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index 7cfd200..c1187df 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"વૉઇસ સહાય"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"હવે લૉક કરો"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"સુરક્ષિત મોડ"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android સિસ્ટમ"</string>
<string name="user_owner_label" msgid="2804351898001038951">"વ્યક્તિગત"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"તમારા વ્યવસ્થાપક દ્વારા અપડેટ થયેલ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"તમારા વ્યવસ્થાપક દ્વારા કાઢી નાખેલ"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"બૅટરી આવરદા વધુ સારી કરવામાં સહાય માટે, બૅટરી સેવર તમારા ઉપકરણના પ્રદર્શનને ઘટાડે છે અને વાઇબ્રેશન, સ્થાન સેવાઓ અને મોટાભાગના પૃષ્ઠભૂમિ ડેટાને સીમિત કરે છે. ઇમેઇલ, મેસેજિંગ અને અન્ય એપ્લિકેશનો જે સમન્વયન પર આધાર રાખે છે તે તમે તેમને ખોલશો નહીં ત્યાં સુધી અપડેટ થઈ શકતી નથી.\n\nજ્યારે તમારું ઉપકરણ ચાર્જ થઈ રહ્યું હોય ત્યારે બૅટરી સેવર આપમેળે બંધ થઈ જાય છે."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"અવરોધિત: આ સૂચનાઓ ક્યારેય બતાવશો નહીં"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"નિમ્ન: સૂચનાની સૂચિની નીચે ચુપચાપ બતાવો"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"સામાન્ય: આ સૂચનાઓ ચુપચાપ બતાવો"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ઉચ્ચ: સૂચનાઓની સૂચિની ટોચ પર બતાવો અને અવાજ કરો"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"તાત્કાલિક : સ્ક્રીન પર ત્વરિત દ્રષ્ટિ કરો અને અવાજ કરો"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d મિનિટ માટે (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> સુધી)</item>
<item quantity="other">%1$d મિનિટ માટે (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> સુધી)</item>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index a001211..e81872a 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"वॉइस सहायक"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"अभी लॉक करें"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android सिस्टम"</string>
<string name="user_owner_label" msgid="2804351898001038951">"व्यक्तिगत"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"आपके नियंत्रक द्वारा अपडेट किया गया"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"आपके नियंत्रक द्वारा हटाया गया"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"बैटरी जीवन काल को बेहतर बनाने में सहायता के लिए, बैटरी सेवर आपके डिवाइस के प्रदर्शन को कम कर देता है और कंपन, स्थान सेवाओं और अधिकांश पृष्ठभूमि डेटा को सीमित कर देता है. हो सकता है कि ईमेल, संदेश सेवा तथा समन्वयन पर आधारित अन्य ऐप्स तब तक ना खुलें जब तक कि आप उन्हें नहीं खोलते.\n\nजब आपका डिवाइस चार्ज हो रहा होता है तो बैटरी सेवर अपने आप बंद हो जाता है."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"अवरोधित: ये नोटिफिकेशन कभी ना दिखाएं"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"निम्न: नोटिफिकेशन सूची के नीचे मौन रूप से दिखाएं"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"सामान्य: ये नोटिफिकेशन मौन रूप से दिखाएं"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"उच्च: नोटिफिकेशन सूची के शीर्ष पर दिखाएं और ध्वनि करें"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"तत्काल: स्क्रीन पर एक झलक देखें और ध्वनि करें"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d मिनट के लिए (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> तक)</item>
<item quantity="other">%1$d मिनट के लिए (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> तक)</item>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 55399af..f53625e 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -223,8 +223,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Glasovna pomoć"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Zaključaj sada"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Siguran način rada"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sustav Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Osobno"</string>
@@ -1450,6 +1449,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ažurira vaš administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Izbrisao administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Da bi se produljilo trajanje baterije, ušteda baterije smanjuje rad uređaja i ograničava vibraciju, usluge lokacije i većinu pozadinskih podataka. Aplikacije za e-poštu, slanje poruka i druge aplikacije koje se oslanjaju na sinkronizaciju možda se neće ažurirati ako ih ne otvorite.\n\nUšteda baterije isključuje se automatski dok se uređaj puni."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokirano: nikad ne prikazuj te obavijesti"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Nisko: tiho prikaži na dnu popisa obavijesti"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Uobičajeno: prikazuj te obavijesti tiho"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Visoko: prikaži na vrhu popisa obavijesti i emitiraj zvučni signal"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Hitno: prikaži na zaslonu i emitiraj zvučni signal"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d minutu (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="few">%1$d minute (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index dc87943..2bb8fb0 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Hangsegéd"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Zárolás most"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Biztonsági üzemmód"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android rendszer"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Személyes"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Frissítette a rendszergazda"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"A rendszergazda törölte"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Az akkumulátoridő növelése érdekében az energiatakarékos mód csökkenti az eszköz teljesítményét, és korlátozza a rezgést, a helyszolgáltatásokat, valamint a legtöbb háttéradatot is. Előfordulhat, hogy azok az e-mail-, üzenetküldő és egyéb alkalmazások, amelyek szinkronizálására számít, csak akkor frissítenek, ha megnyitja azokat.\n\nAz energiatakarékos mód automatikusan kikapcsol, ha eszköze töltőn van."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Letiltva: soha nem jelennek meg ezek az értesítések"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Alacsony: az értesítések az értesítési lista végén jelennek meg hangjelzés nélkül"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normál: hang nélkül jelennek meg ezek az értesítések"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Magas: az értesítések az értesítési lista elején jelennek meg hangjelzéssel"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Sürgős: az értesítések felugranak a képernyőn hangjelzéssel"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d percen át (eddig: <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Egy percen át (eddig: <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index f1d32d8..257d435 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ձայնային օգնութ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Կողպել հիմա"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Անվտանգ ռեժիմ"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android համակարգ"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Անձնական"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ադմինիստրատորը թարմացրել է այն"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Ադմինիստրատորը ջնջել է այն"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Մարտկոցի աշխատանքի ժամկետը երկարացնելու նպատակով, մարտկոցի էներգիայի խնայման գործառույթը սահմանափակում է սարքի աշխատանքը, թրթռոցը, տեղադրության ծառայությունները և հետնաշերտում աշխատող շատ գործընթացներ: Էլփոստը, հաղորդագրությունների փոխանակումը և տվյալների համաժամեցումից կախված այլ հավելվածները կարող են չթարմացվել, եթե դուք դրանք չգործարկեք:\n\nԵրբ ձեր սարքը լիցքավորվում է, մարտկոցի էներգիայի խնայման գործառույթն ինքնաշխատորեն անջատվում է:"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Արգելափակված է. Երբեք չցուցադրել այս ծանուցումները"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Ցածր. Ցուցադրել ծանուցումների ցանկի ներքևում առանց ձայնային ազդանշանի"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Նորմալ. Ցուցադրել այս ծանուցումներն առանց ձայնային ազդանշանի"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Բարձր. Ցուցադրել ծանուցումների ցանկի վերևում և հնչեցնել ձայնային ազդանշան"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Հրատապ. Ցուցադրել էկրանին և հնչեցնել ձայնային ազդանշան"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d րոպե (մինչև <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">%1$d րոպե (մինչև <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 8e18dae..6be50d5 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Bantuan Suara"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Kunci sekarang"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mode aman"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Pribadi"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Diperbarui oleh administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Dihapus oleh administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Untuk membantu meningkatkan masa pakai baterai, penghemat baterai mengurangi kinerja perangkat dan membatasi getaran, layanan lokasi, dan kebanyakan data latar belakang. Email, perpesanan, dan aplikasi lain yang mengandalkan sinkronisasi mungkin tidak diperbarui kecuali jika dibuka.\n\nPenghemat baterai otomatis nonaktif jika perangkat diisi dayanya."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Diblokir: Jangan pernah menampilkan notifikasi ini"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Rendah: Menampilkan di bagian bawah daftar notifikasi secara diam-diam"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Menampilkan notifikasi ini secara diam-diam"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Tinggi: Menampilkan di bagian atas daftar notifikasi dan membunyikan suara"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Darurat: Muncul di layar dan membunyikan suara"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Selama %1$d menit (hingga <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Selama satu menit (hingga <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index b2c98f0..c2b8a8c 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Raddaðstoð"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Læsa núna"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Örugg stilling"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android kerfið"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Persónulegt"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Uppfært af kerfisstjóranum"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Eytt af kerfisstjóra"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Til að auka endingu rafhlöðunnar mun orkusparnaður draga úr afköstum tækisins og takmarka titring, staðsetningarþjónustu og megnið af bakgrunnsgögnum. Ekki er víst að tölvupóstur, skilaboð og önnur forrit sem reiða sig á samstillingu uppfærist nema þú opnir þau.\n\nSjálfkrafa er slökkt á orkusparnaði þegar tækið er í hleðslu."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Útilokaðar: Aldrei sýna þessar tilkynningar"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Léttvægar: Sýna neðst á tilkynningalistanum án hljóðs"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Venjulegar: Sýna þessar tilkynningar án hljóðs"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Mikilvægar: Sýna efst á tilkynningalistanum og spila hljóð"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Áríðandi: Birta á skjánum og spila hljóð"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Í %1$d mínútu (til <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Í %1$d mínútur (til <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index b36e2e5..c4614fc 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Aggiornato dall\'amministratore"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminato dall\'amministratore"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Per aumentare la durata della batteria, la funzione di risparmio energetico riduce le prestazioni del dispositivo e limita vibrazione, servizi di localizzazione e la maggior parte dei dati in background. App di email, messaggi e altre app che si basano sulla sincronizzazione potrebbero essere aggiornate soltanto all\'apertura.\n\nLa funzione di risparmio energetico viene disattivata automaticamente quando il dispositivo è in carica."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloccato: non mostrare mai queste notifiche"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Bassa: mostra silenziosamente alla fine dell\'elenco di notifiche"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normale: mostra silenziosamente queste notifiche"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostra all\'inizio dell\'elenco di notifiche e riproduci suono"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: apri sullo schermo e riproduci suono"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Per %1$d minuti (fino alle ore <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Per un minuto (fino alle ore <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index cf4ca52..f615187 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"נעל עכשיו"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"מצב בטוח"</string>
<string name="android_system_label" msgid="6577375335728551336">"מערכת Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"אישי"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"עודכן על ידי מנהל המערכת שלך"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"נמחקה על ידי מנהל המערכת שלך"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"כדי לעזור בשיפור חיי הסוללה, תכונת החיסכון בסוללה מצמצמת את פעולות המכשיר ומגבילה רטט, שירותי מיקום ואת רוב נתוני הרקע. אימייל, העברת הודעות ואפליקציות אחרות המסתמכות על סנכרון עשויות שלא להתעדכן, אלא אם תפתח אותן.\n\nתכונת החיסכון בסוללה מושבתת אוטומטית כשהמכשיר בטעינה."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"חסימה: לעולם אל תציג הודעות אלה"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"נמוכה: הצג בתחתית רשימת ההודעות בלי להשמיע צליל"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"רגילה: הצג הודעות אלה בלי להשמיע צליל"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"גבוהה: הצג בראש רשימת ההודעות והשמע צליל"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"דחופה: הצג לרגע על המסך והשמע צליל"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="two">למשך %d דקות (עד <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="many">למשך %1$d דקות (עד <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 1ebf699..6dd4e9a 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"管理者によって更新されています"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"管理者によって削除されました"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"バッテリーを長持ちさせるため、バッテリーセーバーは端末のパフォーマンスを抑え、バイブレーション、位置情報サービス、大半のバックグラウンドデータを制限します。メール、SMSや、同期を使用するその他のアプリは、起動しても更新されないことがあります。\n\nバッテリーセーバーは端末の充電中は自動的にOFFになります。"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ブロック: 今後はこの通知を表示しない"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"低: 通知リストの下にマナーモードで表示する"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"標準: この通知をマナーモードで表示する"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"高: 通知リストの上に表示し、音声でも知らせる"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"緊急: 画面にプレビューを表示し、音声でも知らせる"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d分間(<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>まで)</item>
<item quantity="one">1分間(<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>まで)</item>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 604323a..6709d92 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ხმოვანი ასისტ."</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ახლა ჩაკეტვა"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"უსაფრთხო რეჟიმი"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-ის სისტემა"</string>
<string name="user_owner_label" msgid="2804351898001038951">"პირადი"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"განახლებულია თქვენი ადმინისტრატორის მიერ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"თქვენი ადმინისტრატორის მიერ წაშლილი"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ელემენტის მოქმედების ვადის გაუმჯობესებისათვის, ელემენტის დამზოგი ამცირებს თქვენი მოწყობილობის შესრულებას და ზღუდავს ვიბრაციას, ადგილმდებარეობის მომსახურებებს და ძირითად ფონურ მონაცემებს. ელ-ფოსტა, შეტყობინებები და სხვა სინქრონიზაციაზე დაყრდნობილი აპლიკაციების განახლება არ მოხდება მათ გახსნეამდე. \n\n ელემენტის დამზოგველი ავტომატურად გამოირთვება, როდესაც თქვენს მოწყობილობას დამტენთან შეაერთებთ."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"დაბლოკილი: ეს შეტყობინებები აღარასოდეს გამოჩნდება"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"დაბალი: ეს შეტყობინებები სიის ბოლოში, უხმოდ გამოჩნდება"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ნორმალური: ეს შეტყობინებები უხმოდ გამოჩნდება"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"მაღალი: ეს შეტყობინებები სიის თავში, ხმოვან სიგნალთან ერთად გამოჩნდება"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"გადაუდებელი: შეტყობინებები პირდაპირ ეკრანზე, ხმოვან სიგნალთან ერთად გამოჩნდება"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d წუთის განმავლობაში (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>-მდე)</item>
<item quantity="one">ერთი წუთის განმავლობაში (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>-მდე)</item>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index 323be5d..8d12034 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Дауыс көмекшісі"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Қазір бекіту"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Қауіпсіз режим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android жүйесі"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Жеке"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Әкімші жаңартты"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Әкімші жойған"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Батареяның қызмет көрсету мерзімін жақсарту үшін батарея үнемдегіш құрылғының өнімділігін төмендетеді және дірілді, орынды анықтау қызметтерін және фондық деректердің көпшілігін шектейді. Электрондық пошта, хабар алмасу және синхрондауға негізделген басқа қолданбалар ашқанша жаңартылмауы мүмкін.\n\nБатарея үнемдегіш құрылғы зарядталып жатқанда автоматты түрде өшеді."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Бұғатталған: осы хабарландыруларды ешқашан көрсетпеу"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Төмен: хабарландырулар тізімнің төменгі жағында үнсіз көрсету"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Қалыпты: осы хабарландыруларды үнсіз көрсету"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Жоғары: хабарландырулар тізімінің жоғарғы жағында көрсету және дыбыс шығару"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Шұғыл: экранға бекіту және дыбыс шығару"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d минут бойы (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> дейін)</item>
<item quantity="one">Бір минут бойы (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> дейін)</item>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index c00bc14..dcaf305 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ជំនួយសម្លេង"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ចាក់សោឥឡូវនេះ"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"របៀបសុវត្ថិភាព"</string>
<string name="android_system_label" msgid="6577375335728551336">"ប្រព័ន្ធ Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ផ្ទាល់ខ្លួន"</string>
@@ -1443,6 +1442,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"បានធ្វើបច្ចុប្បន្នភាពដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"បានលុបដោយអ្នកគ្រប់គ្រងរបស់អ្នក"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ដើម្បីជួយឲ្យថាមពលថ្មប្រសើរឡើង កម្មវិធីសន្សំសំចៃថាមពលថ្មកាត់បន្ថយប្រតិបត្តិការឧបករណ៍របស់អ្នក និងកម្រិតភាពញ័រ សេវាកម្មទីតាំង និងទិន្នន័យផ្ទៃខាងក្រោយស្ទើរតែទាំងអស់។ ការផ្ញើសារអ៊ីម៉ែល និងកម្មវិធីផ្សេងទៀតដែលពឹងផ្អែកលើការធ្វើសមកាលកម្មអាចនឹងមិនធ្វើបច្ចុប្បន្នភាពទេ លុះត្រាតែអ្នកបើកពួកវា។\n\nកម្មវិធីសន្សំសំចៃបិទដោយស្វ័យប្រវត្តិ នៅពេលដែលឧបករណ៍របស់អ្នកកំពុងសាកថ្ម។"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"បានរារាំង៖ កុំបង្ហាញការជូនដំណឹងទាំងនេះ"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"កម្រិតទាប៖ បង្ហាញស្ងាត់ៗនៅផ្នែកខាងក្រោមបញ្ជីនៃការជូនដំណឹង"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ធម្មតា៖ បង្ហាញការជូនដំណឹងទាំងនេះស្ងាត់ៗ"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"កម្រិតខ្ពស់៖ បង្ហាញនៅផ្នែកខាងលើបញ្ជីនៃការជូនដំណឹង និងបន្លឺសំឡេង"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"បន្ទាន់៖ លោតបង្ហាញនៅលើអេក្រង់ និងបន្លឺសំឡេង"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">រយៈពេល %1$d នាទី (រហូតដល់ <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">រយៈពេលមួយនាទី (រហូតដល់ <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index 1aba0bb..e7ad010 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ಧ್ವನಿ ಸಹಾಯಕ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ಈಗ ಲಾಕ್ ಮಾಡಿ"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"ಸುರಕ್ಷಿತ ಮೋಡ್"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android ಸಿಸ್ಟಂ"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ವೈಯಕ್ತಿಕ"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ನವೀಕರಿಸಲಾಗಿದೆ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಳಿಸಲಾಗಿದೆ"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ನಿಮ್ಮ ಬ್ಯಾಟರಿಯ ಬಾಳಿಕೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಲು, ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ನಿಮ್ಮ ಸಾಧನದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ವೈಬ್ರೇಷನ್, ಸ್ಥಳ ಸೇವೆಗಳು ಹಾಗೂ ಹೆಚ್ಚಿನ ಹಿನ್ನೆಲೆ ಡೇಟಾವನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಅವಲಂಬಿಸಿರುವ ಇಮೇಲ್, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ, ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳು ನೀವು ತೆರೆಯದ ಹೊರತು ನವೀಕರಣಗೊಳ್ಳುವುದಿಲ್ಲ.\n\nನಿಮ್ಮ ಸಾಧನವು ಚಾರ್ಜ್ ಆಗುತ್ತಿರುವ ಸಮಯದಲ್ಲಿ ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ಆಫ್ ಆಗುತ್ತದೆ."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ: ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಎಂದಿಗೂ ತೋರಿಸಬೇಡ"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"ಕಡಿಮೆ: ಅಧಿಸೂಚನೆ ಪಟ್ಟಿಯ ಕೆಳಭಾಗದಲ್ಲಿ ಸ್ಥಬ್ಧವಾಗಿ ತೋರಿಸು"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ಸಾಮಾನ್ಯ: ಈ ಅಧಿಸೂಚನೆಗಳನ್ನು ಸ್ಥಬ್ಧವಾಗಿ ತೋರಿಸು"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ಅಧಿಕ: ಅಧಿಸೂಚನೆಗಳ ಪಟ್ಟಿಯ ಮೇಲ್ಭಾಗದಲ್ಲಿ ತೋರಿಸು ಮತ್ತು ಧ್ವನಿ ಮಾಡು"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ತುರ್ತು: ಪರದೆಯನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಧ್ವನಿ ಮಾಡು"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d ನಿಮಿಷಗಳವರೆಗೆ (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ವರೆಗೆ)</item>
<item quantity="other">%1$d ನಿಮಿಷಗಳವರೆಗೆ (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ವರೆಗೆ)</item>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 3384f09..85f46d1 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"음성 지원"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"지금 잠그기"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>개)"</string>
<string name="safeMode" msgid="2788228061547930246">"안전 모드"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android 시스템"</string>
<string name="user_owner_label" msgid="2804351898001038951">"개인"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"관리자에 의해 업데이트됨"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"관리자가 삭제함"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"배터리 수명 개선을 위해, 배터리 세이버는 기기의 성능을 줄이고 진동, 위치 서비스 및 대부분의 백그라운드 데이터를 제한합니다. 이메일, 메시지 및 동기화에 의존하는 기타 앱은 앱을 열 때까지 업데이트되지 않을 수 있습니다.\n\n배터리 세이버는 기기를 충전 중일 때는 자동으로 사용 중지됩니다."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"차단: 알림 다시 표시 안함"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"낮음: 알림 목록 하단에 무음으로 표시"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"일반: 무음으로 알림 표시"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"높음: 알림 목록 상단에 표시하고 소리로 알림"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"긴급: 화면에 표시하고 소리로 알림"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d분 동안(<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>까지)</item>
<item quantity="one">1분 동안(<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>까지)</item>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 870c858..bb1cd7f 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Үн жардамчысы"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Азыр кулпулоо"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Коопсуз режим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android Тутуму"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Жеке"</string>
@@ -1442,6 +1441,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Администраторуңуз жаңырткан"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Администраторуңуз тарабынан жок кылынган"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Батареянын өмүрүн узартуу үчүн, батареяны үнөмдөгүч түзмөгүңүздүн ишинин майнаптуулугун азайтып, дирилдөө, жайгашкан жерди аныктоо кызматтары жана фондук дайындардын көпчүлүгүн чектеп коёт. Электрондук почта, билдирүү жазышуу жана башка шайкештештирүүгө байланыштуу колдонмолор ачылмайынча жаңыртылбай калышы мүмкүн.\n\nБатарея үнөмдөгүч түзмөгүңүз кубатталып жатканда автоматтык түрдө өчүп калат."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Бөгөттөлгөн: Бул эскертмелер эч качан көрсөтүлбөсүн"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Төмөн: Эскертмелер тизмесинин эң ылдыйында көрсөтүлсүн"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Кадимки: Бул эскертмелер акырын көрсөтүлсүн"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Жогору: Эскертмелер тизмесинин эң жогорусунда үн чыгарып көрсөтүлсүн"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Шашылыш: Үн менен коштолуп, экранга чыгарылсын"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d мүнөткө (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> чейин)</item>
<item quantity="one">Бир мүнөткө (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> чейин)</item>
diff --git a/core/res/res/values-large/dimens.xml b/core/res/res/values-large/dimens.xml
index 8cd614d..69a1aa1 100644
--- a/core/res/res/values-large/dimens.xml
+++ b/core/res/res/values-large/dimens.xml
@@ -24,9 +24,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- Minimum width of the search view text entry area. -->
- <dimen name="search_view_text_min_width">192dip</dimen>
-
<item type="dimen" name="dialog_min_width_major">55%</item>
<item type="dimen" name="dialog_min_width_minor">80%</item>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index d5484d3..bc58ea6 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ຊ່ວຍເຫຼືອທາງສຽງ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ລັອກດຽວນີ້"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
<string name="android_system_label" msgid="6577375335728551336">"ລະບົບ Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ສ່ວນໂຕ"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"ອັບເດດໂດຍຜູ້ຄວບຄຸມຂອງທ່ານແລ້ວ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"ຖືກຜູ້ຄວບຄຸມຂອງທ່ານລຶບໄປແລ້ວ"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ເພື່ອຊ່ວຍເພີ່ມອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດໄຟແບັດເຕີຣີຫຼຸດປະສິດທິພາບການເຮັດວຽກຂອງອຸປະກອນຂອງທ່ານລົງ ແລະຈຳກັດການສັ່ນ, ການບໍລິການຫາທີ່ຕັ້ງ, ແລະຂໍ້ມູນພື້ນຫຼັງເກືອບທັງໝົດ. ອີເມວ, ການສົ່ງຂໍ້ຄວາມ, ແລະແອັບອື່ນໆທີ່ອາໄສການຊິງຄ໌ອາດຈະບໍ່ອັບເດດ ນອກຈາກວ່າທ່ານເປີດມັນ.\n\nຕົວປະຢັດໄຟແບັດເຕີຣີຈະປິດອັດຕະໂນມັດ ເມື່ອອຸປະກອນຂອງທ່ານກຳລັງສາກຢູ່."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ບລັອກແລ້ວ: ຢ່າສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"ຕໍ່າ: ສະແດງຢູ່ສ່ວນລຸ່ມຂອງລາຍການແຈ້ງເຕືອນແບບມີບໍ່ສຽງ"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ປົກກະຕິ: ສະແດງການແຈ້ງເຕືອນເຫຼົ່ານີ້ແບບບໍ່ມີສຽງ"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ສູງ: ສະແດງຢູ່ສ່ວນເທິງຂອງລາຍການແຈ້ງເຕືອນ ແລະສົ່ງສຽງດັງ"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ດ່ວນ: ເດັ້ງຂຶ້ນເທິງຫນ້າຈໍ ແລະສົ່ງສຽງດັງ"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">ເປັນເວລາ %1$d ນາທີ (ຈົນຮອດ <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">ເປັນເວລາ 1 ນາທີ (ຈົນຮອດ <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 6ee24cf..b148d2c 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Užrakinti dabar"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Saugos režimas"</string>
<string name="android_system_label" msgid="6577375335728551336">"„Android“ sistema"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Asmeninė"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Atnaujino administratorius"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Ištrynė administratorius"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Kad tausotų akumuliatoriaus energiją akumuliatoriaus tausojimo priemonė sumažina įrenginio veikimą ir apriboja vibravimą, vietovės paslaugas bei daugumą foninių duomenų. El. pašto, susirašinėjimo ir kitos programos, kurios veikia sinchronizavimo pagrindu, gali būti neatnaujintos, nebent jas atidarysite.\n\nAkumuliatoriaus tausojimo priemonė automatiškai išjungiama, kai įrenginys įkraunamas."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Užblokuota: niekada nerodyti šių pranešimų"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Maža: tyliai rodyti pranešimų sąrašo apačioje"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Įprasta: tyliai rodyti šiuos pranešimus"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Didelė: rodyti pranešimų sąrašo viršuje ir skambėti"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Skubu: rodyti ekrane ir skambėti"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d minutę (iki <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="few">%1$d minutes (iki <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 7785965..892402b 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -223,8 +223,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Balss palīgs"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloķēt tūlīt"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"Pārsniedz"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Drošais režīms"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android sistēma"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personisks"</string>
@@ -1450,6 +1449,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Atjaunināja administrators"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Izdzēsa jūsu administrators"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek samazināta ierīces veiktspēja un tiek ierobežota vibrācija, atrašanās vietu pakalpojumi un lielākā daļa fona datu. E-pasta, ziņojumapmaiņas un cita veida lietotnes, kuru darbības pamatā ir datu sinhronizācija, var netikt atjauninātas, ja tās neatverat.\n\nTiklīdz tiek sākta ierīces uzlāde, akumulatora jaudas taupīšanas režīms automātiski tiek izslēgts."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloķēts: nekad nerādīt šos paziņojumus"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Zemu: rādīt paziņojumu saraksta apakšdaļā bez skaņas signāla"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normāli: rādīt šos paziņojumus bez skaņas signāla"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Augstu: rādīt paziņojumu saraksta augšdaļā un ar skaņas signālu"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Steidzami: rādīt ekrānā ar skaņas signālu"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="zero">%1$d minūtes (līdz <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">%1$d minūti (līdz <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-mcc302-mnc220/config.xml b/core/res/res/values-mcc302-mnc220/config.xml
index 09a63aa..454e4b6 100644
--- a/core/res/res/values-mcc302-mnc220/config.xml
+++ b/core/res/res/values-mcc302-mnc220/config.xml
@@ -37,7 +37,7 @@
Or string format of ApnSettingV3.
note that empty fields can be ommitted: "name,apn,,,,,,,,,310,260,,DUN" -->
<string-array translatable="false" name="config_tether_apndata">
- <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,54</item>
+ <item>[ApnSettingV3]TELUS ISP,isp.telus.com,,,,,,,,,302,220,,DUN,IP,IP,true,0,,,,,,,gid,54</item>
<item>[ApnSettingV3]Tethered Mobile Internet,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,50</item>
<item>[ApnSettingV3]Tethered Public Mobile,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,4D4F</item>
</string-array>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index eb90369..9cfa6cf 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -373,7 +373,7 @@
<string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"Овозможува апликацијата да го користи инфрацрвениот предавател на телефонот."</string>
<string name="permlab_setWallpaper" msgid="6627192333373465143">"подеси тапет"</string>
<string name="permdesc_setWallpaper" msgid="7373447920977624745">"Дозволува апликацијата да го постави системскиот тапет."</string>
- <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"прилагоди ја големината на твојот тапет"</string>
+ <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"приспособи ја големината на твојот тапет"</string>
<string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Дозволува апликацијата да постави сугестии за големина на системски тапет."</string>
<string name="permlab_setTimeZone" msgid="2945079801013077340">"подеси временска зона"</string>
<string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Дозволува апликацијата да ја промени часовната зона на таблетот."</string>
@@ -537,7 +537,7 @@
<item msgid="1735177144948329370">"Факс дома"</item>
<item msgid="603878674477207394">"Пејџер"</item>
<item msgid="1650824275177931637">"Други"</item>
- <item msgid="9192514806975898961">"Прилагоди"</item>
+ <item msgid="9192514806975898961">"Приспособен"</item>
</string-array>
<string-array name="emailAddressTypes">
<item msgid="8073994352956129127">"Дома"</item>
@@ -622,8 +622,8 @@
<string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
<string name="orgTypeWork" msgid="29268870505363872">"Работа"</string>
<string name="orgTypeOther" msgid="3951781131570124082">"Друго"</string>
- <string name="orgTypeCustom" msgid="225523415372088322">"Прилагоди"</string>
- <string name="relationTypeCustom" msgid="3542403679827297300">"Прилагоди"</string>
+ <string name="orgTypeCustom" msgid="225523415372088322">"Приспособен"</string>
+ <string name="relationTypeCustom" msgid="3542403679827297300">"Приспособена"</string>
<string name="relationTypeAssistant" msgid="6274334825195379076">"Помошник"</string>
<string name="relationTypeBrother" msgid="8757913506784067713">"Брат"</string>
<string name="relationTypeChild" msgid="1890746277276881626">"Дете"</string>
@@ -1442,6 +1442,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ажурирано од администраторот"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Избришано од администраторот"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"За да ви помогне да ја подобрите трајноста на батеријата, штедачот на батеријата ја намалува изведбата на уредот и го ограничува вибрирањето, услугите за локација и повеќето податоци од заднина. Е-поштата, испраќањето пораки и другите апликации кои се потпираат на синхронизација можеби нема да се ажурираат доколку не ги отворите.\n\nШтедачот на батеријата автоматски се исклучува кога уредот се полни."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Блокирано: никогаш не покажувај ги овие известувања"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Ниско: покажувај ги тивко на дното на списокот со известувања"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Нормално: покажувај ги овие известувања тивко"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Високо: покажувај ги на врв на списокот со известувања и дај звук"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Итно: нека се појават на екранот и дај им звук"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">За %1$d минута (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">За %1$d минути (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index a83928e..3a3ec41 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"വോയ്സ് സഹായം"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ഇപ്പോൾ ലോക്കുചെയ്യുക"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"സുരക്ഷിത മോഡ്"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android സിസ്റ്റം"</string>
<string name="user_owner_label" msgid="2804351898001038951">"വ്യക്തിഗതം"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ അപ്ഡേറ്റുചെയ്തു"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ ഇല്ലാതാക്കി"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ബാറ്ററി ആയുസ്സ് മെച്ചപ്പെടുത്താൻ സഹായിക്കുന്നതിന്, ബാറ്ററി സേവർ നിങ്ങളുടെ ഉപകരണത്തിന്റെ പ്രകടനത്തെ കുറയ്ക്കുകയും വൈബ്രേഷനെയും മിക്ക പശ്ചാത്തല വിവരത്തെയും പരിമിതപ്പെടുത്തുകയും ചെയ്യുന്നു. ഇമെയിൽ, സന്ദേശമയയ്ക്കൽ, സമന്വയിപ്പിക്കലിനെ ആശ്രയിച്ചുള്ള മറ്റ് അപ്ലിക്കേഷനുകൾ എന്നിവ നിങ്ങൾ തുറക്കുന്നതുവരെ അപ്ഡേറ്റുചെയ്യാനിടയില്ല.\n\nനിങ്ങളുടെ ഉപകരണം ചാർജ്ജുചെയ്യുമ്പോൾ ബാറ്ററി സേവർ സ്വയം ഓഫാകും."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ബ്ലോക്കുചെയ്തു: ഈ അറിയിപ്പുകൾ ഒരിക്കലും കാണിക്കരുത്"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"താഴ്ന്നത്: അറിയിപ്പ് ലിസ്റ്റിന്റെ താഴെ ശബ്ദമുണ്ടാക്കാതെ കാണിക്കുക"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"സാധാരണം: ഈ അറിയിപ്പുകൾ നിശബ്ദമായി കാണിക്കുക"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ഉയർന്നത്: അറിയിപ്പ് ലിസ്റ്റിന്റെ ഏറ്റവും മുകളിൽ കാണിക്കുക, ശബ്ദമുണ്ടാക്കുക"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"അടിയന്തരം: സ്ക്രീനിൽ ദൃശ്യമാക്കുക, ശബ്ദമുണ്ടാക്കുക"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d മിനിറ്റ് സമയത്തേക്ക് (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> വരെ)</item>
<item quantity="one">ഒരു മിനിറ്റ് സമയത്തേക്ക് (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> വരെ)</item>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index a9fb8593..ab2285b 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Дуут туслах"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Одоо түгжих"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Аюулгүй горим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Андройд систем"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Хувийн"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Танай админ шинэчилсэн"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Таны админ устгасан байна"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Батарей хадгалах функц нь таны төхөөрөмжийн цэнэгийг хадгалахын тулд гүйцэтгэлийг багасгаж, чичрэлтийг бууруулж, байршлын үйлчилгээнүүд болон бусад өгөгдлийн хэмжээг багасгадаг юм. И-мэйл, мессеж болон бусад синхрон хийдэг апликейшнүүд дараа дахин нээгдэх хүртлээ автоматаар шинэчлэлт хийхгүй.\n\nМөн батарей хадгалах функц нь таныг төхөөрөмжөө цэнэглэх үед автоматаар унтрах юм."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Блоклосон: Эдгээр мэдэгдлийг хэзээ ч харуулахгүй"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Бага: Мэдэгдлийг жагсаалтын доод хэсэгт дуугүй харуулах"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Ердийн: Эдгээр мэдэгдлийг дуугүй харуулах"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Өндөр: мэдэгдлийг жагсаалтын эхэнд дуутай харуулах"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Яаралтай: Дэлгэцэнд яаралтай, дуутай гаргах"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other"> %1$d минутын турш ( <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> хүртэл)</item>
<item quantity="one">нэг минутын турш (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> хүртэл)</item>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index a8896c3..92f114a 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"व्हॉइस सहाय्य"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"आता लॉक करा"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android सिस्टम"</string>
<string name="user_owner_label" msgid="2804351898001038951">"वैयक्तिक"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"आपल्या प्रशासकाद्वारे अद्यतनित केले"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"आपल्या प्रशासकाद्वारे हटविले आहे"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"बॅटरीचे आयुष्य सुधारित करण्यात मदत करण्यासाठी, बॅटरी बचतकर्ता आपल्या डिव्हाइसचे कार्यप्रदर्शन कमी करतो आणि कंपन, स्थान सेवा आणि बराच पार्श्वभूमी डेटा मर्यादित करतो. संकालनावर अवलंबून असणारे ईमेल, संदेशन आणि इतर अॅप्स आपण उघडल्याशिवाय अद्यतनित होऊ शकत नाहीत.\n\nआपले डिव्हाइस चार्ज होत असते तेव्हा बॅटरी बचतकर्ता स्वयंचलितपणे बंद होतो."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"अवरोधित केले: या सूचना कधीही दर्शवू नका"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"कमी: शांतपणे सूचना सूचीच्या तळाशी दर्शवा"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"सामान्य: या सूचना शांतपणे दर्शवा"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"सर्वोच्च: सूचना सूचीच्या शीर्षस्थानी दर्शवा आणि ध्वनी चालू करा"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"त्वरित: स्क्रीनवर डोकावून पहा आणि ध्वनी चालू करा"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d मिनिटासाठी (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> पर्यंत)</item>
<item quantity="other">%1$d मिनिटांसाठी (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> पर्यंत)</item>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index cababdd..ab683fcb 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Bantuan Suara"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Kunci sekarang"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mod selamat"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Peribadi"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Dikemas kini oleh pentadbir anda"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Dipadamkan oleh pentadbir anda"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Untuk membantu memperbaik hayat bateri, penjimat bateri mengurangkan prestasi peranti anda dan mengehadkan getaran, perkhidmatan lokasi dan kebanyakan data latar belakang. E-mel, pemesejan dan apl lain yang bergantung kepada penyegerakan mungkin tidak mengemas kini, melainkan anda membuka apl itu.\n\nPenjimat bateri dimatikan secara automatik semasa peranti anda sedang dicas."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Disekat: Jangan sekali-kali tunjukkan pemberitahuan ini"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Rendah: Tunjukkan pada bahagian bawah senarai pemberitahuan secara senyap"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Biasa: Tunjukkan pemberitahuan ini secara senyap"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Tinggi: Tunjukkan pada bahagian atas senarai pemberitahuan dan bunyikan"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Segera: Intai pada skrin dan bunyikan"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Selama %1$d minit (sehingga <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Selama satu minit (sehingga <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 8e61f41..8709c7c 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"အသံ အကူအညီ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ယခု သော့ပိတ်ရန်"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"၉၉၉+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"အန္တရာယ်ကင်းမှု စနစ်(Safe mode)"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android စနစ်"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ကိုယ်ရေး"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"သင့်စီမံခန့်ခွဲသူမှ အဆင့်မြှင့်ထားပါသည်။"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"သင့် အက်ဒမင်အား ဖျက်ပစ်ရန်"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ဘက်ထရီသက်တမ်း ကြာရှည်ခံရန်၊ ဘက်ထရီအားထိန်းသည် သင့်ကိရိယာ၏ ဆောင်ရွက်ချက်ကို လျှော့ပေးပြီး တုန်ခါမှု၊ တည်နေရာဝန်ဆောင်မှုများနှင့်၊ နောက်ခံဒေတာအများစုကို ကန့်သတ်ပေး၏။ စင့်လုပ်ပေးရလေ့ရှိသည့် အီးမေး၊ စာပို့ခြင်းနှင့်၊ အခြားအပလီကေးရှင်းများကို ၎င်းတို့အား သင် ဖွင့်မှသာ အဆင့်မြှင့်မွမ်းမံမည်ဖြစ်၏။ \n\n ကိရိယာအား အားသွင်းနေစဉ် ဘက်ထရီအားထိန်းအား အလိုအလျောက် ပိတ်ထားသည်။"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ပိတ်ဆို့ထား- ဤသတိပေးချက်များကို ဘယ်တော့မှ မပြပါနှင့်"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"နိမ့်- တိတ်ဆိတ်စွာ သတိပေးချက်များ၏ စာရင်း အောက်ပိုင်းမှာ ပြပါ"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"\'ပုံမှန်- ဤသတိပေးချက်များကို တိတ်ဆိတ်စွာ ပြပါ"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"မြင့်မား- သတိပေးချက်များ၏ စာရင်းထိပ်မှာ ပြလျက် အသံမြည်ပေးပါ"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"အရေးကြီး- : မျက်နှာပြင်မှာ ပြပေးလျက် အသံမြည်ပေးပါ"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d မိနစ်တွင် (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>အထိ)</item>
<item quantity="one">တစ်မိနစ်တွင် (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> အထိ)</item>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index f29a903..c966e38 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Talehjelp"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Lås nå"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Sikkermodus"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-system"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personlig"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Oppdatert av administratoren"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Slettet av administratoren"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"For å forlenge batterilevetiden reduserer batterispareren ytelsen til enheten din og begrenser vibrering, posisjonstjenester og mesteparten av bakgrunnsdataene. E-post, sending av meldinger og andre apper som er avhengig av synkronisering, oppdateres kanskje ikke med mindre du åpner dem.\n\nBatterisparing slås av automatisk når enheten lader."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokkert: Aldri vis disse varslene"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Lavt: Vis nederst i varsellisten uten lyd"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normalt: Vis disse varslene uten lyd"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Høyt: Vis øverst i varsellisten med lyd"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Haster: Vises fort på skjermen med lyd"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">I %1$d minutter (til <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">I 1 minutt (til <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index a33289f..931c880 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"आवाज सहायता"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"अब बन्द गर्नुहोस्"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"९९९+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
<string name="android_system_label" msgid="6577375335728551336">"एन्ड्रोइड प्रणाली"</string>
<string name="user_owner_label" msgid="2804351898001038951">"व्यक्तिगत"</string>
@@ -1447,6 +1446,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"तपाईँको प्रशासकद्वारा अद्यावधिक गरिएको"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"तपाईँको प्रशासकद्वारा हटाइएको"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ब्याट्रीको आयु सुधार्न, ब्याट्री संरक्षकले तपाईँको यन्त्रको कार्यसम्पादन घटाउँछ र भाइब्रेसन, स्थान सेवा र बहुसंख्यक पृष्ठभूमि डेटा सीमित गर्दछ। इमेल, सन्देश, र अन्य अनुप्रयोगहरू जुन सिङ्कमा भर पर्छन् अद्यावधिक नहुन सक्छन् जबसम्म तपाईँ तिनीहरूलाई खोल्नुहुन्न\n\n ब्याट्री संरक्षक स्वत: निस्कृय हुन्छ जब तपाईँको यन्त्र चार्ज हुँदै हुन्छ।"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"रोकिएको: यी सूचनाहरू कहिल्यै नदेखाउनुहोस्"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"कम: चुपचाप सूचना सूचीको फेदमा देखाउनुहोस्"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"सामान्य: चुपचाप यी सूचनाहरू देखाउनुहोस्"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"उच्च: सूचना सूचीको शीर्षमा देखाउनुहोस् र आवाज निकाल्नुहोस्"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"जरुरी: स्क्रिनमा झलक्क हेर्नुहोस् र आवाज निकाल्नुहोस्"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other"> %1$d मिनेटको लागि (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> सम्म)</item>
<item quantity="one">एक मिनेटको लागि (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> सम्म)</item>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 53b45b0..ee4f63a 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Geüpdatet door je beheerder"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Verwijderd door je beheerder"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Accubesparing beperkt de prestaties van je apparaat, de trilstand, locatieservices en de meeste achtergrondgegevens om de gebruiksduur van de accu te verlengen.\n\nAccubesparing wordt automatisch uitgeschakeld terwijl je apparaat wordt opgeladen."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Geblokkeerd: deze meldingen nooit weergeven"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Laag: zonder geluid onder aan de lijst met meldingen weergeven"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normaal: deze meldingen zonder geluid weergeven"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Hoog: boven aan de lijst met meldingen weergeven en geluid laten horen"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgent: op het scherm weergeven en geluid laten horen"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d minuten (tot <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Eén minuut (tot <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index d450bf9..ddc7b73 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ਵੌਇਸ ਅਸਿਸਟ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ਹੁਣ ਲੌਕ ਕਰੋ"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"ਸੁਰੱਖਿਅਤ ਮੋਡ"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android System"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ਨਿੱਜੀ"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਦੁਆਰਾ ਅਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"ਤੁਹਾਡੇ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"ਬੈਟਰੀ ਸਮਰੱਥਾ ਨੂੰ ਬਿਹਤਰ ਸਹਾਇਤਾ ਕਰਨ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦਾ ਪ੍ਰਦਰਸ਼ਨ ਘਟਾਉਂਦਾ ਹੈ ਅਤੇ ਵਾਈਬ੍ਰੇਸ਼ਨ, ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾਵਾਂ ਅਤੇ ਜ਼ਿਆਦਾਤਰ ਪਿਛੋਕੜ ਡਾਟਾ ਨੂੰ ਸੀਮਿਤ ਕਰਦਾ ਹੈ। ਈਮੇਲ, ਮੈਸੇਜਿੰਗ ਅਤੇ ਹੋਰ ਐਪਸ, ਜੋ ਸਿੰਕਿੰਗ ਤੇ ਨਿਰਭਰ ਹਨ, ਉਹ ਉਦੋਂ ਤੱਕ ਅਪਡੇਟ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਖੋਲ੍ਹਦੇ ਨਹੀਂ।\n\nਬੈਟਰੀ ਸੇਵਰ ਆਟੋਮੈਟਿਕਲੀ ਬੰਦ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਚਾਰਜ ਹੋ ਰਹੀ ਹੁੰਦੀ ਹੈ।"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"ਬਲੌਕ ਕੀਤਾ: ਇਹ ਸੂਚਨਾਵਾਂ ਕਦੇ ਨਾ ਵਿਖਾਓ"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"ਘੱਟ: ਚੁੱਪਚਾਪ ਢੰਗ ਨਾਲ ਸੂਚਨਾ ਸੂਚੀ ਦੇ ਹੇਠਾਂ ਵਿਖਾਓ"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ਸਧਾਰਨ: ਇਹ ਸੂਚਨਾਵਾਂ ਚੁੱਪਚਾਪ ਢੰਗ ਨਾਲ ਵਿਖਾਓ"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"ਵੱਧ: ਸੂਚਨਾਵਾਂ ਸੂਚੀ ਦੇ ਸਿਖਰ \'ਤੇ ਵਿਖਾਓ ਅਤੇ ਆਵਾਜ਼ ਕਰੋ"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ਜ਼ਰੂਰੀ: ਸਕਰੀਨ \'ਤੇ ਝਾਤੀ ਮਾਰੋ ਅਤੇ ਆਵਾਜ਼ ਕਰੋ"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d ਮਿੰਟਾਂ ਤੱਕ (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ਤੱਕ) </item>
<item quantity="other">%1$d ਮਿੰਟਾਂ ਤੱਕ (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> ਤੱਕ)</item>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index b7f984d..7430d54 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Asystent głosowy"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Zablokuj teraz"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Tryb awaryjny"</string>
<string name="android_system_label" msgid="6577375335728551336">"System Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Osobiste"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Zaktualizowane przez administratora"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Usunięty przez administratora"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Aby wydłużyć czas pracy baterii, Oszczędzanie baterii ogranicza aktywność urządzenia, w tym wibracje, usługi lokalizacyjne i przetwarzanie większości danych w tle. Poczta, czat i inne synchronizowane aplikacje mogą nie aktualizować swojej zawartości, dopóki ich nie otworzysz.\n\nOszczędzanie baterii wyłącza się automatycznie podczas ładowania urządzenia."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Zablokowana: nigdy nie pokazuj tych powiadomień"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Niska: pokazuj na dole listy powiadomień bez sygnału dźwiękowego"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normalna: pokazuj te powiadomienia bez sygnału dźwiękowego"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Wysoka: pokazuj na początku listy powiadomień i odtwarzaj dźwięk"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Pilna: wyświetlaj na ekranie i odtwarzaj dźwięk"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="few">Przez %1$d minuty (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="many">Przez %1$d minut (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index 4464259..f787499 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ajuda de voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo de segurança"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Pessoal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Atualizado pelo administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Excluído pelo seu administrador"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para ajudar a melhorar a duração da bateria, o economizador de bateria reduz o desempenho e os limites de vibração do dispositivo, os serviços de localização e a maioria dos dados de segundo plano. E-mail, mensagens e outros aplicativos que dependem de sincronização não podem ser atualizados, a não ser que você os abra.\n\nO economizador de bateria é desligado automaticamente quando o dispositivo está sendo carregado."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueada: nunca mostrar essas notificações"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baixa: mostrar na parte inferior da lista de notificações de forma silenciosa"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar essas notificações de forma silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostrar na parte superior da lista de notificações e emitir som"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: mostrar parcialmente na tela e emitir som"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index af38435..826771e 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Assist. de voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Pessoal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Atualizado pelo administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Eliminado pelo administrador"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para ajudar a melhorar a autonomia da bateria, a poupança de bateria reduz o desempenho do seu dispositivo e limita a vibração, os serviços de localização e a maioria dos dados em segundo plano. O email, as mensagens e outras aplicações que dependem da sincronização não podem ser atualizados exceto se os abrir.\n\nA poupança de bateria desliga-se automaticamente quando o dispositivo está a carregar."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueado: nunca mostrar estas notificações"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baixo: mostrar na parte inferior da lista de notificações sem som"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar estas notificações sem som"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Elevado: mostrar na parte superior da lista de notificações com som"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: mostrar no ecrã com som"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Durante %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Durante um minuto (até às <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 4464259..f787499 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ajuda de voz"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Bloquear agora"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Modo de segurança"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Pessoal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Atualizado pelo administrador"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Excluído pelo seu administrador"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Para ajudar a melhorar a duração da bateria, o economizador de bateria reduz o desempenho e os limites de vibração do dispositivo, os serviços de localização e a maioria dos dados de segundo plano. E-mail, mensagens e outros aplicativos que dependem de sincronização não podem ser atualizados, a não ser que você os abra.\n\nO economizador de bateria é desligado automaticamente quando o dispositivo está sendo carregado."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloqueada: nunca mostrar essas notificações"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Baixa: mostrar na parte inferior da lista de notificações de forma silenciosa"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: mostrar essas notificações de forma silenciosa"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Alta: mostrar na parte superior da lista de notificações e emitir som"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: mostrar parcialmente na tela e emitir som"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Por %1$d minutos (até às <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 7ac92c3..f49d6a1 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -223,8 +223,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Asistent vocal"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Blocați acum"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"˃999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mod sigur"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistemul Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personal"</string>
@@ -1450,6 +1449,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Actualizat de un administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Șters de administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Pentru a îmbunătăți autonomia bateriei, funcția de economisire a energiei reduce performanțele dispozitivului și limitează vibrațiile, serviciile de localizare și majoritatea datelor de fundal. Este posibil ca e-mailurile, mesageria și alte aplicații care depind de sincronizare să nu se actualizeze dacă nu le deschideți.\n\nFuncția de economisire a energiei se dezactivează automat când dispozitivul se încarcă."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blocate: aceste notificări nu se afișează niciodată"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Redusă: se afișează în partea de jos a listei cu notificări fără a se emite un sunet"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normală: aceste notificări se afișează fără a se emite un sunet"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Ridicată: se afișează în partea de sus a listei cu notificări și se emite un sunet"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgente: se afișează pentru o scurtă durată pe ecran și se emite un sunet"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="few">Timp de %1$d minute (până la <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Timp de %1$d de minute (până la <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index b7ba99f..cee24da 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Аудиоподсказки"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Заблокировать"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">">999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Безопасный режим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Система Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Личные данные"</string>
@@ -243,7 +242,7 @@
<string name="permgrouplab_microphone" msgid="171539900250043464">"Микрофон"</string>
<string name="permgroupdesc_microphone" msgid="4988812113943554584">"запись аудио"</string>
<string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
- <string name="permgroupdesc_camera" msgid="3250611594678347720">"фото- и видеосъемка"</string>
+ <string name="permgroupdesc_camera" msgid="3250611594678347720">"снимать фото и видео"</string>
<string name="permgrouplab_phone" msgid="5229115638567440675">"Телефон"</string>
<string name="permgroupdesc_phone" msgid="6234224354060641055">"осуществление телефонных звонков и управление ими"</string>
<string name="permgrouplab_sensors" msgid="416037179223226722">"Нательные датчики"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Обновлено администратором"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Удалено администратором"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Чтобы продлить время работы устройства от батареи, в режиме энергосбережения снижается производительность, а также ограничивается использование вибрации, геолокации и фоновой передачи данных. Данные, требующие синхронизации, могут обновляться только когда вы откроете приложение.\n\nРежим энергосбережения автоматически отключается во время зарядки устройства."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Заблокировано: не показывать эти уведомления"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Низкая: показывать без звука в конце списка уведомлений"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Обычная: показывать уведомления без звука"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Высокая: показывать со звуком в начале списка уведомлений"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Срочно: показывать со звуковым сигналом поверх всех окон"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d минута (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="few">%1$d минуты (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 4e265177..c8a45eb1 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"හඬ සහායක"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"දැන් අගුළු දමන්න"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"ආරක්ෂිත ආකාරය"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android පද්ධතිය"</string>
<string name="user_owner_label" msgid="2804351898001038951">"පෞද්ගලික"</string>
@@ -1443,6 +1442,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"ඔබගේ පරිපාලක විසින් යාවත්කාලීන කරන ලදී"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"ඔබගේ පරිපාලක විසින් මකන ලද"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"බැටරි ආයු කාලය වැඩිදියුණු කිරීමට උදවු කිරීමට, බැටරි සුරැකුම ඔබේ උපාංගයේ ක්රියාකාරීත්වය අඩුකරන අතර කම්පනය, පිහිටීම් සේවා, සහ බොහෝමයක් පසුබිම් දත්ත සීමා කරයි. ඔබ ඒවා විවෘත නොකරන්නේ නම් මිස ඊමේල්, පණිවිඩකරණය, සහ සමමුහුර්ත කිරීම මත රඳා පවතින වෙනත් යෙදුම් යාවත්කාලීන නොවිය හැකිය.\n\nඔබේ උපාංගය ආරෝපණය වන විට බැටරි සුරැකුම ස්වයංක්රියව අක්රිය වේ."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"අවහිර කළ: මෙම දැනුම්දීම් කිසිදා නොපෙන්වන්න"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"අඩු: දැනුම්දීම් ලැයිස්තුවෙහි පහළින්ම නිශ්ශබ්දව පෙන්වන්න"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"සාමාන්ය: නිශ්ශබ්දව මෙම දැනුම්දීම් පෙන්වන්න"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"වැඩි: දැනුම්දීම් ලැයිස්තුවෙහි ඉහළින්ම පෙන්වන්න සහ ශබ්ද කරන්න"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"හදිසි: තිරයට පැමිණ ශබ්ද කරන්න"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">මිනිත්තු %1$d ක් සඳහා (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> තෙක්)</item>
<item quantity="other">මිනිත්තු %1$d ක් සඳහා (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> තෙක්)</item>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index ba5465e..242a844 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Hlasový asistent"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Uzamknúť"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Núdzový režim"</string>
<string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Osobné"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Aktualizované správcom"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Odstránený správcom"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"S cieľom predĺžiť výdrž batérie zníži šetrič batérie výkonnosť zariadenia a obmedzí vibrácie, služby určovania polohy a dátové prenosy na pozadí. Pošta, čet a ďalšie aplikácie, ktoré sa spoliehajú na synchronizáciu, sa možno nebudú aktualizovať, dokiaľ ich neotvoríte.\n\nPri nabíjaní zariadenia sa šetrič batérie automaticky vypne."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokované: Tieto upozornenia nikdy nezobrazovať"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Nízke: Zobrazovať v dolnej časti zoznamu upozornení bez zvukového signálu"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normálne: Tieto upozornenia zobrazovať bez zvukového signálu"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Vysoké: Zobrazovať v hornej časti zoznamu upozornení so zvukovým signálom"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Neodkladné: Zobraziť cez obrazovku so zvukovým signálom"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="few">%1$d minúty (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="many">%1$d minúty (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 04b7fc7..3f6769c 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Glas. pomočnik"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Zakleni zdaj"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Varni način"</string>
<string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Osebno"</string>
@@ -1459,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Posodobil skrbnik"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Izbrisal skrbnik"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Varčevanje z energijo akumulatorja podaljša čas njegovega delovanja tako, da zmanjša zmogljivost delovanja naprave in omeji vibriranje, lokacijske storitve ter prenos večine podatkov v ozadju. Aplikacije za e-pošto, sporočanje in drugo, ki uporabljajo sinhroniziranje, se morda ne posodabljajo, razen če jih odprete.\n\nVarčevanje z energijo akumulatorja se samodejno izklopi med polnjenjem akumulatorja naprave."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blokirano: nikoli ne prikaži teh obvestil"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Manj pomembno: prikaži na dnu seznama obvestil brez zvoka"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Običajno: prikaži ta obvestila brez zvoka"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Pomembno: prikaži na vrhu seznama obvestil in predvajaj zvok"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Nujno: za hip pokaži predogled na zaslonu in predvajaj zvok"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%d minuto (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="two">%d minuti (do <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index b8ca565..2653c71 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Përditësuar nga administratori"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"U fshi nga administratori yt"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Për të përmirësuar jetëgjatësinë e baterisë, opsioni i kursimit të baterisë ul rendimentin e pajisjes tënde si dhe kufizon dridhjet dhe shumicën e të dhënave në sfond. Mail-i, mesazhet dhe aplikacionet e tjera që sinkronizohen automatikisht mund të mos përditësohen pa i hapur.\n\nKursimi i baterisë çaktivizohet automatikisht kur pajisja vihet në ngarkim."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Të bllokuara: Mos i shfaq asnjëherë këto njoftime"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Të ulëta: Shfaqi në heshtje në fund të listës së njoftimeve"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normale: Shfaqi këto njoftime në heshtje"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Të larta: Shfaqi në krye të listës së njoftimeve dhe lësho tingull"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Urgjente: Shfaq një vështrim të shpejtë në ekran dhe lësho tingull"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Për %1$d minuta (deri në <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Për një minutë (deri në <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 4118c63..069d717 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -223,8 +223,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Гласовна помоћ"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Закључај одмах"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Безбедни режим"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android систем"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Лично"</string>
@@ -1450,6 +1449,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ажурирао је администратор"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Избрисао је ваш адмиистратор"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Да би продужила време трајања батерије, уштеда батерије смањује перформансе уређаја и ограничава вибрацију, услуге локације и већину позадинских података. Имејл, размена порука и друге апликације које се ослањају на синхронизацију можда неће да се ажурирају ако их не отворите.\n\nУштеда батерије се аутоматски искључује када се уређај пуни."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Блокирана: Ова обавештења се никада не приказују"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Ниска: Приказују се у дну листе обавештења без звука"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Уобичајена: Ова обавештења се приказују без звука"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Висока: Приказују се у врху листе обавештења и активира се звучни сигнал"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Хитна: Накратко се приказују на екрану и активира се звучни сигнал"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d минут (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="few">%1$d минута (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index 40141de..748257a 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Lås nu"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Säkert läge"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android-system"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personligt"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Uppdaterat av administratören"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Paketet har raderats av administratören"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"I batterisparläget reduceras enhetens prestanda så att batteriet ska räcka längre och vibration, platstjänster samt den mesta användningen av bakgrundsdata begränsas. Det kan hända att appar för e-post, sms och annat som kräver synkronisering inte uppdateras förrän du öppnar dem.\n\nBatterisparläget inaktiveras automatiskt när enheten laddas."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Blockerad: Visa aldrig dessa aviseringar"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Låg: Visa längst ned i aviseringslistan – utan ljud"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Visa aviseringarna – utan ljud"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Hög: Visa högst upp i aviseringslistan – med ljud"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Brådskande: Visa på skärmen – med ljud"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">I %1$d minuter (till kl. <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">I en minut (till kl. <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 196d5dc..cdb86ae 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -224,8 +224,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Usaidizi wa Sauti"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Funga sasa"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Mtindo salama"</string>
<string name="android_system_label" msgid="6577375335728551336">"Mfumo wa Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Binafsi"</string>
@@ -1443,6 +1442,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Kimesasiswa na msimamizi wako"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Kilifutwa na msimamizi wako"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Kusaidia kuboresha muda wa matumizi ya betri, inayookoa betri hupunguza utendaji wa kifaa chako na kupunguza mtetemo, huduma za utambuzi wa mahali, na data nyingi ya chini chini. Barua pepe, ujumbe na programu nyingine zinazotege,ea usawazishaji huenda zisisasishwe usipozifungua.\n\nInayookoa betri hujizima kiotomatiki kifaa chako kinapokuwa kinachaji."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Imezuiwa: Usionyeshe arifa hizi kamwe"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Chini: Onyesha katika sehemu ya chini ya orodha ya arifa bila kutoa sauti"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Kawaida: Onyesha arifa hizi bila sauti"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Juu: Onyesha katika sehemu ya juu ya orodha ya arifa na itoe sauti"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Muhimu: Weka onyesho la kuchungulia kwenye skrini na itoe sauti"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Kwa dakika %1$d (hadi <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Kwa dakika moja (hadi <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index 1113776..245f1ca 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"குரல் உதவி"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"இப்போது பூட்டு"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"பாதுகாப்பு பயன்முறை"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android அமைப்பு"</string>
<string name="user_owner_label" msgid="2804351898001038951">"தனிப்பட்ட"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"உங்கள் நிர்வாகி புதுப்பித்துள்ளார்"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"நிர்வாகி நீக்கிவிட்டார்"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"பேட்டரி ஆயுளை மேம்படுத்த, பேட்டரி சேமிப்பான் உங்கள் சாதனத்தின் செயல்திறனைக் குறைத்து, அதிர்வு, இடச் சேவைகள் மற்றும் பெரும்பாலான பின்புலத் தரவு போன்றவற்றைக் கட்டுப்படுத்துகிறது. ஒத்திசைவைச் சார்ந்துள்ள மின்னஞ்சல், செய்தியிடல் மற்றும் பிற பயன்பாடுகள் திறக்கும்வரை, அவை புதுப்பிக்கப்படாமல் இருக்கலாம்.\n\nஉங்கள் ஃபோன் சார்ஜ் செய்யப்படும்போது, பேட்டரி சேமிப்பான் தானாகவே முடங்கும்."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"தடுக்கப்பட்டது: இந்த அறிவிப்புகளை ஒருபோதும் காட்டாது"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"குறைவு: ஒலியின்றி அறிவிப்புப் பட்டியலின் கீழே காட்டும்"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"இயல்பு: ஒலியின்றி இந்த அறிவிப்புகளைக் காட்டும்"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"அதிகம்: அறிவிப்புகள் பட்டியலின் மேல் பகுதியில் ஒலியுடன் காட்டும்"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"அவசரம்: ஒலியுடன் திரையில் தோன்றும்"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d நிமிடங்களுக்கு (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> வரை)</item>
<item quantity="one">ஒரு நிமிடத்திற்கு (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> வரை)</item>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index c563e7c..1b63c2f 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"వాయిస్ సహాయకం"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ఇప్పుడు లాక్ చేయండి"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"సురక్షిత మోడ్"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android సిస్టమ్"</string>
<string name="user_owner_label" msgid="2804351898001038951">"వ్యక్తిగతం"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"మీ నిర్వాహకుడు నవీకరించారు"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"మీ నిర్వాహకులు తొలగించారు"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"బ్యాటరీ జీవితకాలాన్ని మెరుగుపరచడంలో సహాయపడటానికి, బ్యాటరీ సేవర్ మీ పరికరం పనితీరును తగ్గిస్తుంది మరియు వైబ్రేషన్ను, స్థాన సేవలను మరియు ఎక్కువ నేపథ్య డేటాను పరిమితం చేస్తుంది. ఇమెయిల్, మెసేజింగ్ మరియు సమకాలీకరణపై ఆధారపడే ఇతర అనువర్తనాలు మీరు వాటిని తెరిస్తే మినహా నవీకరించబడవు.\n\nమీ పరికరం ఛార్జ్ అవుతున్నప్పుడు బ్యాటరీ సేవర్ స్వయంచాలకంగా ఆఫ్ అవుతుంది."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"బ్లాక్ చేయబడింది: ఈ నోటిఫికేషన్లను ఎప్పుడూ చూపదు"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"తక్కువ: నోటిఫికేషన్ల జాబితా దిగువ భాగంలో శబ్దం లేకుండా చూపుతుంది"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"సాధారణం: ఈ నోటిఫికేషన్లను శబ్దం లేకుండా చూపుతుంది"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"అధికం: నోటిఫికేషన్ల జాబితా ఎగువ భాగంలో శబ్దంతో చూపుతుంది"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"అత్యవసరం: స్క్రీన్పై శీఘ్రంగా శబ్దంతో చూపుతుంది"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d నిమిషాల పాటు (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> వరకు)</item>
<item quantity="one">ఒక నిమిషం పాటు (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> వరకు)</item>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 0080f51..57b9598 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"ตัวช่วยเสียง"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ล็อกเลย"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"โหมดปลอดภัย"</string>
<string name="android_system_label" msgid="6577375335728551336">"ระบบ Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ส่วนตัว"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"อัปเดตโดยผู้ดูแลระบบ"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"ลบโดยผู้ดูแลระบบของคุณ"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"เพื่อช่วยปรับปรุงอายุการใช้งานแบตเตอรี่ โหมดประหยัดแบตเตอรี่จะลดการทำงานของอุปกรณ์และจำกัดการสั่น บริการตำแหน่ง และข้อมูลแบ็กกราวด์ส่วนใหญ่ สำหรับอีเมล การรับส่งข้อความ และแอปอื่นๆ ที่ใช้การซิงค์จะไม่อัปเดตหากคุณไม่เปิดขึ้นมา\n\nโหมดประหยัดแบตเตอรี่จะปิดโดยอัตโนมัติขณะชาร์จอุปกรณ์"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"บล็อก: อย่าแสดงการแจ้งเตือนเหล่านี้"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"ต่ำ: แสดงที่ด้านล่างของรายการแจ้งเตือนโดยไม่ส่งเสียง"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"ปกติ: แสดงการแจ้งเตือนเหล่านี้โดยไม่ส่งเสียง"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"สูง: แสดงที่ด้านบนของรายการแจ้งเตือนและส่งเสียง"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ด่วน: แสดงบนหน้าจอในช่วงเวลาสั้นๆ และส่งเสียง"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">ระยะเวลา %1$d นาที (จนถึงเวลา <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">ระยะเวลา 1 นาที (จนถึงเวลา <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 4f907c1..8cca676 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"I-lock ngayon"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android System"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Personal"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Na-update ng iyong administrator"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Na-delete ng iyong administrator"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Upang matulungang pagbutihin ang tagal ng baterya, binabawasan ng pangtipid ng baterya ang pagganap ng iyong device at nililimitahan ang pag-vibrate, mga serbisyo ng lokasyon at karamihan sa data ng background. Maaaring hindi mag-update ang email, pagmemensahe at iba pang mga app na umaasa sa pagsi-sync maliban kung buksan mo ang mga iyon.\n\nAwtomatikong nag-o-off ang pangtipid ng baterya kapag nagcha-charge ang iyong device."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Naka-block: Huwag kailanman ipakita ang mga notification na ito"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Mababa: Tahimik na ipakita sa ibaba ng listahan ng mga notification"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Tahimik na ipakita ang mga notification na ito"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Mataas: Ipakita sa taas ng listahan ng mga notification at mag-play ng tunog"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Agaran: Ipasilip sa screen at mag-play ng tunog"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Sa loob ng %1$d minuto (hanggang <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Sa loob ng %1$d na minuto (hanggang <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 06f8c75..60eee12 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Sesli Yardım"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Şimdi kilitle"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Güvenli mod"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android Sistemi"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Kişisel"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Yöneticiniz tarafından güncellendi"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Yöneticiniz tarafından silindi"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Pil tasarrufu özelliği, pil ömrünü iyileştirmeye yardımcı olmak için cihazın performansını düşürür, titreşimi, konum hizmetlerini ve arka plan verilerinin çoğunu sınırlar. Senkronizasyona dayalı olarak çalışan e-posta, mesajlaşma uygulamaları ve diğer uygulamalar, bunları açmadığınız sürece güncellenmeyebilir.\n\nCihazınız şarj olurken pil tasarrufu otomatik olarak kapatılır."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Engellendi: Bu bildirimleri hiçbir zaman gösterme"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Düşük: Bildirim listesinin altında sessizce göster"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Normal: Bu bildirimleri sessizce göster"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Yüksek: Bildirim listesinin üstünde göster ve ses çıkar"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Acil: Ekrana getir ve ses çıkar"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d dakika için (şu saate kadar: <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Bir dakika için (şu saate kadar: <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 721f24d..adf6234 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1458,6 +1458,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Оновлено адміністратором"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Видалив адміністратор"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Щоб подовжити час роботи акумулятора, функція заощадження заряду акумулятора знижує продуктивність пристрою, а також обмежує вібрацію, функції служб локації та передавання більшості фонових даних. Електронна пошта, чати й інші додатки, які синхронізуються, можуть не оновлюватися, доки ви їх не відкриєте.\n\nФункція заощадження заряду акумулятора автоматично вимикається під час заряджання пристрою."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Заблоковано: не показувати ці сповіщення"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Низький пріоритет: показувати ці сповіщення внизу списку без звукового сигналу"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Стандартний пріоритет: показувати ці сповіщення без звукового сигналу"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Високий пріоритет: показувати ці сповіщення вгорі списку зі звуковим сигналом"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Терміново: показувати ці сповіщення на екрані зі звуковим сигналом"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">%1$d хвилину (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="few">%1$d хвилини (до <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index e31fa57..54af31e 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Voice Assist"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"ابھی مقفل کریں"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"حفاظتی وضع"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android سسٹم"</string>
<string name="user_owner_label" msgid="2804351898001038951">"ذاتی"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"آپ کے منتظم نے اپ ڈيٹ کر دیا"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"آپ کے منتظم کی جانب سے حذف کر دیا گیا"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"بیٹری کی میعاد بہتر کرنے میں مدد کرنے کیلئے، بیٹری سیور آپ کے آلہ کی کارکردگی کم کر دیتی ہے اور وائبریشن، مقام کی سروسز اور پس منظر کا بیشتر ڈیٹا محدود کر دیتی ہے۔ ای میل، پیغام رسانی اور مطابقت پذیری پر منحصر دیگر ایپس ممکن ہے اس وقت تک اپ ڈیٹ نہ ہوں جب تک آپ انہیں نہ کھولیں۔\n\nآپ کا آلہ چارج ہوتے وقت بیٹری سیور خود بخود آف ہو جاتی ہے۔"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"مسدود کردہ: یہ اطلاعات کبھی مت دکھائیں"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"پست: اطلاعات کی فہرست کے نیچے خاموشی سے دکھائیں"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"عام: خاموشی سے یہ اطلاعات دکھائیں"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"اعلی: اطلاعات کی فہرست پر سب سے اوپر دکھائیں اور آواز چلائیں"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"ارجنٹ: اسکرین پر دکھائیں اور آواز چلائیں"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d منٹ کیلئے (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> تک)</item>
<item quantity="one">ایک منٹ کیلئے (تک <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index 0489638..c4701b6 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Ovozli yordam"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Qulflash"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Xavfsiz usul"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android tizimi"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Shaxsiy"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Administratoringiz tomonidan yangilandi"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Administratoringiz tomonidan o‘chirilgan"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Batareya quvvatini uzoqroq vaqtga yetkazish uchun quvvat tejash funksiyasi qurilmangiz unumdorligini kamaytiradi hamda uning tebranishi va orqa fonda internetdan foydalanishini cheklaydi. Sinxronlanishni talab qiladigan e-pochta, xabar almashinuv va boshqa ilovalar esa qachonki ularni ishga tushirganingizda yangilanadi.\n\nQurilma quvvat olayotganda quvvat tejash funksiyasi avtomatik tarzda o‘chadi."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Bloklangan: bildirishnomalar hech qachon ko‘rsatilmasin"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Past: bildirishnomalar ro‘yxatining pastida ovozsiz ko‘rsatilsin"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Oddiy: bildirishnomalar ovozsiz ko‘rsatilsin"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Yuqori: bildirishnomalar ro‘yxatining yuqorisida ovoz bilan ko‘rsatilsin"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Shoshilinch: barcha oynalar ustida signal ovozi bilan ko‘rsatilsin"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d daqiqa (<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g> gacha)</item>
<item quantity="one">Bir daqiqa (<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g> gacha)</item>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index ccd1345..336f10a 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"Trợ lý thoại"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"Khóa ngay"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"Chế độ an toàn"</string>
<string name="android_system_label" msgid="6577375335728551336">"Hệ thống Android"</string>
<string name="user_owner_label" msgid="2804351898001038951">"Cá nhân"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Được cập nhật bởi quản trị viên của bạn"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Đã bị xóa bởi quản trị viên của bạn"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Để giúp tăng tuổi thọ pin, trình tiết kiệm pin sẽ giảm hiệu suất thiết bị của bạn và hạn chế rung, dịch vụ vị trí và hầu hết dữ liệu nền. Email, nhắn tin và các ứng dụng khác dựa trên đồng bộ hóa có thể không cập nhật nếu bạn không mở chúng.\n\nTrình tiết kiệm pin tự động tắt khi thiết bị của bạn đang sạc."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Đã chặn: Không bao giờ hiển thị các thông báo này"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Thấp: Hiển thị im lặng ở cuối danh sách thông báo"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Bình thường: Hiển thị im lặng các thông báo này"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Cao: Hiển thị ở đầu danh sách thông báo và phát ra âm thanh"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Khẩn cấp: Hiển thị trên màn hình và phát ra âm thanh"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">Trong %1$d phút (cho đến <xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">Trong một phút (cho đến <xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-w480dp/bools.xml b/core/res/res/values-w480dp/bools.xml
index 3a463a6..c7df562 100644
--- a/core/res/res/values-w480dp/bools.xml
+++ b/core/res/res/values-w480dp/bools.xml
@@ -17,6 +17,5 @@
*/
-->
<resources>
- <bool name="action_bar_embed_tabs_pre_jb">true</bool>
<bool name="split_action_bar_is_narrow">false</bool>
</resources>
diff --git a/core/res/res/values-w480dp/config.xml b/core/res/res/values-w480dp/config.xml
deleted file mode 100644
index 269a9b4..0000000
--- a/core/res/res/values-w480dp/config.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2011, The Android Open 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>
- <bool name="config_allowActionMenuItemTextWithIcon">true</bool>
-</resources>
diff --git a/core/res/res/values-xlarge-land/dimens.xml b/core/res/res/values-xlarge-land/dimens.xml
index 0b43a42..3812178 100644
--- a/core/res/res/values-xlarge-land/dimens.xml
+++ b/core/res/res/values-xlarge-land/dimens.xml
@@ -20,6 +20,4 @@
<!-- Default height of a key in the password keyboard for alpha -->
<dimen name="password_keyboard_key_height_alpha">100dip</dimen>
<dimen name="password_keyboard_key_height_numeric">75dip</dimen>
- <!-- Minimum width of the search view text entry area. -->
- <dimen name="search_view_text_min_width">256dip</dimen>
</resources>
diff --git a/core/res/res/values-xlarge/dimens.xml b/core/res/res/values-xlarge/dimens.xml
index 29cea26..b13e74a 100644
--- a/core/res/res/values-xlarge/dimens.xml
+++ b/core/res/res/values-xlarge/dimens.xml
@@ -25,9 +25,6 @@
<!-- keyboardHeight = key_height*4 + key_bottom_gap*3 -->
<dimen name="password_keyboard_height">48.0mm</dimen>
- <!-- Minimum width of the search view text entry area. -->
- <dimen name="search_view_text_min_width">192dip</dimen>
-
<item type="dimen" name="dialog_min_width_major">45%</item>
<item type="dimen" name="dialog_min_width_minor">72%</item>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 1afede0..d54eb1e 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"语音助理"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"立即锁定"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g> 条)"</string>
<string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android 系统"</string>
<string name="user_owner_label" msgid="2804351898001038951">"个人"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"由您单位的管理员更新"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"已被管理员删除"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"为了延长电池的续航时间,节电助手会降低设备的性能,并限制振动、位置信息服务和大部分后台流量。对于电子邮件、聊天工具等依赖于同步功能的应用,可能要打开这类应用时才能收到新信息。\n\n节电助手会在设备充电时自动关闭。"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"屏蔽:一律不显示这些通知"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"低:在通知列表底部显示,不发出提示音"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"一般:显示这些通知,但不发出提示音"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"高:在通知列表顶部显示,并发出提示音"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"紧急:在屏幕上持续显示,并发出提示音"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">%1$d 分钟(到<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">1 分钟(到<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 84c85bf..a583e37 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"語音助手"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"立即鎖定"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string>
<string name="user_owner_label" msgid="2804351898001038951">"個人"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"已由您的管理員更新"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"已由管理員刪除"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"節約電池用量模式有助於延長電池壽命,但這會降低裝置效能,並限制震動、定位服務及大部分背景數據傳輸。除非您啟用,否則電郵、短訊及其他需要使用同步功能的應用程式均不會更新。\n\n當裝置充電時,節約電池用量模式會自動關閉。"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"已封鎖:永不顯示這些通知"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"低:以靜音方式顯示在通知清單底部"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"一般:以靜音方式顯示這些通知"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"高:顯示在通知清單頂部並發出音效"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"緊急:不時於螢幕出現並發出音效"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">需時 %1$d 分鐘 (完成時間:<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">需時 1 分鐘 (完成時間:<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index b45fe75..0d360493 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -222,8 +222,7 @@
<string name="global_action_voice_assist" msgid="7751191495200504480">"語音小幫手"</string>
<string name="global_action_lockdown" msgid="8751542514724332873">"立即鎖定"</string>
<string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"超過 999"</string>
- <!-- no translation found for notification_children_count_bracketed (1769425473168347839) -->
- <skip />
+ <string name="notification_children_count_bracketed" msgid="1769425473168347839">"(<xliff:g id="NOTIFICATIONCOUNT">%d</xliff:g>)"</string>
<string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
<string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string>
<string name="user_owner_label" msgid="2804351898001038951">"個人"</string>
@@ -1441,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"由您的管理員更新"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"已遭管理員刪除"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"節約耗電量模式會透過降低裝置效能、震動限制、定位服務限制和大多數背景資料運作限制等方式,延長電池續航力。此外,如果未開啟電子郵件、簡訊和其他需要使用同步功能的應用程式,系統將不會自動更新這些應用程式。\n\n當您為裝置充電時,節約耗電量模式會自動關閉。"</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"封鎖:一律不顯示這些通知"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"低:顯示在通知清單底部且不發出任何音效"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"一般:顯示這些通知且不發出任何音效"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"高:顯示在通知清單頂端並發出音效"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"緊急:持續顯示在螢幕上並發出音效"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="other">持續 %1$d 分鐘 (結束時間:<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="one">持續 1 分鐘 (結束時間:<xliff:g id="FORMATTEDTIME_0">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index c2159d7..ac88851 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1440,6 +1440,11 @@
<string name="package_updated_device_owner" msgid="8856631322440187071">"Ibuyekezwe ngumqondisi wakho"</string>
<string name="package_deleted_device_owner" msgid="7650577387493101353">"Isuswe ngumlawuli wakho"</string>
<string name="battery_saver_description" msgid="1960431123816253034">"Ukusiza ukuthuthukisa impilo yebhethri, isilondoloze sebhethri sehlisa ukusebenza kwedivayisi yakho futhi sikhawulele ukudlidliza, amasevisi wendawo, nedatha eningi yangasemuva. I-imeyili, imilayezo, nezinye izinhlelo zokusebenza ezincike ekuvumelaniseni zingahle zingabuyekezwa ngaphandle kokuthi uzivule.\n\nIsilondolozi sebhethri siyavaleka ngokuzenzakalelayo uma idivayisi yakho ishaja."</string>
+ <string name="notification_importance_blocked" msgid="7118826900767047125">"Okuvinjiwe: Ungalokothi ubonise lezi zaziso"</string>
+ <string name="notification_importance_low" msgid="6447640449918427187">"Okuphansi: Bonisa ngokuthulile ngaphansi kohlu lwesaziso"</string>
+ <string name="notification_importance_default" msgid="7991157697609575271">"Okujwayelekile: Bonisa ngokuthulile lezi zaziso"</string>
+ <string name="notification_importance_high" msgid="3152238637737215654">"Okuphezulu: Bonisa ngaphezulu kohlu lwezaziso uphinde wenze umsindo"</string>
+ <string name="notification_importance_max" msgid="1153693080467904474">"Okuphuthumayo: Bheka kusikrini uphinde wenze umsindo"</string>
<plurals name="zen_mode_duration_minutes_summary" formatted="false" msgid="4367877408072000848">
<item quantity="one">Okwamaminithi angu-%1$d (kuze kube ngo-<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
<item quantity="other">Okwamaminithi angu-%1$d (kuze kube ngo-<xliff:g id="FORMATTEDTIME_1">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index f9f8162..9bca3d6 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1026,9 +1026,6 @@
<!-- ============== -->
<eat-comment />
- <!-- Reference to the Pointer style -->
- <attr name="pointerStyle" format="reference" />
-
<!-- The drawable for accessibility focused views. -->
<attr name="accessibilityFocusedDrawable" format="reference" />
@@ -3098,6 +3095,13 @@
<!-- The extra value of the subtype. This string can be any string and will be passed to
the SpellChecker. -->
<attr name="subtypeExtraValue" format="string" />
+ <!-- The unique id for the subtype. The text service (spell checker) framework keeps track
+ of enabled subtypes by ID. When the spell checker package gets upgraded, enabled IDs
+ will stay enabled even if other attributes are different. If the ID is unspecified or
+ or explicitly specified to 0 in XML resources,
+ {@code Arrays.hashCode(new Object[] {subtypeLocale, extraValue}) will be used instead.
+ -->
+ <attr name="subtypeId" />
</declare-styleable>
<!-- Use <code>accessibility-service</code> as the root tag of the XML resource that
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 67933cd..2a11081 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -634,7 +634,7 @@
specified, it will run in the current preferred orientation
of the screen.
<p>This attribute is supported by the <a
- href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+ href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element. -->
<attr name="screenOrientation">
<!-- No preference specified: let the system decide the best
@@ -923,8 +923,8 @@
<enum name="preferExternal" value="2" />
</attr>
- <!-- Extra options for an activity's UI. Applies to either the {@code <activity>} or
- {@code <application>} tag. If specified on the {@code <application>}
+ <!-- Extra options for an activity's UI. Applies to either the {@code <activity>} or
+ {@code <application>} tag. If specified on the {@code <application>}
tag these will be considered defaults for all activities in the
application. -->
<attr name="uiOptions">
diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml
index 457131a..5c50e73 100644
--- a/core/res/res/values/bools.xml
+++ b/core/res/res/values/bools.xml
@@ -19,7 +19,6 @@
<bool name="kg_center_small_widgets_vertically">false</bool>
<bool name="kg_top_align_page_shrink_on_bouncer_visible">true</bool>
<bool name="action_bar_embed_tabs">true</bool>
- <bool name="action_bar_embed_tabs_pre_jb">false</bool>
<bool name="split_action_bar_is_narrow">true</bool>
<bool name="preferences_prefer_dual_pane">false</bool>
<bool name="show_ongoing_ime_switcher">true</bool>
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index dad68ba..af8ff2e 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -173,4 +173,7 @@
<color name="Red_800">#ffb93221</color>
<color name="chooser_service_row_background_color">#fff5f5f5</color>
+
+ <!-- Status bar color for semi transparent mode. -->
+ <color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black -->
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d9e0472..97c0e07 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -673,6 +673,10 @@
closed. The default is 0. -->
<integer name="config_lidNavigationAccessibility">0</integer>
+ <!-- Indicate whether closing the lid causes the lockscreen to appear.
+ The default is false. -->
+ <bool name="config_lidControlsScreenLock">false</bool>
+
<!-- Indicate whether closing the lid causes the device to go to sleep and opening
it causes the device to wake up.
The default is false. -->
@@ -716,6 +720,13 @@
<bool name="config_carDockEnablesAccelerometer">true</bool>
+ <!-- Control whether to launch Car dock home app when user presses home button or when
+ car dock intent is fired.
+ In mobile device, usually separate home app is expected in car mode, and this should be
+ enabled. But in environments like real car, default home app may be enough, and in that
+ case, this can be disabled (set to false). -->
+ <bool name="config_enableCarDockHomeLaunch">true</bool>
+
<!-- HDMI behavior -->
<!-- The number of degrees to rotate the display when the device has HDMI connected
@@ -733,6 +744,15 @@
Any other values will have surprising consequences. -->
<integer name="config_defaultUiModeType">1</integer>
+ <!-- Control whether to lock UI mode to what is selected from config_defaultUiModeType.
+ Once UI mode is locked, applications cannot change it anymore. -->
+ <bool name="config_lockUiMode">false</bool>
+
+ <!-- Control whether to lock day/night mode change from normal application. When it is
+ true, day / night mode change is only allowed to apps with MODIFY_DAY_NIGHT_MODE
+ permission. -->
+ <bool name="config_lockDayNightMode">false</bool>
+
<!-- Control the default night mode to use when there is no other mode override set.
One of the following values (see UiModeManager.java):
0 - MODE_NIGHT_AUTO
@@ -1521,11 +1541,6 @@
it should be disabled in that locale's resources. -->
<bool name="config_actionMenuItemAllCaps">true</bool>
- <!-- Whether action menu items should obey the "withText" showAsAction
- flag. This may be set to false for situations where space is
- extremely limited. -->
- <bool name="config_allowActionMenuItemTextWithIcon">false</bool>
-
<!-- Remote server that can provide NTP responses. -->
<string translatable="false" name="config_ntpServer">2.android.pool.ntp.org</string>
<!-- Normal polling frequency in milliseconds -->
@@ -1949,6 +1964,7 @@
<item>com.android.server.notification.TopicPriorityExtractor</item>
<item>com.android.server.notification.NotificationIntrusivenessExtractor</item>
<item>com.android.server.notification.TopicVisibilityExtractor</item>
+ <item>com.android.server.notification.TopicImportanceExtractor</item>
</string-array>
<!-- Flag indicating that this device does not rotate and will always remain in its default
@@ -2384,4 +2400,9 @@
The duplication is necessary, because this information is used before the features are
available to the system.-->
<bool name="config_freeformWindowManagement">false</bool>
+
+ <!-- If set, this will force all windows to draw the status bar background, including the apps
+ that have not requested doing so (via the WindowManager.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
+ flag). -->
+ <bool name="config_forceWindowDrawsStatusBarBackground">true</bool>
</resources>
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 7b4becc..b167711 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -162,9 +162,6 @@
<!-- The minimum height of the content if there is a picture present with big picture -->
<dimen name="notification_big_picture_content_min_height_with_picture">41dp</dimen>
- <!-- Minimum width of the search view text entry area. -->
- <dimen name="search_view_text_min_width">160dip</dimen>
-
<!-- Preferred width of the search view. -->
<dimen name="search_view_preferred_width">320dip</dimen>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index d6dd842..e5415df 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -3954,6 +3954,22 @@
<!-- [CHAR_LIMIT=NONE] Battery saver: Feature description -->
<string name="battery_saver_description">To help improve battery life, battery saver reduces your device’s performance and limits vibration, location services, and most background data. Email, messaging, and other apps that rely on syncing may not update unless you open them.\n\nBattery saver turns off automatically when your device is charging.</string>
+
+ <!-- [CHAR LIMIT=100] Notification Importance slider: blocked importance level description -->
+ <string name="notification_importance_blocked">Blocked: Never show these notifications</string>
+
+ <!-- [CHAR LIMIT=100] Notification Importance slider: low importance level description -->
+ <string name="notification_importance_low">Low: Silently show at the bottom of the notification list</string>
+
+ <!-- [CHAR LIMIT=100] Notification Importance slider: normal importance level description -->
+ <string name="notification_importance_default">Normal: Silently show these notifications</string>
+
+ <!-- [CHAR LIMIT=100] Notification Importance slider: high importance level description -->
+ <string name="notification_importance_high">High: Show at the top of the notifications list and make sound</string>
+
+ <!-- [CHAR LIMIT=100] Notification Importance slider: max importance level description -->
+ <string name="notification_importance_max">Urgent: Peek onto the screen and make sound</string>
+
<!-- Zen mode condition - summary: time duration in minutes. [CHAR LIMIT=NONE] -->
<plurals name="zen_mode_duration_minutes_summary">
<item quantity="one">For one minute (until <xliff:g id="formattedTime" example="10:00 PM">%2$s</xliff:g>)</item>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index e6f279d..9a4016b 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -1368,6 +1368,42 @@
<item name="pointerIconGrabbing">@drawable/pointer_grabbing_icon</item>
</style>
+ <style name="LargePointer">
+ <item name="pointerIconArrow">@drawable/pointer_arrow_large_icon</item>
+ <item name="pointerIconSpotHover">@drawable/pointer_spot_hover_icon</item>
+ <item name="pointerIconSpotTouch">@drawable/pointer_spot_touch_icon</item>
+ <item name="pointerIconSpotAnchor">@drawable/pointer_spot_anchor_icon</item>
+ <item name="pointerIconHand">@drawable/pointer_hand_large_icon</item>
+ <item name="pointerIconContextMenu">@drawable/pointer_context_menu_large_icon</item>
+ <item name="pointerIconHelp">@drawable/pointer_help_large_icon</item>
+ <!-- TODO: create large wait icon. -->
+ <item name="pointerIconWait">@drawable/pointer_wait_icon</item>
+ <item name="pointerIconCell">@drawable/pointer_cell_large_icon</item>
+ <item name="pointerIconCrosshair">@drawable/pointer_crosshair_large_icon</item>
+ <item name="pointerIconText">@drawable/pointer_text_large_icon</item>
+ <item name="pointerIconVerticalText">@drawable/pointer_vertical_text_large_icon</item>
+ <item name="pointerIconAlias">@drawable/pointer_alias_large_icon</item>
+ <item name="pointerIconCopy">@drawable/pointer_copy_large_icon</item>
+ <item name="pointerIconAllScroll">@drawable/pointer_all_scroll_large_icon</item>
+ <item name="pointerIconNodrop">@drawable/pointer_nodrop_large_icon</item>
+ <item name="pointerIconHorizontalDoubleArrow">
+ @drawable/pointer_horizontal_double_arrow_large_icon
+ </item>
+ <item name="pointerIconVerticalDoubleArrow">
+ @drawable/pointer_vertical_double_arrow_large_icon
+ </item>
+ <item name="pointerIconTopRightDiagonalDoubleArrow">
+ @drawable/pointer_top_right_diagonal_double_arrow_large_icon
+ </item>
+ <item name="pointerIconTopLeftDiagonalDoubleArrow">
+ @drawable/pointer_top_left_diagonal_double_arrow_large_icon
+ </item>
+ <item name="pointerIconZoomIn">@drawable/pointer_zoom_in_large_icon</item>
+ <item name="pointerIconZoomOut">@drawable/pointer_zoom_out_large_icon</item>
+ <item name="pointerIconGrab">@drawable/pointer_grab_large_icon</item>
+ <item name="pointerIconGrabbing">@drawable/pointer_grabbing_large_icon</item>
+ </style>
+
<!-- Wifi dialog styles -->
<!-- @hide -->
<style name="wifi_item">
diff --git a/core/res/res/values/styles_holo.xml b/core/res/res/values/styles_holo.xml
index 841afd8..3cd60df 100644
--- a/core/res/res/values/styles_holo.xml
+++ b/core/res/res/values/styles_holo.xml
@@ -1176,7 +1176,7 @@
<style name="Widget.Holo.Light.FastScroll" parent="Widget.Holo.FastScroll" />
- <style name="Widget.Holo.SuggestionItem" parent="@android:attr/textAppearanceMedium">
+ <style name="Widget.Holo.SuggestionItem" parent="TextAppearance.Holo.Medium">
<item name="background">@color/white</item>
<item name="drawablePadding">8dip</item>
<item name="ellipsize">marquee</item>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 3860f68..177ca60 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -198,7 +198,6 @@
<java-symbol type="id" name="inbox_text5" />
<java-symbol type="id" name="inbox_text6" />
<java-symbol type="id" name="status_bar_latest_event_content" />
- <java-symbol type="id" name="action_divider" />
<java-symbol type="id" name="notification_main_column" />
<java-symbol type="id" name="sms_short_code_confirm_message" />
<java-symbol type="id" name="sms_short_code_detail_layout" />
@@ -227,7 +226,6 @@
<java-symbol type="attr" name="gestureOverlayViewStyle" />
<java-symbol type="attr" name="keyboardViewStyle" />
<java-symbol type="attr" name="numberPickerStyle" />
- <java-symbol type="attr" name="pointerStyle" />
<java-symbol type="attr" name="preferenceFrameLayoutStyle" />
<java-symbol type="attr" name="searchDialogTheme" />
<java-symbol type="attr" name="textAppearanceAutoCorrectionSuggestion" />
@@ -243,10 +241,8 @@
<java-symbol type="attr" name="isLightTheme"/>
<java-symbol type="bool" name="action_bar_embed_tabs" />
- <java-symbol type="bool" name="action_bar_embed_tabs_pre_jb" />
<java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" />
<java-symbol type="bool" name="config_avoidGfxAccel" />
- <java-symbol type="bool" name="config_allowActionMenuItemTextWithIcon" />
<java-symbol type="bool" name="config_bluetooth_address_validation" />
<java-symbol type="bool" name="config_bluetooth_sco_off_call" />
<java-symbol type="bool" name="config_bluetooth_le_peripheral_mode_supported" />
@@ -1424,6 +1420,8 @@
<java-symbol type="style" name="Theme.DeviceDefault.Dialog.NoFrame" />
<java-symbol type="style" name="Theme.IconMenu" />
<java-symbol type="style" name="Theme.DeviceDefault.VoiceInteractionSession" />
+ <java-symbol type="style" name="Pointer" />
+ <java-symbol type="style" name="LargePointer" />
<java-symbol type="attr" name="mediaRouteButtonStyle" />
<java-symbol type="attr" name="externalRouteEnabledDrawable" />
@@ -1476,11 +1474,15 @@
<java-symbol type="bool" name="config_carDockEnablesAccelerometer" />
<java-symbol type="bool" name="config_deskDockEnablesAccelerometer" />
<java-symbol type="bool" name="config_disableMenuKeyInLockScreen" />
+ <java-symbol type="bool" name="config_enableCarDockHomeLaunch" />
<java-symbol type="bool" name="config_enableLockBeforeUnlockScreen" />
<java-symbol type="bool" name="config_enableLockScreenRotation" />
<java-symbol type="bool" name="config_enableLockScreenTranslucentDecor" />
<java-symbol type="bool" name="config_enableTranslucentDecor" />
+ <java-symbol type="bool" name="config_lidControlsScreenLock" />
<java-symbol type="bool" name="config_lidControlsSleep" />
+ <java-symbol type="bool" name="config_lockDayNightMode" />
+ <java-symbol type="bool" name="config_lockUiMode" />
<java-symbol type="bool" name="config_reverseDefaultRotation" />
<java-symbol type="bool" name="config_showNavigationBar" />
<java-symbol type="bool" name="config_supportAutoRotation" />
@@ -1956,10 +1958,12 @@
<java-symbol type="bool" name="config_built_in_sip_phone" />
<java-symbol type="id" name="maximize_window" />
<java-symbol type="id" name="close_window" />
- <java-symbol type="id" name="client_decor_placeholder" />
- <java-symbol type="layout" name="decor_caption_light" />
- <java-symbol type="layout" name="decor_caption_dark" />
+ <java-symbol type="layout" name="decor_caption" />
<java-symbol type="drawable" name="decor_caption_title_focused" />
+ <java-symbol type="drawable" name="decor_close_button_dark" />
+ <java-symbol type="drawable" name="decor_close_button_light" />
+ <java-symbol type="drawable" name="decor_maximize_button_dark" />
+ <java-symbol type="drawable" name="decor_maximize_button_light" />
<!-- From TelephonyProvider -->
<java-symbol type="xml" name="apns" />
@@ -2084,6 +2088,11 @@
<java-symbol type="array" name="config_system_condition_providers" />
<java-symbol type="string" name="muted_by" />
<java-symbol type="string" name="zen_mode_alarm" />
+ <java-symbol type="string" name="notification_importance_blocked" />
+ <java-symbol type="string" name="notification_importance_low" />
+ <java-symbol type="string" name="notification_importance_default" />
+ <java-symbol type="string" name="notification_importance_high" />
+ <java-symbol type="string" name="notification_importance_max" />
<java-symbol type="string" name="select_day" />
<java-symbol type="string" name="select_year" />
@@ -2344,6 +2353,8 @@
<java-symbol type="string" name="config_packagedKeyboardName" />
<java-symbol type="string" name="default_notification_topic_label" />
+ <java-symbol type="bool" name="config_forceWindowDrawsStatusBarBackground" />
+ <java-symbol type="color" name="system_bar_background_semi_transparent" />
<!-- EditText suggestion popup. -->
<java-symbol type="id" name="suggestionContainer" />
@@ -2361,7 +2372,10 @@
<java-symbol type="id" name="sub_text_divider" />
<java-symbol type="id" name="content_info_divider" />
<java-symbol type="id" name="text_line_1" />
- <java-symbol type="drawable" name="ic_arrow_up_14dp" />
+ <java-symbol type="drawable" name="ic_expand_notification" />
+ <java-symbol type="drawable" name="ic_collapse_notification" />
+ <java-symbol type="drawable" name="ic_expand_bundle" />
+ <java-symbol type="drawable" name="ic_collapse_bundle" />
<java-symbol type="dimen" name="notification_header_height" />
<java-symbol type="dimen" name="notification_big_picture_content_min_height_with_picture" />
<java-symbol type="dimen" name="notification_header_shrink_min_width" />
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index d56674a..bf7718e 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -428,9 +428,6 @@
<item name="fastScrollOverlayPosition">floating</item>
<item name="fastScrollTextColor">@color/primary_text_dark</item>
- <!-- Pointer style -->
- <item name="pointerStyle">@style/Pointer</item>
-
<!-- Accessibility focused drawable -->
<item name="accessibilityFocusedDrawable">@drawable/view_accessibility_focused</item>
diff --git a/core/res/res/values/themes_holo.xml b/core/res/res/values/themes_holo.xml
index d9599b3..4cbaacb 100644
--- a/core/res/res/values/themes_holo.xml
+++ b/core/res/res/values/themes_holo.xml
@@ -46,7 +46,7 @@
with API level 14, the default system theme is supplied by {@link #Theme_DeviceDefault},
which might apply a different style on different devices. If you want to ensure that your
app consistently uses the Holo theme at all times, you must explicitly declare it in your
- manifest. For example, {@code <application android:theme="@android:style/Theme.Holo">}.
+ manifest. For example, {@code <application android:theme="@android:style/Theme.Holo">}.
For more information, read <a
href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">Holo
Everywhere</a>.</p>
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index a5b8476..b011094 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -33,7 +33,7 @@
<!-- Material theme (dark version).
<p>If you want to ensure that your
app consistently uses the Material theme at all times, you must explicitly declare it in your
- manifest. For example, {@code <application android:theme="@style/Theme.Material">}.
+ manifest. For example, {@code <application android:theme="@style/Theme.Material">}.
<p>Styles used by the Material theme are named using the convention Type.Material.Etc
(for example, {@code Widget.Material.Button} and {@code
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index 5783a49..5f1f927 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -187,6 +187,6 @@
<!-- USA: 5-6 digits (premium codes from https://www.premiumsmsrefunds.com/ShortCodes.htm),
visual voicemail code for T-Mobile: 122 -->
- <shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" free="122|87902" />
+ <shortcode country="us" pattern="\\d{5,6}" premium="20433|21(?:344|472)|22715|23(?:333|847)|24(?:15|28)0|25209|27(?:449|606|663)|28498|305(?:00|83)|32(?:340|941)|33(?:166|786|849)|34746|35(?:182|564)|37975|38(?:135|146|254)|41(?:366|463)|42335|43(?:355|500)|44(?:578|711|811)|45814|46(?:157|173|327|654)|46666|47553|48(?:221|277|669)|50(?:844|920)|51(?:062|368)|52944|54(?:723|892)|55928|56483|57370|59(?:182|187|252|342)|60339|61(?:266|982)|62478|64(?:219|898)|65(?:108|500)|69(?:208|388)|70877|71851|72(?:078|087|465)|73(?:288|588|882|909|997)|74(?:034|332|815)|76426|79213|81946|83177|84(?:103|685)|85797|86(?:234|236|666)|89616|90(?:715|842|938)|91(?:362|958)|94719|95297|96(?:040|666|835|969)|97(?:142|294|688)|99(?:689|796|807)" free="122|87902" />
</shortcodes>
diff --git a/core/tests/benchmarks/Android.mk b/core/tests/benchmarks/Android.mk
new file mode 100644
index 0000000..25181b5
--- /dev/null
+++ b/core/tests/benchmarks/Android.mk
@@ -0,0 +1,30 @@
+# -*- mode: makefile -*-
+# Copyright (C) 2015 The Android Open 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+# build framework base core benchmarks
+# ============================================================
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := frameworks-base-core-benchmarks
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := JAVA_LIBRARIES
+LOCAL_SRC_FILES := $(call all-java-files-under, src/)
+
+LOCAL_JAVA_LIBRARIES := \
+ caliper-api-target
+
+include $(BUILD_JAVA_LIBRARY)
diff --git a/core/tests/benchmarks/src/android/content/res/ResourcesBenchmark.java b/core/tests/benchmarks/src/android/content/res/ResourcesBenchmark.java
index 3638473..426b0dc 100644
--- a/core/tests/benchmarks/src/android/content/res/ResourcesBenchmark.java
+++ b/core/tests/benchmarks/src/android/content/res/ResourcesBenchmark.java
@@ -20,11 +20,13 @@
import android.util.Xml;
import com.android.internal.R;
-import com.google.caliper.SimpleBenchmark;
import org.xmlpull.v1.XmlPullParser;
-public class ResourcesBenchmark extends SimpleBenchmark {
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
+
+public class ResourcesBenchmark {
private AssetManager mAsset;
private Resources mRes;
@@ -34,7 +36,7 @@
private int mIntegerId;
private int mLayoutId;
- @Override
+ @BeforeExperiment
protected void setUp() {
mAsset = new AssetManager();
mAsset.addAssetPath("/system/framework/framework-res.apk");
@@ -46,7 +48,7 @@
mLayoutId = mRes.getIdentifier("two_line_list_item", "layout", "android");
}
- @Override
+ @AfterExperiment
protected void tearDown() {
mAsset.close();
}
diff --git a/core/tests/benchmarks/src/android/net/NetworkStatsBenchmark.java b/core/tests/benchmarks/src/android/net/NetworkStatsBenchmark.java
index 1a50432..1b65603 100644
--- a/core/tests/benchmarks/src/android/net/NetworkStatsBenchmark.java
+++ b/core/tests/benchmarks/src/android/net/NetworkStatsBenchmark.java
@@ -16,10 +16,10 @@
package android.net;
+import com.google.caliper.BeforeExperiment;
import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-public class NetworkStatsBenchmark extends SimpleBenchmark {
+public class NetworkStatsBenchmark {
private static final String UNDERLYING_IFACE = "wlan0";
private static final String TUN_IFACE = "tun0";
private static final int TUN_UID = 999999999;
@@ -28,10 +28,8 @@
private int mSize;
private NetworkStats mNetworkStats;
- @Override
+ @BeforeExperiment
protected void setUp() throws Exception {
- super.setUp();
-
mNetworkStats = new NetworkStats(0, mSize + 2);
int uid = 0;
NetworkStats.Entry recycle = new NetworkStats.Entry();
diff --git a/core/tests/benchmarks/src/android/net/TrafficStatsBenchmark.java b/core/tests/benchmarks/src/android/net/TrafficStatsBenchmark.java
index 5a29adc..09de412 100644
--- a/core/tests/benchmarks/src/android/net/TrafficStatsBenchmark.java
+++ b/core/tests/benchmarks/src/android/net/TrafficStatsBenchmark.java
@@ -16,9 +16,7 @@
package android.net;
-import com.google.caliper.SimpleBenchmark;
-
-public class TrafficStatsBenchmark extends SimpleBenchmark {
+public class TrafficStatsBenchmark {
public void timeGetUidRxBytes(int reps) {
for (int i = 0; i < reps; i++) {
TrafficStats.getUidRxBytes(android.os.Process.myUid());
diff --git a/core/tests/benchmarks/src/android/os/ParcelArrayBenchmark.java b/core/tests/benchmarks/src/android/os/ParcelArrayBenchmark.java
index 21cfb09..eff8c8e 100644
--- a/core/tests/benchmarks/src/android/os/ParcelArrayBenchmark.java
+++ b/core/tests/benchmarks/src/android/os/ParcelArrayBenchmark.java
@@ -16,10 +16,11 @@
package android.os;
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
import com.google.caliper.Param;
-import com.google.caliper.SimpleBenchmark;
-public class ParcelArrayBenchmark extends SimpleBenchmark {
+public class ParcelArrayBenchmark {
@Param({ "1", "10", "100", "1000" })
private int mSize;
@@ -34,7 +35,7 @@
private Parcel mIntParcel;
private Parcel mLongParcel;
- @Override
+ @BeforeExperiment
protected void setUp() {
mWriteParcel = Parcel.obtain();
@@ -50,7 +51,7 @@
mLongParcel.writeLongArray(mLongArray);
}
- @Override
+ @AfterExperiment
protected void tearDown() {
mWriteParcel.recycle();
mWriteParcel = null;
@@ -118,5 +119,4 @@
mLongParcel.readLongArray(mLongArray);
}
}
-
}
diff --git a/core/tests/benchmarks/src/android/os/ParcelBenchmark.java b/core/tests/benchmarks/src/android/os/ParcelBenchmark.java
index 6a7b7c8..4bd2d00 100644
--- a/core/tests/benchmarks/src/android/os/ParcelBenchmark.java
+++ b/core/tests/benchmarks/src/android/os/ParcelBenchmark.java
@@ -16,18 +16,19 @@
package android.os;
-import com.google.caliper.SimpleBenchmark;
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
-public class ParcelBenchmark extends SimpleBenchmark {
+public class ParcelBenchmark {
private Parcel mParcel;
- @Override
+ @BeforeExperiment
protected void setUp() {
mParcel = Parcel.obtain();
}
- @Override
+ @AfterExperiment
protected void tearDown() {
mParcel.recycle();
mParcel = null;
diff --git a/core/tests/benchmarks/src/android/os/StrictModeBenchmark.java b/core/tests/benchmarks/src/android/os/StrictModeBenchmark.java
index 41af3820..a110906 100644
--- a/core/tests/benchmarks/src/android/os/StrictModeBenchmark.java
+++ b/core/tests/benchmarks/src/android/os/StrictModeBenchmark.java
@@ -18,9 +18,7 @@
import android.os.StrictMode.ThreadPolicy;
-import com.google.caliper.SimpleBenchmark;
-
-public class StrictModeBenchmark extends SimpleBenchmark {
+public class StrictModeBenchmark {
private ThreadPolicy mOff = new ThreadPolicy.Builder().build();
private ThreadPolicy mOn = new ThreadPolicy.Builder().detectAll().build();
diff --git a/core/tests/benchmarks/src/android/util/FloatMathBenchmark.java b/core/tests/benchmarks/src/android/util/FloatMathBenchmark.java
index 2858128..028dd1d 100644
--- a/core/tests/benchmarks/src/android/util/FloatMathBenchmark.java
+++ b/core/tests/benchmarks/src/android/util/FloatMathBenchmark.java
@@ -15,13 +15,9 @@
*/
package android.util;
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
import android.util.FloatMath;
-public class FloatMathBenchmark extends SimpleBenchmark {
+public class FloatMathBenchmark {
public float timeFloatMathCeil(int reps) {
// Keep an answer so we don't optimize the method call away.
@@ -112,5 +108,4 @@
}
return f;
}
-
}
diff --git a/core/tests/benchmarks/src/com/android/internal/net/NetworkStatsFactoryBenchmark.java b/core/tests/benchmarks/src/com/android/internal/net/NetworkStatsFactoryBenchmark.java
index 2174be5..e62fbd6 100644
--- a/core/tests/benchmarks/src/com/android/internal/net/NetworkStatsFactoryBenchmark.java
+++ b/core/tests/benchmarks/src/com/android/internal/net/NetworkStatsFactoryBenchmark.java
@@ -18,29 +18,31 @@
import android.net.NetworkStats;
import android.os.SystemClock;
-
-import com.google.caliper.SimpleBenchmark;
-
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
import java.io.File;
-public class NetworkStatsFactoryBenchmark extends SimpleBenchmark {
+public class NetworkStatsFactoryBenchmark {
private File mStats;
// TODO: consider staging stats file with different number of rows
- @Override
+ @BeforeExperiment
protected void setUp() {
mStats = new File("/proc/net/xt_qtaguid/stats");
}
- @Override
+ @AfterExperiment
protected void tearDown() {
mStats = null;
}
public void timeReadNetworkStatsDetailJava(int reps) throws Exception {
for (int i = 0; i < reps; i++) {
- NetworkStatsFactory.javaReadNetworkStatsDetail(mStats, NetworkStats.UID_ALL);
+ NetworkStatsFactory.javaReadNetworkStatsDetail(mStats, NetworkStats.UID_ALL,
+ // Looks like this was broken by change d0c5b9abed60b7bc056d026bf0f2b2235410fb70
+ // Fixed compilation problem but needs addressing properly.
+ new String[0], 999);
}
}
@@ -48,7 +50,10 @@
for (int i = 0; i < reps; i++) {
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 0);
NetworkStatsFactory.nativeReadNetworkStatsDetail(
- stats, mStats.getAbsolutePath(), NetworkStats.UID_ALL);
+ stats, mStats.getAbsolutePath(), NetworkStats.UID_ALL,
+ // Looks like this was broken by change d0c5b9abed60b7bc056d026bf0f2b2235410fb70
+ // Fixed compilation problem but needs addressing properly.
+ new String[0], 999);
}
}
}
diff --git a/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java b/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
index 34c73e8..1112d5c 100644
--- a/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
+++ b/core/tests/benchmarks/src/com/android/internal/util/IndentingPrintWriterBenchmark.java
@@ -17,15 +17,15 @@
package com.android.internal.util;
import com.google.android.collect.Lists;
-import com.google.caliper.SimpleBenchmark;
-
+import com.google.caliper.AfterExperiment;
+import com.google.caliper.BeforeExperiment;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
-public class IndentingPrintWriterBenchmark extends SimpleBenchmark {
+public class IndentingPrintWriterBenchmark {
private PrintWriter mDirect;
private IndentingPrintWriter mIndenting;
@@ -33,7 +33,7 @@
private Node mSimple;
private Node mComplex;
- @Override
+ @BeforeExperiment
protected void setUp() throws IOException {
final FileOutputStream os = new FileOutputStream(new File("/dev/null"));
mDirect = new PrintWriter(os);
@@ -49,7 +49,7 @@
manyChildren);
}
- @Override
+ @AfterExperiment
protected void tearDown() {
mIndenting.close();
mIndenting = null;
diff --git a/core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml b/core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml
index b7645b0..c56079f8 100644
--- a/core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml
+++ b/core/tests/coretests/apks/keyset/permUse/AndroidManifest.xml
@@ -21,11 +21,11 @@
<key-sets>
<key-set android:name="A">
<public-key android:name="keyA"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJoN1Nsgqf0V4C/bbN8wo8O2X/S5D76+5Mb9mlIsHkUTUTbHCNk+LxHIUYLm89YbP9zImrV0bUHLUAZUyoMUCiMCAwEAAQ=="/>
+ android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB"/>
</key-set>
<key-set android:name="B">
<public-key android:name="keyB"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTfQsY8UuXiXmvw/y7Tpr7HoyfAC0nE/8Qdk3ZtEr9asa5qqP0F6xzCI1PGVFV+WLVRwm6FdB9StENL5EKyQFcCAwEAAQ==" />
+ android:value="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtGr5cL2N7ztHiHmphB1/1eq+43lEAmP36iiEJAfX+cVReGSPFXqNnnM8Vptd2boAe332lrFw9rKPmbkZA+jOTA==" />
</key-set>
<upgrade-key-set android:name="A"/>
<upgrade-key-set android:name="B"/>
diff --git a/core/tests/coretests/apks/keyset/uA/AndroidManifest.xml b/core/tests/coretests/apks/keyset/uA/AndroidManifest.xml
index f31b75f..8c440f5 100644
--- a/core/tests/coretests/apks/keyset/uA/AndroidManifest.xml
+++ b/core/tests/coretests/apks/keyset/uA/AndroidManifest.xml
@@ -20,7 +20,7 @@
<key-sets>
<key-set android:name="A" >
<public-key android:name="keyA"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJoN1Nsgqf0V4C/bbN8wo8O2X/S5D76+5Mb9mlIsHkUTUTbHCNk+LxHIUYLm89YbP9zImrV0bUHLUAZUyoMUCiMCAwEAAQ=="/>
+ android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB"/>
</key-set>
<upgrade-key-set android:name="A"/>
</key-sets>
diff --git a/core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml b/core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml
index 8ad3471..015c3ad 100644
--- a/core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml
+++ b/core/tests/coretests/apks/keyset/uAB/AndroidManifest.xml
@@ -20,9 +20,9 @@
<key-sets>
<key-set android:name="AB" >
<public-key android:name="keyA"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJoN1Nsgqf0V4C/bbN8wo8O2X/S5D76+5Mb9mlIsHkUTUTbHCNk+LxHIUYLm89YbP9zImrV0bUHLUAZUyoMUCiMCAwEAAQ==" />
+ android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB" />
<public-key android:name="keyB"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTfQsY8UuXiXmvw/y7Tpr7HoyfAC0nE/8Qdk3ZtEr9asa5qqP0F6xzCI1PGVFV+WLVRwm6FdB9StENL5EKyQFcCAwEAAQ==" />
+ android:value="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtGr5cL2N7ztHiHmphB1/1eq+43lEAmP36iiEJAfX+cVReGSPFXqNnnM8Vptd2boAe332lrFw9rKPmbkZA+jOTA==" />
</key-set>
<upgrade-key-set android:name="AB"/>
</key-sets>
diff --git a/core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml b/core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml
index cdbd639..9491dbea 100644
--- a/core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml
+++ b/core/tests/coretests/apks/keyset/uAuB/AndroidManifest.xml
@@ -20,11 +20,11 @@
<key-sets>
<key-set android:name="A" >
<public-key android:name="keyA"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJoN1Nsgqf0V4C/bbN8wo8O2X/S5D76+5Mb9mlIsHkUTUTbHCNk+LxHIUYLm89YbP9zImrV0bUHLUAZUyoMUCiMCAwEAAQ==" />
+ android:value="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsMpNthdOxud7roPDZMMomOqXgJJdRfIWpkKEqmC61Mv+Nf6QY3TorEwJeghjSmqj7IbBKrtvfQq4E2XJO1HuspmQO4Ng2gvn+r+6EwNfKc9k55d6s+27SR867jKurBbHNtZMG+tjL1yH4r+tNzcuJCsgyAFqLmxFdcxEwzNvREyRpoYc5RDR0mmTwkMCUhJ6CId1EYEKiCEdNzxv+fWPEb21u+/MWpleGCILs8kglRVb2q/WOzAAvGr4FY5plfaE6N+lr7+UschQ+aMi1+uqewo2o0qPFVmZP5hnwj55K4UMzu/NhhDqQQsX4cSGES1KgHo5MTqRqZjN/I7emw5pFQIDAQAB" />
</key-set>
<key-set android:name="B" >
<public-key android:name="keyB"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTfQsY8UuXiXmvw/y7Tpr7HoyfAC0nE/8Qdk3ZtEr9asa5qqP0F6xzCI1PGVFV+WLVRwm6FdB9StENL5EKyQFcCAwEAAQ==" />
+ android:value="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtGr5cL2N7ztHiHmphB1/1eq+43lEAmP36iiEJAfX+cVReGSPFXqNnnM8Vptd2boAe332lrFw9rKPmbkZA+jOTA==" />
</key-set>
<upgrade-key-set android:name="A"/>
<upgrade-key-set android:name="B"/>
diff --git a/core/tests/coretests/apks/keyset/uB/AndroidManifest.xml b/core/tests/coretests/apks/keyset/uB/AndroidManifest.xml
index 61063c3..f491840 100644
--- a/core/tests/coretests/apks/keyset/uB/AndroidManifest.xml
+++ b/core/tests/coretests/apks/keyset/uB/AndroidManifest.xml
@@ -20,7 +20,7 @@
<key-sets>
<key-set android:name="B" >
<public-key android:name="keyB"
- android:value="MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMTfQsY8UuXiXmvw/y7Tpr7HoyfAC0nE/8Qdk3ZtEr9asa5qqP0F6xzCI1PGVFV+WLVRwm6FdB9StENL5EKyQFcCAwEAAQ==" />
+ android:value="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtGr5cL2N7ztHiHmphB1/1eq+43lEAmP36iiEJAfX+cVReGSPFXqNnnM8Vptd2boAe332lrFw9rKPmbkZA+jOTA==" />
</key-set>
<upgrade-key-set android:name="B"/>
</key-sets>
diff --git a/core/tests/coretests/certs/keyset_A.pk8 b/core/tests/coretests/certs/keyset_A.pk8
index 3976b94..4076313 100644
--- a/core/tests/coretests/certs/keyset_A.pk8
+++ b/core/tests/coretests/certs/keyset_A.pk8
Binary files differ
diff --git a/core/tests/coretests/certs/keyset_A.x509.pem b/core/tests/coretests/certs/keyset_A.x509.pem
index 0fe334e..548bf13 100644
--- a/core/tests/coretests/certs/keyset_A.x509.pem
+++ b/core/tests/coretests/certs/keyset_A.x509.pem
@@ -1,14 +1,18 @@
-----BEGIN CERTIFICATE-----
-MIICKjCCAdQCCQCpDXPnNpO5UjANBgkqhkiG9w0BAQUFADCBmzELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcx
-DzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMHQW5kcm9pZDEYMBYGA1UEAxMPd3d3
-LmV4YW1wbGUuY29tMSIwIAYJKoZIhvcNAQkBFhNkY2FzaG1hbkBnb29nbGUuY29t
-MB4XDTE0MDQyMTE4MTkwM1oXDTE3MDQyMDE4MTkwM1owgZsxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MQ8w
-DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxGDAWBgNVBAMTD3d3dy5l
-eGFtcGxlLmNvbTEiMCAGCSqGSIb3DQEJARYTZGNhc2htYW5AZ29vZ2xlLmNvbTBc
-MA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCaDdTbIKn9FeAv22zfMKPDtl/0uQ++vuTG
-/ZpSLB5FE1E2xwjZPi8RyFGC5vPWGz/cyJq1dG1By1AGVMqDFAojAgMBAAEwDQYJ
-KoZIhvcNAQEFBQADQQCPTVDKxVZpxFH6Nm7sxpRplLzxbs/xyGELLIjEBVrgB0CM
-HAxFpPRHDSFpTxGG2mBCSrf+lD2Bf+WiIojx+RLY
+MIIC+TCCAeGgAwIBAgIJALuyfpZeCDiwMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
+BAMMCGtleXNldF9BMB4XDTE1MTIwMjIxMTEzNFoXDTQzMDQxOTIxMTEzNFowEzER
+MA8GA1UEAwwIa2V5c2V0X0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCwyk22F07G53uug8NkwyiY6peAkl1F8hamQoSqYLrUy/41/pBjdOisTAl6CGNK
+aqPshsEqu299CrgTZck7Ue6ymZA7g2DaC+f6v7oTA18pz2Tnl3qz7btJHzruMq6s
+Fsc21kwb62MvXIfiv603Ny4kKyDIAWoubEV1zETDM29ETJGmhhzlENHSaZPCQwJS
+EnoIh3URgQqIIR03PG/59Y8RvbW778xamV4YIguzySCVFVvar9Y7MAC8avgVjmmV
+9oTo36Wvv5SxyFD5oyLX66p7CjajSo8VWZk/mGfCPnkrhQzO782GEOpBCxfhxIYR
+LUqAejkxOpGpmM38jt6bDmkVAgMBAAGjUDBOMB0GA1UdDgQWBBTVcIVD9u9538W/
+NE2Y36YiPtYmPzAfBgNVHSMEGDAWgBTVcIVD9u9538W/NE2Y36YiPtYmPzAMBgNV
+HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCjTN3mgaKep55wR1ULf4ULIc/m
+mjfZK7ZnJcynBEIGyjAqt4mMIfKRV/DllLsf997r7bz12qUSLbhWGFSq4a2ceOIp
+RG0+CGXV8Ez5Hz4o99MAP37Zdd5Lfq8fdlg2Mro2MMr21Tf3i2Y2LOfkXEZrW7rQ
+A5ZRVksoRcPQWaaNA85LGRSCiC2XSjg8TLn1qKwQUXVGQ6fwLKqAeeV2+hynADih
+FUaf7HxE5H3bHLByLmLKtab3Ta/g8VXxxRYuyd/rYsWMAHsjZge6xoVajm6Wvj5Q
+AvIxV99+PK7dkjVpg3O2oN1O4DQlqqvxdhjNP733DI4cihfJYV9Vn+wKj3TA
-----END CERTIFICATE-----
diff --git a/core/tests/coretests/certs/keyset_B.pk8 b/core/tests/coretests/certs/keyset_B.pk8
index a44ebb3..839d96c 100644
--- a/core/tests/coretests/certs/keyset_B.pk8
+++ b/core/tests/coretests/certs/keyset_B.pk8
Binary files differ
diff --git a/core/tests/coretests/certs/keyset_B.x509.pem b/core/tests/coretests/certs/keyset_B.x509.pem
index 2806de5..537e047 100644
--- a/core/tests/coretests/certs/keyset_B.x509.pem
+++ b/core/tests/coretests/certs/keyset_B.x509.pem
@@ -1,14 +1,10 @@
-----BEGIN CERTIFICATE-----
-MIICKjCCAdQCCQC+5GnAgmYS6DANBgkqhkiG9w0BAQUFADCBmzELMAkGA1UEBhMC
-VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcx
-DzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMHQW5kcm9pZDEYMBYGA1UEAxMPd3d3
-LmV4YW1wbGUuY29tMSIwIAYJKoZIhvcNAQkBFhNkY2FzaG1hbkBnb29nbGUuY29t
-MB4XDTE0MDQyMTE4MjczM1oXDTE3MDQyMDE4MjczM1owgZsxCzAJBgNVBAYTAlVT
-MRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MQ8w
-DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxGDAWBgNVBAMTD3d3dy5l
-eGFtcGxlLmNvbTEiMCAGCSqGSIb3DQEJARYTZGNhc2htYW5AZ29vZ2xlLmNvbTBc
-MA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDE30LGPFLl4l5r8P8u06a+x6MnwAtJxP/E
-HZN2bRK/WrGuaqj9BescwiNTxlRVfli1UcJuhXQfUrRDS+RCskBXAgMBAAEwDQYJ
-KoZIhvcNAQEFBQADQQCYYyur2/sMB88MOhQE8RHNmdO0zEQYAz66z3ctTNqiNsbK
-T9iKj0CT3cjqgfN5ex4onhnoIIPtON7DIHFWke5x
+MIIBbDCCAROgAwIBAgIJALP/7jQfVyFBMAoGCCqGSM49BAMCMBMxETAPBgNVBAMM
+CGtleXNldF9CMB4XDTE1MTIwMzIwNDgwNFoXDTQzMDQyMDIwNDgwNFowEzERMA8G
+A1UEAwwIa2V5c2V0X0IwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS0avlwvY3v
+O0eIeamEHX/V6r7jeUQCY/fqKIQkB9f5xVF4ZI8Veo2eczxWm13ZugB7ffaWsXD2
+so+ZuRkD6M5Mo1AwTjAdBgNVHQ4EFgQUHrv1BwZU/MchAsa3VL0n458IwVswHwYD
+VR0jBBgwFoAUHrv1BwZU/MchAsa3VL0n458IwVswDAYDVR0TBAUwAwEB/zAKBggq
+hkjOPQQDAgNHADBEAiBp2nTHHhywNIyLpe8mYUsbwozVWM5/2xFidQe9Edua0AIg
+Wt9BCfzrcsBh2Rlje9Im9sq6hIyLSS1pe6ZcI3+lDis=
-----END CERTIFICATE-----
diff --git a/core/tests/coretests/src/android/content/pm/RegisteredServicesCacheTest.java b/core/tests/coretests/src/android/content/pm/RegisteredServicesCacheTest.java
index 32b4557..271c639 100644
--- a/core/tests/coretests/src/android/content/pm/RegisteredServicesCacheTest.java
+++ b/core/tests/coretests/src/android/content/pm/RegisteredServicesCacheTest.java
@@ -188,7 +188,10 @@
private static RegisteredServicesCache.ServiceInfo<TestServiceType> newServiceInfo(
TestServiceType type, int uid) {
- return new RegisteredServicesCache.ServiceInfo<>(type, null, uid);
+ final ComponentInfo info = new ComponentInfo();
+ info.applicationInfo = new ApplicationInfo();
+ info.applicationInfo.uid = uid;
+ return new RegisteredServicesCache.ServiceInfo<>(type, info, null);
}
private void assertNotEmptyFileCreated(TestServicesCache cache, int userId) {
diff --git a/core/tests/coretests/src/android/view/textservice/SpellCheckerSubtypeTest.java b/core/tests/coretests/src/android/view/textservice/SpellCheckerSubtypeTest.java
new file mode 100644
index 0000000..73fdb10
--- /dev/null
+++ b/core/tests/coretests/src/android/view/textservice/SpellCheckerSubtypeTest.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.textservice;
+
+import android.os.Parcel;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import static android.test.MoreAsserts.assertNotEqual;
+
+/**
+ * TODO: Most of part can be, and probably should be, moved to CTS.
+ */
+public class SpellCheckerSubtypeTest extends InstrumentationTestCase {
+ private static final int SUBTYPE_SUBTYPE_ID_NONE = 0;
+ private static final String SUBTYPE_SUBTYPE_LOCALE_STRING_A = "en_GB";
+ private static final int SUBTYPE_NAME_RES_ID_A = 0x12345;
+ private static final String SUBTYPE_EXTRA_VALUE_A = "Key1=Value1,Key2=Value2";
+ private static final int SUBTYPE_SUBTYPE_ID_A = 42;
+ private static final String SUBTYPE_SUBTYPE_LOCALE_STRING_B = "en_IN";
+ private static final int SUBTYPE_NAME_RES_ID_B = 0x54321;
+ private static final String SUBTYPE_EXTRA_VALUE_B = "Key3=Value3,Key4=Value4";
+ private static final int SUBTYPE_SUBTYPE_ID_B = -42;
+
+ private static int defaultHashCodeAlgorithm(String locale, String extraValue) {
+ return Arrays.hashCode(new Object[] {locale, extraValue});
+ }
+
+ private static final SpellCheckerSubtype cloneViaParcel(final SpellCheckerSubtype original) {
+ Parcel parcel = null;
+ try {
+ parcel = Parcel.obtain();
+ original.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0);
+ return SpellCheckerSubtype.CREATOR.createFromParcel(parcel);
+ } finally {
+ if (parcel != null) {
+ parcel.recycle();
+ }
+ }
+ }
+
+ @SmallTest
+ public void testSubtypeWithNoSubtypeId() throws Exception {
+ final SpellCheckerSubtype subtype = new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A,
+ SUBTYPE_SUBTYPE_LOCALE_STRING_A, SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE);
+ assertEquals(SUBTYPE_NAME_RES_ID_A, subtype.getNameResId());
+ assertEquals(SUBTYPE_SUBTYPE_LOCALE_STRING_A, subtype.getLocale());
+ assertEquals("Value1", subtype.getExtraValueOf("Key1"));
+ assertEquals("Value2", subtype.getExtraValueOf("Key2"));
+ // Historically we have used SpellCheckerSubtype#hashCode() to track which subtype is
+ // enabled, and it is supposed to be stored in SecureSettings. Therefore we have to
+ // keep using the same algorithm for compatibility reasons.
+ assertEquals(
+ defaultHashCodeAlgorithm(SUBTYPE_SUBTYPE_LOCALE_STRING_A, SUBTYPE_EXTRA_VALUE_A),
+ subtype.hashCode());
+
+ final SpellCheckerSubtype clonedSubtype = cloneViaParcel(subtype);
+ assertEquals(SUBTYPE_NAME_RES_ID_A, clonedSubtype.getNameResId());
+ assertEquals(SUBTYPE_SUBTYPE_LOCALE_STRING_A, clonedSubtype.getLocale());
+ assertEquals("Value1", clonedSubtype.getExtraValueOf("Key1"));
+ assertEquals("Value2", clonedSubtype.getExtraValueOf("Key2"));
+ assertEquals(
+ defaultHashCodeAlgorithm(SUBTYPE_SUBTYPE_LOCALE_STRING_A, SUBTYPE_EXTRA_VALUE_A),
+ clonedSubtype.hashCode());
+ }
+
+ public void testSubtypeWithSubtypeId() throws Exception {
+ final SpellCheckerSubtype subtype = new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A,
+ SUBTYPE_SUBTYPE_LOCALE_STRING_A, SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A);
+
+ assertEquals(SUBTYPE_NAME_RES_ID_A, subtype.getNameResId());
+ assertEquals(SUBTYPE_SUBTYPE_LOCALE_STRING_A, subtype.getLocale());
+ assertEquals("Value1", subtype.getExtraValueOf("Key1"));
+ assertEquals("Value2", subtype.getExtraValueOf("Key2"));
+ // Similar to "SubtypeId" in InputMethodSubtype, "SubtypeId" in SpellCheckerSubtype enables
+ // developers to specify a stable and consistent ID for each subtype.
+ assertEquals(SUBTYPE_SUBTYPE_ID_A, subtype.hashCode());
+
+ final SpellCheckerSubtype clonedSubtype = cloneViaParcel(subtype);
+ assertEquals(SUBTYPE_NAME_RES_ID_A, clonedSubtype.getNameResId());
+ assertEquals(SUBTYPE_SUBTYPE_LOCALE_STRING_A, clonedSubtype.getLocale());
+ assertEquals("Value1", clonedSubtype.getExtraValueOf("Key1"));
+ assertEquals("Value2", clonedSubtype.getExtraValueOf("Key2"));
+ assertEquals(SUBTYPE_SUBTYPE_ID_A, clonedSubtype.hashCode());
+ }
+
+ @SmallTest
+ public void testGetLocaleObject() throws Exception {
+ assertEquals(new Locale("en"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "en", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("en", "US"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "en_US", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("en", "US", "POSIX"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "en_US_POSIX", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+
+ // Special rewrite rule for "tl" for versions of Android earlier than Lollipop that did not
+ // support three letter language codes, and used "tl" (Tagalog) as the language string for
+ // "fil" (Filipino).
+ assertEquals(new Locale("fil"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "tl", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("fil", "PH"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "tl_PH", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("fil", "PH", "POSIX"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "tl_PH_POSIX", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+
+ // So far rejecting invalid/unexpected locale strings is out of the scope.
+ assertEquals(new Locale("a"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "a", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("a b c"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "a b c", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ assertEquals(new Locale("en-US"), new SpellCheckerSubtype(
+ SUBTYPE_NAME_RES_ID_A, "en-US", SUBTYPE_EXTRA_VALUE_A).getLocaleObject());
+ }
+
+ @SmallTest
+ public void testEquality() throws Exception {
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_B, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_B));
+
+ // If subtype ID is 0 (== SUBTYPE_SUBTYPE_ID_NONE), we keep the same behavior.
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_B, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_NONE),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_B, SUBTYPE_SUBTYPE_ID_NONE));
+
+ // If subtype ID is not 0, we test the equality based only on the subtype ID.
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A));
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_B, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A));
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_B,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A));
+ assertEquals(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_B, SUBTYPE_SUBTYPE_ID_A));
+ assertNotEqual(
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_A),
+ new SpellCheckerSubtype(SUBTYPE_NAME_RES_ID_A, SUBTYPE_SUBTYPE_LOCALE_STRING_A,
+ SUBTYPE_EXTRA_VALUE_A, SUBTYPE_SUBTYPE_ID_B));
+ }
+}
diff --git a/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java b/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
index ddbdc87..83a9e01 100644
--- a/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewActivityMouseTest.java
@@ -16,15 +16,23 @@
package android.widget;
+import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
+import static android.widget.espresso.DragHandleUtils.onHandleView;
+import static android.widget.espresso.TextViewActions.mouseClickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.mouseDoubleClickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.mouseLongClickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.mouseDoubleClickAndDragOnText;
import static android.widget.espresso.TextViewActions.mouseDragOnText;
import static android.widget.espresso.TextViewActions.mouseLongClickAndDragOnText;
+import static android.widget.espresso.TextViewActions.mouseTripleClickAndDragOnText;
+import static android.widget.espresso.TextViewActions.mouseTripleClickOnTextAtIndex;
import static android.widget.espresso.TextViewAssertions.hasSelection;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.action.ViewActions.replaceText;
import static android.support.test.espresso.action.ViewActions.typeTextIntoFocusedView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import com.android.frameworks.coretests.R;
@@ -48,10 +56,23 @@
final String helloWorld = "Hello world!";
onView(withId(R.id.textview)).perform(click());
onView(withId(R.id.textview)).perform(typeTextIntoFocusedView(helloWorld));
+
+ assertNoSelectionHandles();
+
onView(withId(R.id.textview)).perform(
mouseDragOnText(helloWorld.indexOf("llo"), helloWorld.indexOf("ld!")));
onView(withId(R.id.textview)).check(hasSelection("llo wor"));
+
+ onHandleView(com.android.internal.R.id.selection_start_handle)
+ .check(matches(isDisplayed()));
+ onHandleView(com.android.internal.R.id.selection_end_handle)
+ .check(matches(isDisplayed()));
+
+ onView(withId(R.id.textview)).perform(mouseClickOnTextAtIndex(helloWorld.indexOf("w")));
+ onView(withId(R.id.textview)).check(hasSelection(""));
+
+ assertNoSelectionHandles();
}
@SmallTest
@@ -89,6 +110,9 @@
onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(
helloWorld.indexOf("rld")));
onView(withId(R.id.textview)).check(hasSelection("world"));
+
+ onView(withId(R.id.textview)).perform(mouseLongClickOnTextAtIndex(helloWorld.length()));
+ onView(withId(R.id.textview)).check(hasSelection("!"));
}
@SmallTest
@@ -113,6 +137,9 @@
onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(
helloWorld.indexOf("rld")));
onView(withId(R.id.textview)).check(hasSelection("world"));
+
+ onView(withId(R.id.textview)).perform(mouseDoubleClickOnTextAtIndex(helloWorld.length()));
+ onView(withId(R.id.textview)).check(hasSelection("!"));
}
@SmallTest
@@ -166,4 +193,102 @@
mouseLongClickAndDragOnText(text.indexOf("j"), text.indexOf("f")));
onView(withId(R.id.textview)).check(hasSelection("efg hijk"));
}
+
+ @SmallTest
+ public void testSelectTextByTripleClick() throws Exception {
+ getActivity();
+
+ final StringBuilder builder = new StringBuilder();
+ builder.append("First paragraph.\n");
+ builder.append("Second paragraph.");
+ for (int i = 0; i < 10; i++) {
+ builder.append(" This paragraph is very long.");
+ }
+ builder.append('\n');
+ builder.append("Third paragraph.");
+ final String text = builder.toString();
+
+ onView(withId(R.id.textview)).perform(click());
+ onView(withId(R.id.textview)).perform(replaceText(text));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickOnTextAtIndex(text.indexOf("rst")));
+ onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickOnTextAtIndex(text.indexOf("cond")));
+ onView(withId(R.id.textview)).check(hasSelection(
+ text.substring(text.indexOf("Second"), text.indexOf("Third"))));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickOnTextAtIndex(text.indexOf("ird")));
+ onView(withId(R.id.textview)).check(hasSelection("Third paragraph."));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickOnTextAtIndex(text.indexOf("very long")));
+ onView(withId(R.id.textview)).check(hasSelection(
+ text.substring(text.indexOf("Second"), text.indexOf("Third"))));
+ }
+
+ @SmallTest
+ public void testSelectTextByTripleClickAndDrag() throws Exception {
+ getActivity();
+
+ final StringBuilder builder = new StringBuilder();
+ builder.append("First paragraph.\n");
+ builder.append("Second paragraph.");
+ for (int i = 0; i < 10; i++) {
+ builder.append(" This paragraph is very long.");
+ }
+ builder.append('\n');
+ builder.append("Third paragraph.");
+ final String text = builder.toString();
+
+ onView(withId(R.id.textview)).perform(click());
+ onView(withId(R.id.textview)).perform(replaceText(text));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("irst"), text.indexOf("st")));
+ onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("cond"), text.indexOf("Third") - 2));
+ onView(withId(R.id.textview)).check(hasSelection(
+ text.substring(text.indexOf("Second"), text.indexOf("Third"))));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("First"), text.indexOf("ird")));
+ onView(withId(R.id.textview)).check(hasSelection(text));
+ }
+
+ @SmallTest
+ public void testSelectTextByTripleClickAndDrag_reverse() throws Exception {
+ getActivity();
+
+ final StringBuilder builder = new StringBuilder();
+ builder.append("First paragraph.\n");
+ builder.append("Second paragraph.");
+ for (int i = 0; i < 10; i++) {
+ builder.append(" This paragraph is very long.");
+ }
+ builder.append('\n');
+ builder.append("Third paragraph.");
+ final String text = builder.toString();
+
+ onView(withId(R.id.textview)).perform(click());
+ onView(withId(R.id.textview)).perform(replaceText(text));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("st"), text.indexOf("irst")));
+ onView(withId(R.id.textview)).check(hasSelection("First paragraph.\n"));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("Third") - 2, text.indexOf("cond")));
+ onView(withId(R.id.textview)).check(hasSelection(
+ text.substring(text.indexOf("Second"), text.indexOf("Third"))));
+
+ onView(withId(R.id.textview)).perform(
+ mouseTripleClickAndDragOnText(text.indexOf("ird"), text.indexOf("First")));
+ onView(withId(R.id.textview)).check(hasSelection(text));
+ }
}
diff --git a/core/tests/coretests/src/android/widget/TextViewActivityTest.java b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
index a6250e6..aa57641 100644
--- a/core/tests/coretests/src/android/widget/TextViewActivityTest.java
+++ b/core/tests/coretests/src/android/widget/TextViewActivityTest.java
@@ -16,6 +16,8 @@
package android.widget;
+import static android.widget.espresso.DragHandleUtils.assertNoSelectionHandles;
+import static android.widget.espresso.DragHandleUtils.onHandleView;
import static android.widget.espresso.TextViewActions.clickOnTextAtIndex;
import static android.widget.espresso.TextViewActions.doubleTapAndDragOnText;
import static android.widget.espresso.TextViewActions.doubleClickOnTextAtIndex;
@@ -32,19 +34,12 @@
import static android.support.test.espresso.action.ViewActions.replaceText;
import static android.support.test.espresso.action.ViewActions.typeTextIntoFocusedView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
-import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
-import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
-import static org.hamcrest.Matchers.allOf;
import com.android.frameworks.coretests.R;
-import android.support.test.espresso.NoMatchingRootException;
-import android.support.test.espresso.NoMatchingViewException;
-import android.support.test.espresso.ViewInteraction;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.KeyEvent;
@@ -376,25 +371,4 @@
.perform(dragHandle(textView, Handle.SELECTION_END, text.indexOf('i')));
onView(withId(R.id.textview)).check(hasSelection("hijk"));
}
-
- private static void assertNoSelectionHandles() {
- try {
- onHandleView(com.android.internal.R.id.selection_start_handle)
- .check(matches(isDisplayed()));
- } catch (NoMatchingRootException | NoMatchingViewException | AssertionError e) {
- try {
- onHandleView(com.android.internal.R.id.selection_end_handle)
- .check(matches(isDisplayed()));
- } catch (NoMatchingRootException | NoMatchingViewException | AssertionError e1) {
- return;
- }
- }
- throw new AssertionError("Selection handle found");
- }
-
- private static ViewInteraction onHandleView(int id)
- throws NoMatchingRootException, NoMatchingViewException, AssertionError {
- return onView(allOf(withId(id), isAssignableFrom(Editor.HandleView.class)))
- .inRoot(withDecorView(hasDescendant(withId(id))));
- }
}
diff --git a/core/tests/coretests/src/android/widget/espresso/DragAction.java b/core/tests/coretests/src/android/widget/espresso/DragAction.java
index ce97568..b2c8e38 100644
--- a/core/tests/coretests/src/android/widget/espresso/DragAction.java
+++ b/core/tests/coretests/src/android/widget/espresso/DragAction.java
@@ -157,6 +157,59 @@
},
/**
+ * Starts a drag with a mouse triple click.
+ */
+ MOUSE_TRIPLE_CLICK {
+ private DownMotionPerformer downMotion = new DownMotionPerformer() {
+ @Override
+ @Nullable
+ public MotionEvent perform(
+ UiController uiController, float[] coordinates, float[] precision) {
+ MotionEvent downEvent = MotionEvents.sendDown(
+ uiController, coordinates, precision)
+ .down;
+ for (int i = 0; i < 2; ++i) {
+ try {
+ if (!MotionEvents.sendUp(uiController, downEvent)) {
+ String logMessage = "Injection of up event as part of the triple "
+ + "click failed. Sending cancel event.";
+ Log.d(TAG, logMessage);
+ MotionEvents.sendCancel(uiController, downEvent);
+ return null;
+ }
+
+ long doubleTapMinimumTimeout = ViewConfiguration.getDoubleTapMinTime();
+ uiController.loopMainThreadForAtLeast(doubleTapMinimumTimeout);
+ } finally {
+ downEvent.recycle();
+ }
+ downEvent = MotionEvents.sendDown(
+ uiController, coordinates, precision).down;
+ }
+ return downEvent;
+ }
+ };
+
+ @Override
+ public Status sendSwipe(
+ UiController uiController,
+ float[] startCoordinates, float[] endCoordinates, float[] precision) {
+ return sendLinearDrag(
+ uiController, downMotion, startCoordinates, endCoordinates, precision);
+ }
+
+ @Override
+ public String toString() {
+ return "mouse triple click and drag to select";
+ }
+
+ @Override
+ public UiController wrapUiController(UiController uiController) {
+ return new MouseUiController(uiController);
+ }
+ },
+
+ /**
* Starts a drag with a tap.
*/
TAP {
diff --git a/core/tests/coretests/src/android/widget/espresso/DragHandleUtils.java b/core/tests/coretests/src/android/widget/espresso/DragHandleUtils.java
new file mode 100644
index 0000000..f744cae
--- /dev/null
+++ b/core/tests/coretests/src/android/widget/espresso/DragHandleUtils.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.espresso;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
+import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
+import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+import static org.hamcrest.Matchers.allOf;
+
+import android.support.test.espresso.NoMatchingRootException;
+import android.support.test.espresso.NoMatchingViewException;
+import android.support.test.espresso.ViewInteraction;
+import android.widget.Editor;
+
+public class DragHandleUtils {
+ private DragHandleUtils() {
+
+ }
+
+ public static void assertNoSelectionHandles() {
+ try {
+ onHandleView(com.android.internal.R.id.selection_start_handle)
+ .check(matches(isDisplayed()));
+ } catch (NoMatchingRootException | NoMatchingViewException | AssertionError e) {
+ try {
+ onHandleView(com.android.internal.R.id.selection_end_handle)
+ .check(matches(isDisplayed()));
+ } catch (NoMatchingRootException | NoMatchingViewException | AssertionError e1) {
+ return;
+ }
+ }
+ throw new AssertionError("Selection handle found");
+ }
+
+ public static ViewInteraction onHandleView(int id)
+ throws NoMatchingRootException, NoMatchingViewException, AssertionError {
+ return onView(allOf(withId(id), isAssignableFrom(Editor.HandleView.class)))
+ .inRoot(withDecorView(hasDescendant(withId(id))));
+ }
+}
diff --git a/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java b/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
index de640ca..e51f2785 100644
--- a/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
+++ b/core/tests/coretests/src/android/widget/espresso/MouseClickAction.java
@@ -22,9 +22,13 @@
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.action.CoordinatesProvider;
import android.support.test.espresso.action.GeneralClickAction;
+import android.support.test.espresso.action.MotionEvents;
+import android.support.test.espresso.action.MotionEvents.DownResultHolder;
import android.support.test.espresso.action.PrecisionDescriber;
+import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Tapper;
import android.view.View;
+import android.view.ViewConfiguration;
/**
* ViewAction for performing an click on View by a mouse.
@@ -32,10 +36,58 @@
public final class MouseClickAction implements ViewAction {
private final GeneralClickAction mGeneralClickAction;
- public MouseClickAction(Tapper tapper, CoordinatesProvider coordinatesProvider,
- PrecisionDescriber precisionDescriber) {
+ public enum CLICK implements Tapper {
+ TRIPLE {
+ @Override
+ public Tapper.Status sendTap(UiController uiController, float[] coordinates,
+ float[] precision) {
+ Tapper.Status stat = sendSingleTap(uiController, coordinates, precision);
+ boolean warning = false;
+ if (stat == Tapper.Status.FAILURE) {
+ return Tapper.Status.FAILURE;
+ } else if (stat == Tapper.Status.WARNING) {
+ warning = true;
+ }
+
+ long doubleTapMinimumTimeout = ViewConfiguration.getDoubleTapMinTime();
+ for (int i = 0; i < 2; i++) {
+ if (0 < doubleTapMinimumTimeout) {
+ uiController.loopMainThreadForAtLeast(doubleTapMinimumTimeout);
+ }
+ stat = sendSingleTap(uiController, coordinates, precision);
+ if (stat == Tapper.Status.FAILURE) {
+ return Tapper.Status.FAILURE;
+ } else if (stat == Tapper.Status.WARNING) {
+ warning = true;
+ }
+ }
+
+ if (warning) {
+ return Tapper.Status.WARNING;
+ } else {
+ return Tapper.Status.SUCCESS;
+ }
+ }
+ };
+
+ private static Tapper.Status sendSingleTap(UiController uiController,
+ float[] coordinates, float[] precision) {
+ DownResultHolder res = MotionEvents.sendDown(uiController, coordinates, precision);
+ try {
+ if (!MotionEvents.sendUp(uiController, res.down)) {
+ MotionEvents.sendCancel(uiController, res.down);
+ return Tapper.Status.FAILURE;
+ }
+ } finally {
+ res.down.recycle();
+ }
+ return res.longPress ? Tapper.Status.WARNING : Tapper.Status.SUCCESS;
+ }
+ };
+
+ public MouseClickAction(Tapper tapper, CoordinatesProvider coordinatesProvider) {
mGeneralClickAction = new GeneralClickAction(tapper, coordinatesProvider,
- precisionDescriber);
+ Press.PINPOINT);
}
@Override
@@ -51,5 +103,13 @@
@Override
public void perform(UiController uiController, View view) {
mGeneralClickAction.perform(new MouseUiController(uiController), view);
+ long doubleTapTimeout = ViewConfiguration.getDoubleTapTimeout();
+ if (0 < doubleTapTimeout) {
+ // Wait to avoid false gesture detection. Without this wait, consecutive clicks can be
+ // detected as a triple click. e.g. 2 double clicks are detected as a triple click and
+ // a single click because espresso isn't aware of triple click detection logic, which
+ // is TextView specific gesture.
+ uiController.loopMainThreadForAtLeast(doubleTapTimeout);
+ }
}
}
diff --git a/core/tests/coretests/src/android/widget/espresso/TextViewActions.java b/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
index 32cc6d6..54d5823 100644
--- a/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
+++ b/core/tests/coretests/src/android/widget/espresso/TextViewActions.java
@@ -64,7 +64,7 @@
*/
public static ViewAction mouseClickOnTextAtIndex(int index) {
return actionWithAssertions(
- new MouseClickAction(Tap.SINGLE, new TextCoordinates(index), Press.PINPOINT));
+ new MouseClickAction(Tap.SINGLE, new TextCoordinates(index)));
}
/**
@@ -94,7 +94,7 @@
*/
public static ViewAction mouseDoubleClickOnTextAtIndex(int index) {
return actionWithAssertions(
- new MouseClickAction(Tap.DOUBLE, new TextCoordinates(index), Press.PINPOINT));
+ new MouseClickAction(Tap.DOUBLE, new TextCoordinates(index)));
}
/**
@@ -124,7 +124,22 @@
*/
public static ViewAction mouseLongClickOnTextAtIndex(int index) {
return actionWithAssertions(
- new MouseClickAction(Tap.LONG, new TextCoordinates(index), Press.PINPOINT));
+ new MouseClickAction(Tap.LONG, new TextCoordinates(index)));
+ }
+
+ /**
+ * Returns an action that triple-clicks by mouse on text at an index on the TextView.<br>
+ * <br>
+ * View constraints:
+ * <ul>
+ * <li>must be a TextView displayed on screen
+ * <ul>
+ *
+ * @param index The index of the TextView's text to triple-click on.
+ */
+ public static ViewAction mouseTripleClickOnTextAtIndex(int index) {
+ return actionWithAssertions(
+ new MouseClickAction(MouseClickAction.CLICK.TRIPLE, new TextCoordinates(index)));
}
/**
@@ -237,6 +252,28 @@
TextView.class));
}
+ /**
+ * Returns an action that triple click then drags by mouse on text from startIndex to endIndex
+ * on the TextView.<br>
+ * <br>
+ * View constraints:
+ * <ul>
+ * <li>must be a TextView displayed on screen
+ * <ul>
+ *
+ * @param startIndex The index of the TextView's text to start a drag from
+ * @param endIndex The index of the TextView's text to end the drag at
+ */
+ public static ViewAction mouseTripleClickAndDragOnText(int startIndex, int endIndex) {
+ return actionWithAssertions(
+ new DragAction(
+ DragAction.Drag.MOUSE_TRIPLE_CLICK,
+ new TextCoordinates(startIndex),
+ new TextCoordinates(endIndex),
+ Press.PINPOINT,
+ TextView.class));
+ }
+
public enum Handle {
SELECTION_START,
SELECTION_END,
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
index c279c8f..d133a12 100644
--- a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
@@ -1191,4 +1191,25 @@
InputMethodUtils.buildInputMethodsAndSubtypesString(map)));
}
}
+
+ @SmallTest
+ public void testConstructLocaleFromString() throws Exception {
+ assertEquals(new Locale("en"), InputMethodUtils.constructLocaleFromString("en"));
+ assertEquals(new Locale("en", "US"), InputMethodUtils.constructLocaleFromString("en_US"));
+ assertEquals(new Locale("en", "US", "POSIX"),
+ InputMethodUtils.constructLocaleFromString("en_US_POSIX"));
+
+ // Special rewrite rule for "tl" for versions of Android earlier than Lollipop that did not
+ // support three letter language codes, and used "tl" (Tagalog) as the language string for
+ // "fil" (Filipino).
+ assertEquals(new Locale("fil"), InputMethodUtils.constructLocaleFromString("tl"));
+ assertEquals(new Locale("fil", "PH"), InputMethodUtils.constructLocaleFromString("tl_PH"));
+ assertEquals(new Locale("fil", "PH", "POSIX"),
+ InputMethodUtils.constructLocaleFromString("tl_PH_POSIX"));
+
+ // So far rejecting an invalid/unexpected locale string is out of the scope of this method.
+ assertEquals(new Locale("a"), InputMethodUtils.constructLocaleFromString("a"));
+ assertEquals(new Locale("a b c"), InputMethodUtils.constructLocaleFromString("a b c"));
+ assertEquals(new Locale("en-US"), InputMethodUtils.constructLocaleFromString("en-US"));
+ }
}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
index 78e718f..edeecb2 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyAndException/Android.mk
@@ -47,9 +47,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/multidexlegacyandexception/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList)
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
index 7c699b6..7e4f0a9 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
@@ -47,9 +47,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/multidexlegacytestapp/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList)
@@ -88,9 +88,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList2): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList2): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/multidexlegacytestapp/Test.class" >> $@
$(built_dex_intermediate): $(mainDexList2)
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
index b85c02c..99bcd6c 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
@@ -37,9 +37,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
$(built_dex_intermediate): $(mainDexList)
endif
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
index 0f1d9c0..1c7d807 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
@@ -46,9 +46,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
index 67ca483..b77cf31 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
@@ -46,9 +46,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
index bf2efb1..3631626 100644
--- a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
@@ -46,9 +46,9 @@
include $(BUILD_PACKAGE)
ifndef LOCAL_JACK_ENABLED
-$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+$(mainDexList): $(full_classes_proguard_jar) | $(MAINDEXCLASSES)
$(hide) mkdir -p $(dir $@)
- $(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+ $(MAINDEXCLASSES) $< 1>$@
echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
$(built_dex_intermediate): $(mainDexList)
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index ab37519..51019cc 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -126,6 +126,7 @@
<assign-permission name="android.permission.WAKE_LOCK" uid="media" />
<assign-permission name="android.permission.UPDATE_DEVICE_STATS" uid="media" />
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="media" />
+ <assign-permission name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE" uid="media" />
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" />
diff --git a/data/fonts/fonts.xml b/data/fonts/fonts.xml
index 1b97b65..0e66374 100644
--- a/data/fonts/fonts.xml
+++ b/data/fonts/fonts.xml
@@ -344,7 +344,7 @@
<family>
<font weight="400" style="normal">NanumGothic.ttf</font>
</family>
- <family>
+ <family lang="und-Qaae">
<font weight="400" style="normal">NotoColorEmoji.ttf</font>
</family>
<family>
diff --git a/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd
index 8645858..e291e7c 100644
--- a/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/es/distribute/googleplay/quality/tv.jd
@@ -320,7 +320,7 @@
<td>
<p style="margin-bottom:.5em;">
Si la aplicación utiliza un controlador para juegos como su método de entrada principal, debe declarar el requisito
- correspondiente con la etiqueta del manifiesto <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>.
+ correspondiente con la etiqueta del manifiesto <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Obtén más información</a>)
</p>
</td>
diff --git a/docs/html-intl/intl/es/google/play/filters.jd b/docs/html-intl/intl/es/google/play/filters.jd
index d4890dc..03565b9 100644
--- a/docs/html-intl/intl/es/google/play/filters.jd
+++ b/docs/html-intl/intl/es/google/play/filters.jd
@@ -329,23 +329,23 @@
<tr><th>Elemento del manifiesto</th><th>Resumen:</th></tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a></nobr></td>
+<compatible-screens>}</a></nobr></td>
<td>
<p>Google Play filtra la aplicación si el tamaño de pantalla del dispositivo no coincide con
- ninguna de las configuraciones de pantalla (declaradas por un elemento {@code <screen>}) en el elemento {@code
-<compatible-screens>}.</p>
+ ninguna de las configuraciones de pantalla (declaradas por un elemento {@code <screen>}) en el elemento {@code
+<compatible-screens>}.</p>
<p class="caution"><strong>Advertencia:</strong> Normalmente, <strong>no deberías usar este elemento
del manifiesto</strong>. El uso de este elemento puede reducir
notablemente la base de usuarios potenciales para tu aplicación, al excluir todas las combinaciones de tamaño de pantalla
y densidad que no indicaste. En su lugar, debes usar el elemento del manifiesto <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> (descrito anteriormente en la <a href="#table1">tabla
+<supports-screens>}</a> (descrito anteriormente en la <a href="#table1">tabla
1</a>) para habilitar el modo de compatibilidad de pantalla para las configuraciones de pantalla que no abarcaste
con recursos adicionales.</p>
</td>
</tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a></nobr></td>
+<supports-gl-texture>}</a></nobr></td>
<td>
<p>Google Play filtrará la aplicación a menos que uno o más de los formatos de compresión
de texturas GL compatibles con la aplicación también sean compatibles con el dispositivo. </p>
@@ -408,16 +408,16 @@
<ul>
<li>Formatos de compresión de texturas OpenGL
<p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a>.</p>
+<supports-gl-texture>}</a>.</p>
</li>
<li>Tamaño de pantalla (y, opcionalmente, densidad de la pantalla)
<p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> o <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a>.</p>
+<supports-screens>}</a> o <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+<compatible-screens>}</a>.</p>
</li>
<li>Nivel de API
<p>Mediante el uso del elemento <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a>.</p>
+<uses-sdk>}</a>.</p>
</li>
<li>Arquitectura de CPU (ABI)
<p>Mediante la inclusión de bibliotecas nativas creadas con el <a href="{@docRoot}tools/sdk/ndk/index.html">NDK de
diff --git a/docs/html-intl/intl/es/preview/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd
index 9f68613..1f3e9bf 100644
--- a/docs/html-intl/intl/es/preview/api-overview.jd
+++ b/docs/html-intl/intl/es/preview/api-overview.jd
@@ -133,8 +133,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>En Windows, posiblemente tenga que ejecutar {@code telnet 127.0.0.1 <emulator-id>} seguido de
- {@code finger touch <finger_id>}.
+<p>En Windows, posiblemente tenga que ejecutar {@code telnet 127.0.0.1 <emulator-id>} seguido de
+ {@code finger touch <finger_id>}.
</p>
</li>
</ol>
@@ -192,7 +192,7 @@
</pre>
<p>Para cada actividad que desee exponer a {@code ChooserTargetService}, agregue un elemento
-{@code <meta-data>} con el nombre
+{@code <meta-data>} con el nombre
{@code "android.service.chooser.chooser_target_service"} en el manifiesto de su aplicación.
</p>
diff --git a/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd
index 4c64184f..4c0e478 100644
--- a/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/ja/distribute/googleplay/quality/tv.jd
@@ -286,7 +286,7 @@
</td>
<td>
<p style="margin-bottom:.5em;">
- アプリがその主要な入力方式としてゲーム コントローラを使用する場合、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> マニフェスト タグで適切な要件を宣言しています。(<a href="{@docRoot}training/tv/games/index.html#gamepad">こちらを参照してください</a>)
+ アプリがその主要な入力方式としてゲーム コントローラを使用する場合、<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> マニフェスト タグで適切な要件を宣言しています。(<a href="{@docRoot}training/tv/games/index.html#gamepad">こちらを参照してください</a>)
</p>
</td>
</tr>
diff --git a/docs/html-intl/intl/ja/google/play/filters.jd b/docs/html-intl/intl/ja/google/play/filters.jd
index a1b9ec0..5ab6336 100644
--- a/docs/html-intl/intl/ja/google/play/filters.jd
+++ b/docs/html-intl/intl/ja/google/play/filters.jd
@@ -208,14 +208,14 @@
<table>
<tr><th>マニフェスト要素</th><th>概要</th></tr>
<tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a></nobr></td>
+ <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a></nobr></td>
<td>
- <p>Google Play はデバイス画面サイズと密度が {@code <compatible-screens>} の要素の画面設定({@code <screen>} 要素で宣言)のいずれにも適合しない場合、アプリをフィルタリングします。</p>
- <p class="caution"><strong>警告:</strong> 通常は、<strong>このマニフェスト要素を使用すべきではありません</strong>。この要素を使用すると、指定していない画面サイズと密度のすべての組み合わせが除外されることになり、アプリの潜在的なユーザー ベースが大幅に減少する可能性があります。代わりに <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> マニフェスト要素(<a href="#table1">表 1</a> に記載)を使用して、考慮に入れていない画面設定に対して、代替リソースを使用した画面の互換性モードを有効にすることをお勧めします。</p>
+ <p>Google Play はデバイス画面サイズと密度が {@code <compatible-screens>} の要素の画面設定({@code <screen>} 要素で宣言)のいずれにも適合しない場合、アプリをフィルタリングします。</p>
+ <p class="caution"><strong>警告:</strong> 通常は、<strong>このマニフェスト要素を使用すべきではありません</strong>。この要素を使用すると、指定していない画面サイズと密度のすべての組み合わせが除外されることになり、アプリの潜在的なユーザー ベースが大幅に減少する可能性があります。代わりに <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> マニフェスト要素(<a href="#table1">表 1</a> に記載)を使用して、考慮に入れていない画面設定に対して、代替リソースを使用した画面の互換性モードを有効にすることをお勧めします。</p>
</td>
</tr>
<tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a></nobr></td>
+ <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a></nobr></td>
<td>
<p>Google Play はアプリでサポートされる 1 つ以上の GL テクスチャ圧縮フォーマットがデバイスで同様にサポートされない場合、アプリをフィルタリングします。 </p>
</td>
@@ -249,11 +249,11 @@
<p>現時点では、Google Play では各 APK が次の設定に基づいて別々のフィルタを提供する際にのみ、同じアプリの複数の APK を公開できます。</p>
<ul>
- <li>OpenGL テクスチャ圧縮フォーマット <p><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a> 要素の使用による。</p>
+ <li>OpenGL テクスチャ圧縮フォーマット <p><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a> 要素の使用による。</p>
</li>
- <li>画面サイズ(画面密度も指定可能) <p><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a>要素または<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a> 要素の使用による。</p>
+ <li>画面サイズ(画面密度も指定可能) <p><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a>要素または<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a> 要素の使用による。</p>
</li>
- <li>API レベル <p><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> 要素の使用による。</p>
+ <li>API レベル <p><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> 要素の使用による。</p>
</li>
<li>CPU アーキテクチャ(ABI) <p>特定の CPU アーキテクチャ(ARM EABI v7 または x86 など)を対象とする<a href="{@docRoot}tools/sdk/ndk/index.html"> Android NDK</a> で構築されたネイティブ ライブラリの組み込みによる。</p>
</li>
diff --git a/docs/html-intl/intl/ja/guide/topics/fundamentals.jd b/docs/html-intl/intl/ja/guide/topics/fundamentals.jd
index cf9f7dd..d76c92e 100644
--- a/docs/html-intl/intl/ja/guide/topics/fundamentals.jd
+++ b/docs/html-intl/intl/ja/guide/topics/fundamentals.jd
@@ -329,7 +329,7 @@
<p style="margin-left: 2em">{@code FLAG_ACTIVITY_NEW_TASK} <br/>{@code FLAG_ACTIVITY_CLEAR_TOP} <br/>{@code FLAG_ACTIVITY_RESET_TASK_IF_NEEDED} <br/>{@code FLAG_ACTIVITY_SINGLE_TOP}</p>
<p>
-また、主に使用する {@code <activity>} 属性は以下のとおりです:
+また、主に使用する {@code <activity>} 属性は以下のとおりです:
<p style="margin-left: 2em">{@code taskAffinity} <br/>{@code launchMode} <br/>{@code allowTaskReparenting} <br/>{@code clearTaskOnLaunch} <br/>{@code alwaysRetainTaskState} <br/>{@code finishOnTaskLaunch}</p>
@@ -341,7 +341,7 @@
<h3 id="afftask">親和性と新しいタスク</h3>
<p>
-デフォルトでは、アプリケーション内のすべてのアクティビティは相互に親和性があり、すべてのアクティビティができる限り同じタスクに属そうとします。<i></i>ただし、{@code <activity>} 要素の {@code taskAffinity} 属性を使用して、アクティビティごとに個別の親和性を設定することもできます。つまり、別々のアプリケーションで定義されているアクティビティで親和性を共有したり、同じアプリケーションで定義されているアクティビティに別々の親和性を割り当てたりできるということです。親和性が作用する状況は 2 つあります。1 つはアクティビティを起動する Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、もう 1 つはアクティビティの {@code allowTaskReparenting} 属性が "{@code true}" に設定されている場合です。
+デフォルトでは、アプリケーション内のすべてのアクティビティは相互に親和性があり、すべてのアクティビティができる限り同じタスクに属そうとします。<i></i>ただし、{@code <activity>} 要素の {@code taskAffinity} 属性を使用して、アクティビティごとに個別の親和性を設定することもできます。つまり、別々のアプリケーションで定義されているアクティビティで親和性を共有したり、同じアプリケーションで定義されているアクティビティに別々の親和性を割り当てたりできるということです。親和性が作用する状況は 2 つあります。1 つはアクティビティを起動する Intent オブジェクトに {@code FLAG_ACTIVITY_NEW_TASK} フラグが含まれている場合、もう 1 つはアクティビティの {@code allowTaskReparenting} 属性が "{@code true}" に設定されている場合です。
</p>
<dl>
@@ -361,7 +361,7 @@
<h3 id="lmodes">起動モード</h3>
<p>
-<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code> 属性の {@code <activity>} 要素には、以下の 4 種類の起動モードを割り当てることができます:
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code> 属性の {@code <activity>} 要素には、以下の 4 種類の起動モードを割り当てることができます:
</p>
<p style="margin-left: 2em">"{@code standard}"(デフォルト モード)<br>"{@code singleTop}"<br>"{@code singleTask}"<br>"{@code singleInstance}"</p>
@@ -470,7 +470,7 @@
</p>
<p>
-ユーザーがアクティビティに戻ることができるようにしない場合は、{@code <activity>} 要素の {@code finishOnTaskLaunch} を "{@code true}" に設定します。詳しくは、<a href="#clearstack">スタックのクリア</a>をご覧ください。
+ユーザーがアクティビティに戻ることができるようにしない場合は、{@code <activity>} 要素の {@code finishOnTaskLaunch} を "{@code true}" に設定します。詳しくは、<a href="#clearstack">スタックのクリア</a>をご覧ください。
</p>
@@ -488,7 +488,7 @@
<h3 id="procs">プロセス</h3>
<p>
-コンポーネントを実行するプロセスは、マニフェスト ファイルで管理します。コンポーネントの各要素({@code <activity>}、{@code <service>}、{@code <receiver>}、および {@code <provider>})には {@code process} 属性があり、そのコンポーネントをどのプロセスで実行すべきかを指定できるようになっています。これらの属性の設定によって、それぞれのコンポーネントを専用のプロセスで実行したり、一部のコンポーネントだけでプロセスを共有したりできます。また、別々のアプリケーションのコンポーネントが、同じプロセスで実行されるように設定することもできます。この場合は、それらのアプリケーションが同じ Linux ユーザー ID を共有し、同じ認証機関によって署名されている必要があります。{@code <application>} 要素にも {@code process} 属性があり、すべてのコンポーネントに適用されるデフォルト値を設定できます。
+コンポーネントを実行するプロセスは、マニフェスト ファイルで管理します。コンポーネントの各要素({@code <activity>}、{@code <service>}、{@code <receiver>}、および {@code <provider>})には {@code process} 属性があり、そのコンポーネントをどのプロセスで実行すべきかを指定できるようになっています。これらの属性の設定によって、それぞれのコンポーネントを専用のプロセスで実行したり、一部のコンポーネントだけでプロセスを共有したりできます。また、別々のアプリケーションのコンポーネントが、同じプロセスで実行されるように設定することもできます。この場合は、それらのアプリケーションが同じ Linux ユーザー ID を共有し、同じ認証機関によって署名されている必要があります。{@code <application>} 要素にも {@code process} 属性があり、すべてのコンポーネントに適用されるデフォルト値を設定できます。
</p>
<p>
diff --git a/docs/html-intl/intl/ja/preview/api-overview.jd b/docs/html-intl/intl/ja/preview/api-overview.jd
index 2c0816b..33cabc3 100644
--- a/docs/html-intl/intl/ja/preview/api-overview.jd
+++ b/docs/html-intl/intl/ja/preview/api-overview.jd
@@ -133,8 +133,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>Windows では、{@code telnet 127.0.0.1 <emulator-id>}、
-{@code finger touch <finger_id>} の順に実行する必要がある場合があります。
+<p>Windows では、{@code telnet 127.0.0.1 <emulator-id>}、
+{@code finger touch <finger_id>} の順に実行する必要がある場合があります。
</p>
</li>
</ol>
@@ -192,7 +192,7 @@
</pre>
<p>{@code ChooserTargetService} に公開するアクティビティごとに、 {@code "android.service.chooser.chooser_target_service"} という名前の
-{@code <meta-data>} 要素をアプリのマニフェストに追加します。
+{@code <meta-data>} 要素をアプリのマニフェストに追加します。
</p>
diff --git a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd
index 7c865a9..124c323 100644
--- a/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/ja/training/basics/activity-lifecycle/starting.jd
@@ -150,7 +150,7 @@
<p>アプリのメインのアクティビティは、{@link
android.content.Intent#ACTION_MAIN MAIN} アクションと {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} カテゴリを含む <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> を使用してマニフェストで宣言する必要があります。
+<intent-filter>}</a> を使用してマニフェストで宣言する必要があります。
次に例を示します。</p>
<pre>
diff --git a/docs/html-intl/intl/ja/training/basics/intents/filters.jd b/docs/html-intl/intl/ja/training/basics/intents/filters.jd
index 5f0d69a..1bcb266 100644
--- a/docs/html-intl/intl/ja/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/ja/training/basics/intents/filters.jd
@@ -31,7 +31,7 @@
</p>
-<p>他のアプリからアクティビティを開始できるようにするには、対応する <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>要素のマニフェスト ファイルに <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 要素を追加する必要があります。
+<p>他のアプリからアクティビティを開始できるようにするには、対応する <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>要素のマニフェスト ファイルに <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 要素を追加する必要があります。
</p>
<p>アプリが端末にインストールされている場合、システムはインテント フィルタを識別し、インストールされているすべてのアプリでサポートされるインテントの内部カタログに情報を追加します。アプリが暗黙的インテントを使って {@link android.app.Activity#startActivity
@@ -56,13 +56,13 @@
<dt>アクション</dt>
<dd>実行するアクション名を表す文字列。通常、
{@link android.content.Intent#ACTION_SEND} や {@link android.content.Intent#ACTION_VIEW} などのプラットフォームに定義された値のいずれか。
- <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 要素を使用してインテント フィルタでこれを指定します。この要素で指定した値は、API 定数ではなく、アクションの完全な文字列名(下記の例を参照)である必要があります。
+ <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 要素を使用してインテント フィルタでこれを指定します。この要素で指定した値は、API 定数ではなく、アクションの完全な文字列名(下記の例を参照)である必要があります。
</p></dd>
<dt>データ</dt>
<dd>インテントに関連するデータの詳細。
- <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 要素を使用して、インテント フィルタでこれを指定します。この要素で 1 つ以上の属性を
+ <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 要素を使用して、インテント フィルタでこれを指定します。この要素で 1 つ以上の属性を
使用して、MIME タイプのみ、URI 接頭辞のみ、URI スキームのみ、またはこれらと受け入れられるデータ タイプを示すその他の項目の組み合わせを指定することができます。
</p>
@@ -76,11 +76,11 @@
システムでサポートされているいくつかの異なるカテゴリがありますが、大抵のカテゴリはほとんど使用されません。
しかし、すべての暗黙的インテントは、デフォルトでは
{@link android.content.Intent#CATEGORY_DEFAULT} を使用して定義されています。
- <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
+ <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
要素を使用して、インテント フィルタでこれを指定します。</p></dd>
</dl>
-<p>インテント フィルタでは、それぞれの基準を<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 要素内でネストした対応する XML 要素を使用して宣言することによって、アクティビティが受け入れる基準を宣言することができます。
+<p>インテント フィルタでは、それぞれの基準を<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 要素内でネストした対応する XML 要素を使用して宣言することによって、アクティビティが受け入れる基準を宣言することができます。
</p>
@@ -100,10 +100,10 @@
<p>受信するインテントはそれぞれ 1 つのアクションと 1 つのデータ タイプのみを指定しますが、各
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> 内で <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a>、<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> 要素の複数のインスタンスを宣言することもできます。
+<intent-filter>}</a> 内で <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a>、<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> 要素の複数のインスタンスを宣言することもできます。
</p>
<p>アクションとデータのいずれか 2 つのペアが、各自の動作において相互に排他的である場合は、別のインテント フィルタを作成して、どのデータ タイプと組み合わされたときにとのアクションが受け入れられるかを指定する必要があります。
diff --git a/docs/html-intl/intl/ja/training/tv/start/start.jd b/docs/html-intl/intl/ja/training/tv/start/start.jd
index bc99ff9..3678df9 100755
--- a/docs/html-intl/intl/ja/training/tv/start/start.jd
+++ b/docs/html-intl/intl/ja/training/tv/start/start.jd
@@ -156,7 +156,7 @@
<h2 id="tv-libraries">TV サポート ライブラリを追加する</h3>
<p>
- Android SDK には、TV アプリ向けのサポート ライブラリが用意されています。これらのライブラリでは、TV 端末向けに使用できる API とユーザー インターフェース ウィジェットを提供しています。同ライブラリは {@code <sdk>/extras/android/support/} ディレクトリにあります。ライブラリとその全般的な用途の一覧を次に示します。
+ Android SDK には、TV アプリ向けのサポート ライブラリが用意されています。これらのライブラリでは、TV 端末向けに使用できる API とユーザー インターフェース ウィジェットを提供しています。同ライブラリは {@code <sdk>/extras/android/support/} ディレクトリにあります。ライブラリとその全般的な用途の一覧を次に示します。
</p>
<ul>
diff --git a/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd
index 83d71e9..721d63a 100644
--- a/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/ko/distribute/googleplay/quality/tv.jd
@@ -319,7 +319,7 @@
</td>
<td>
<p style="margin-bottom:.5em;">
- 앱이 게임 컨트롤러를 기본 입력 방법으로 사용하는 경우 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> 매니페스트 태그로 적합한 요구사항을 선언합니다.
+ 앱이 게임 컨트롤러를 기본 입력 방법으로 사용하는 경우 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> 매니페스트 태그로 적합한 요구사항을 선언합니다.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">방법 알아보기</a>)
</p>
diff --git a/docs/html-intl/intl/ko/google/play/filters.jd b/docs/html-intl/intl/ko/google/play/filters.jd
index c1f73c7..42b1c77 100644
--- a/docs/html-intl/intl/ko/google/play/filters.jd
+++ b/docs/html-intl/intl/ko/google/play/filters.jd
@@ -329,23 +329,23 @@
<tr><th>매니페스트 요소</th><th>요약</th></tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a></nobr></td>
+<compatible-screens>}</a></nobr></td>
<td>
<p>Google Play가 장치 화면
크기와 밀도가 {@code
-<compatible-screens>} 요소에서 {@code <screen>} 요소가 선언한 화면 구성과 일치하지 않는 경우에 애플리케이션을 필터링합니다.</p>
+<compatible-screens>} 요소에서 {@code <screen>} 요소가 선언한 화면 구성과 일치하지 않는 경우에 애플리케이션을 필터링합니다.</p>
<p class="caution"><strong>주의:</strong> 일반적으로 <strong>이 매니페스트 요소를 사용하면 안 됩니다</strong>.
이 요소를 사용하면 목록에 없는 화면 크기와 밀도의 조합을 모두 제외시켜 애플리케이션의 잠재적 사용자 기반이 현저히 줄어들 수 있습니다.
대신 위의 <a href="#table1">표 1</a>에 나오는 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> 매니페스트 요소를 사용하여 대체 리소스로 고려하지 않은 화면 구성에 대해 화면 호환성 모드를 활성화해야 합니다.
+<supports-screens>}</a> 매니페스트 요소를 사용하여 대체 리소스로 고려하지 않은 화면 구성에 대해 화면 호환성 모드를 활성화해야 합니다.
</p>
</td>
</tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a></nobr></td>
+<supports-gl-texture>}</a></nobr></td>
<td>
<p>Google Play는 애플리케이션에서 지원되는 하나 이상의 GL 텍스처 압축 형식이 장치에서도 지원되는 경우를 제외하고 애플리케이션을 필터링합니다.
</p>
@@ -408,16 +408,16 @@
<ul>
<li>OpenGL 텍스처 압축 형식
<p><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a> 요소를 사용하여 필터링합니다.</p>
+<supports-gl-texture>}</a> 요소를 사용하여 필터링합니다.</p>
</li>
<li>화면 크기(및 선택적 화면 밀도)
<p><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> 또는 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> 요소를 사용하여 필터링합니다.</p>
+<supports-screens>}</a> 또는 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+<compatible-screens>}</a> 요소를 사용하여 필터링합니다.</p>
</li>
<li>API 레벨
<p><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> 요소를 사용하여 필터링합니다.</p>
+<uses-sdk>}</a> 요소를 사용하여 필터링합니다.</p>
</li>
<li>CPU 아키텍처(ABI)
<p>특정 CPU 아키텍처(예: ARM EABI v7 또는 x86)를 대상으로 하는 <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>로 작성된 네이티브 라이브러리를 포함하여 필터링합니다.
diff --git a/docs/html-intl/intl/ko/preview/api-overview.jd b/docs/html-intl/intl/ko/preview/api-overview.jd
index aac9a44..f9308b1 100644
--- a/docs/html-intl/intl/ko/preview/api-overview.jd
+++ b/docs/html-intl/intl/ko/preview/api-overview.jd
@@ -133,7 +133,7 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>Windows에서는 {@code telnet 127.0.0.1 <emulator-id>}에 뒤이어 {@code finger touch <finger_id>}를 실행해야 할 수도 있습니다.
+<p>Windows에서는 {@code telnet 127.0.0.1 <emulator-id>}에 뒤이어 {@code finger touch <finger_id>}를 실행해야 할 수도 있습니다.
</p>
</li>
@@ -191,7 +191,7 @@
</service>
</pre>
-<p>{@code ChooserTargetService}에 노출하고자 하는 액티비티마다 {@code <meta-data>} 요소를 하나씩 추가하고, 앱 매니페스트에 {@code "android.service.chooser.chooser_target_service"} 이름을 추가합니다.
+<p>{@code ChooserTargetService}에 노출하고자 하는 액티비티마다 {@code <meta-data>} 요소를 하나씩 추가하고, 앱 매니페스트에 {@code "android.service.chooser.chooser_target_service"} 이름을 추가합니다.
</p>
diff --git a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd
index 71ecf06..ef13487 100644
--- a/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/ko/training/basics/activity-lifecycle/starting.jd
@@ -150,7 +150,7 @@
<p>앱의 메인 액티비티는 {@link
android.content.Intent#ACTION_MAIN MAIN} 작업 및{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 카테고리를 포함하는 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>와 함께
+<intent-filter>}</a>와 함께
매니페스트 파일에 선언되어야 합니다. 예를 들면 다음과 같습니다.</p>
<pre>
diff --git a/docs/html-intl/intl/ko/training/basics/intents/filters.jd b/docs/html-intl/intl/ko/training/basics/intents/filters.jd
index 265534c..251d262 100644
--- a/docs/html-intl/intl/ko/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/ko/training/basics/intents/filters.jd
@@ -31,8 +31,8 @@
"공유" 작업을 시작하고 이 작업을 수행하기 위해 여러분 자신의 앱을 시작할 수 있도록
{@link android.content.Intent#ACTION_SEND} 인텐트를 지원하는 것이 좋습니다.</p>
-<p>다른 앱이 자신의 액티비티를 시작할 수 있도록 하기 위해서는 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
-요소에 상응하는 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 요소를 매니페스트 파일에 추가해야 합니다.</p>
+<p>다른 앱이 자신의 액티비티를 시작할 수 있도록 하기 위해서는 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+요소에 상응하는 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 요소를 매니페스트 파일에 추가해야 합니다.</p>
<p>앱이 기기에 설치되면 시스템이 인텐트
필터를 식별한 후 설치된 모든 앱에서 지원되는 인텐트의 내부 카탈로그에 해당 정보를 추가합니다.
@@ -56,13 +56,13 @@
<dt>작업</dt>
<dd>수행할 작업의 이름을 지정하는 문자열입니다. 일반적으로, 플랫폼에서 정의하는 값 중
하나입니다(예: {@link android.content.Intent#ACTION_SEND} 또는 {@link android.content.Intent#ACTION_VIEW}).
- <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 요소를 사용하여 인텐트 필터에 지정합니다.
+ <p><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 요소를 사용하여 인텐트 필터에 지정합니다.
이 요소에 지정하는 값은 API 상수 대신
작업의 전체 문자열 이름이어야 합니다(다음 예제 참조).</p></dd>
<dt>데이터</dt>
<dd>인텐트와 관련된 데이터에 대한 설명입니다.
- <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 요소를 사용하여 인텐트 필터에 지정합니다. 이 요소에서
+ <p><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 요소를 사용하여 인텐트 필터에 지정합니다. 이 요소에서
하나 이상의 특성을 사용하여 MIME 유형, URI 접두사, URI 스키마, 또는
이들의 조합 그리고 수락된 데이터 유형을 나타내는 다른 요소들을 지정할 수
있습니다.</p>
@@ -76,12 +76,12 @@
관련되어 있습니다. 시스템이 지원하는 카테고리는
여러 가지가 있지만 대부분은 거의 사용되지 않습니다. 하지만 모든 암묵적인 인텐트는 기본적으로
{@link android.content.Intent#CATEGORY_DEFAULT}로 정의됩니다.
- <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 요소를 사용하여 인텐트 필터에
+ <p><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 요소를 사용하여 인텐트 필터에
지정합니다.</p></dd>
</dl>
<p>인텐트 필터에서 액티비티가 허용하는 기준을 선언할 수 있습니다.
-이는 이러한 기준 각각을 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 요소 내에 해당 XML 요소를 중첩하여 선언하면
+이는 이러한 기준 각각을 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 요소 내에 해당 XML 요소를 중첩하여 선언하면
가능합니다.</p>
<p>예를 들어, 다음은 데이터 유형이 텍스트 또는 이미지인 경우 {@link
@@ -100,10 +100,10 @@
<p>수신되는 인텐트는 각각 하나의 작업 및 하나의 데이터 유형만 지정합니다. 하지만
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> 각각에 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> 및 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a>에 대한 여러
+<intent-filter>}</a> 각각에 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> 및 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a>에 대한 여러
인스턴스를 선언해도 문제가 되지는 않습니다.</p>
<p>작업 및 데이터의 두 쌍이 상호 배타적으로
diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd
index 33e8c1f..139fb33 100644
--- a/docs/html-intl/intl/pt-br/preview/api-overview.jd
+++ b/docs/html-intl/intl/pt-br/preview/api-overview.jd
@@ -133,8 +133,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 <emulator-id>} seguido de
-{@code finger touch <finger_id>}.
+<p>No Windows, talvez seja necessário executar {@code telnet 127.0.0.1 <emulator-id>} seguido de
+{@code finger touch <finger_id>}.
</p>
</li>
</ol>
@@ -192,7 +192,7 @@
</pre>
<p>Para cada atividade que quiser expor ao {@code ChooserTargetService}, adicione um elemento
-{@code <meta-data>} com o nome
+{@code <meta-data>} com o nome
{@code "android.service.chooser.chooser_target_service"} no manifesto do aplicativo.
</p>
diff --git a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd
index 1f8f080..efe2bad 100644
--- a/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/pt-br/training/basics/activity-lifecycle/starting.jd
@@ -149,7 +149,7 @@
na raiz do diretório do seu projeto.</p>
<p>A principal atividade do aplicativo deve ser declarada no manifesto com um <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> que inclui a ação {@link
+<intent-filter>}</a> que inclui a ação {@link
android.content.Intent#ACTION_MAIN MAIN} e categoria
{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Por exemplo:</p>
diff --git a/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd
index 73f0b84..f3b3b12 100644
--- a/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/pt-br/training/basics/intents/filters.jd
@@ -31,8 +31,8 @@
que ele possa responder à intenção {@link android.content.Intent#ACTION_SEND} para que os usuários consigam iniciar uma
ação de “compartilhar” por outro aplicativo e iniciar seu aplicativo para executar a ação.</p>
-<p>Para permitir que outros aplicativos iniciem sua atividade, adicione um elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
-em seu arquivo de manifesto para o elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> correspondente.</p>
+<p>Para permitir que outros aplicativos iniciem sua atividade, adicione um elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+em seu arquivo de manifesto para o elemento <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> correspondente.</p>
<p>Quando seu aplicativo é instalado em um dispositivo, o sistema identifica seu filtro de
intenções e adiciona a informação a um catálogo interno de intenções suportado por todos os aplicativos instalados.
@@ -56,13 +56,13 @@
<dt>Ação</dt>
<dd>Uma cadeia de caracteres que dá nome a ação a ser executada. Geralmente, um dos valores definidos para a plataforma
como {@link android.content.Intent#ACTION_SEND} ou {@link android.content.Intent#ACTION_VIEW}.
- <p>Especifique-o em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>.
+ <p>Especifique-o em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>.
O valor especificado neste elemento deve ser o nome completo da cadeia de caracteres para a ação e não a
API constante (veja exemplos abaixo).</p></dd>
<dt>Dados</dt>
<dd>A descrição dos dados associados à intenção.
- <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>. Através de um
+ <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>. Através de um
ou mais atributos neste elemento, você pode especificar apenas o tipo MIME, apenas um prefixo de URI,
apenas um esquema de URI ou uma combinação destes e outros elementos que indicam o tipo de dados
aceito.</p>
@@ -76,12 +76,12 @@
ao gesto do usuário ou localização onde foi iniciada. Há diferentes categorias
compatíveis com o sistema, mas a maioria raramente é utilizada. No entanto, todas as intenções implícitas são definidas com
{@link android.content.Intent#CATEGORY_DEFAULT} por padrão.
- <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
+ <p>Especifique-a em seu filtro de intenções com o elemento <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
.</p></dd>
</dl>
<p>Em seu filtro de intenções, declare quais critérios serão aceitos por sua atividade
-informando cada um deles com elementos XML correspondentes aninhados no elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+informando cada um deles com elementos XML correspondentes aninhados no elemento <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
.</p>
<p>Este é um exemplo de atividade com filtro de intenções que responde à intenção {@link
@@ -100,11 +100,11 @@
<p>Cada intenção em entrada especifica apenas uma ação e um tipo de dado, mas pode-se declarar
múltiplas instâncias dos elementos <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> e <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> em cada
+<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> e <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> em cada
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>.</p>
+<intent-filter>}</a>.</p>
<p>Se dois pares de ação e dados fores mutuamente exclusivos em
seus comportamentos, crie filtros de intenções separados para especificar quais ações são aceitáveis
diff --git a/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd
index 995f2e5..e478f9a 100644
--- a/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/ru/distribute/googleplay/quality/tv.jd
@@ -320,7 +320,7 @@
<td>
<p style="margin-bottom:.5em;">
Если приложение использует игровой контроллер в качестве основного устройства ввода,
- это требование должно быть задекларировано в теге манифеста <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>.
+ это требование должно быть задекларировано в теге манифеста <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">См. как это сделать</a>)
</p>
</td>
diff --git a/docs/html-intl/intl/ru/google/play/filters.jd b/docs/html-intl/intl/ru/google/play/filters.jd
index f9af767..0059a1a 100644
--- a/docs/html-intl/intl/ru/google/play/filters.jd
+++ b/docs/html-intl/intl/ru/google/play/filters.jd
@@ -329,23 +329,23 @@
<tr><th>Элемент манифеста</th><th>Сводная информация</th></tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a></nobr></td>
+<compatible-screens>}</a></nobr></td>
<td>
<p>Google Play отфильтровывает приложение, если размер и разрешение экрана устройства
-не соответствуют какой-либо конфигурации экрана(декларируемые элементом {@code <screen>}) в элементе {@code
-<compatible-screens>}.</p>
+не соответствуют какой-либо конфигурации экрана(декларируемые элементом {@code <screen>}) в элементе {@code
+<compatible-screens>}.</p>
<p class="caution"><strong>Внимание!</strong> В обычной практике <strong>вы не должны использовать
этот элемент манифеста</strong>. Применение этого элемента существенно
сокращает число потенциальных пользователей вашего приложения, исключая все комбинации размеров
и разрешения экрана, которые не указаны в списке. Вместо этого используйте элемент манифеста <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> (описанный выше в <a href="#table1">
+<supports-screens>}</a> (описанный выше в <a href="#table1">
таблице 1</a>), чтобы определить режим совместимости для неучтенных альтернативными ресурсами
конфигураций экранов.</p>
</td>
</tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a></nobr></td>
+<supports-gl-texture>}</a></nobr></td>
<td>
<p>Google Play будет отфильтровывать приложение, если не окажется ни одного формата
сжатия GL-текстуры, поддерживаемого устройством. </p>
@@ -408,16 +408,16 @@
<ul>
<li>Форматы сжатия текстур OpenGL
<p>Используя элемент <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a>.</p>
+<supports-gl-texture>}</a>.</p>
</li>
<li>Размер экрана (а в некоторых случаях и разрешение)
<p>Используя элемент <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> или <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a>.</p>
+<supports-screens>}</a> или <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+<compatible-screens>}</a>.</p>
</li>
<li>Уровень API-интерфейса
<p>Используя элемент <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a>.</p>
+<uses-sdk>}</a>.</p>
</li>
<li>Архитектура процессора (ABI)
<p>Включая специфичные библиотеки, созданные на основе <a href="{@docRoot}tools/sdk/ndk/index.html">Android
diff --git a/docs/html-intl/intl/ru/preview/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd
index ae30e09..aa4a057 100644
--- a/docs/html-intl/intl/ru/preview/api-overview.jd
+++ b/docs/html-intl/intl/ru/preview/api-overview.jd
@@ -133,8 +133,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 <emulator-id>}, а затем
-{@code finger touch <finger_id>}.
+<p>В Windows, возможно, потребуется выполнить команду {@code telnet 127.0.0.1 <emulator-id>}, а затем
+{@code finger touch <finger_id>}.
</p>
</li>
</ol>
@@ -192,7 +192,7 @@
</pre>
<p>Для каждого действия, которое необходимо сделать доступным для {@code ChooserTargetService}, добавьте в манифест вашего приложения элемент
-{@code <meta-data>} с именем
+{@code <meta-data>} с именем
{@code "android.service.chooser.chooser_target_service"}.
</p>
diff --git a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd
index 3a946e2..ef8be5b 100644
--- a/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/ru/training/basics/activity-lifecycle/starting.jd
@@ -149,7 +149,7 @@
который находится в корневом каталоге вашего проекта.</p>
<p>Основная операция приложения должна декларироваться в манифесте с помощью фильтра <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>, включающего действие {@link
+<intent-filter>}</a>, включающего действие {@link
android.content.Intent#ACTION_MAIN MAIN} и категорию
{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER}. Например:</p>
diff --git a/docs/html-intl/intl/ru/training/basics/intents/filters.jd b/docs/html-intl/intl/ru/training/basics/intents/filters.jd
index 0f5bb31..c3cbfc9 100644
--- a/docs/html-intl/intl/ru/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/ru/training/basics/intents/filters.jd
@@ -31,8 +31,8 @@
будет поддерживать объекты Intent (намерения) {@link android.content.Intent#ACTION_SEND}, чтобы пользователи могли
поделиться контентом из другого приложения и запускать ваше приложение для выполнения требуемого действия.</p>
-<p>Чтобы разрешить другим приложениям запускать ваши операции, вам нужно добавить в ваш файл манифеста элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
- для соответствующего элемента <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p>
+<p>Чтобы разрешить другим приложениям запускать ваши операции, вам нужно добавить в ваш файл манифеста элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+ для соответствующего элемента <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p>
<p>Если ваше приложение установлено на устройстве, система идентифицирует ваши
фильтры Intent и добавляет информацию во внутренний каталог намерений, поддерживаемый всеми установленными приложениями.
@@ -56,13 +56,13 @@
<dt>Действие</dt>
<dd>Строка, называющая действие, которое необходимо выполнить. Обычно это одно из определяемых платформой значений,
например, {@link android.content.Intent#ACTION_SEND} или {@link android.content.Intent#ACTION_VIEW}.
- <p>Это следует указать в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>.
+ <p>Это следует указать в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>.
Указанное в этом элементе значение должно представлять собой полное имя строки действия, а не
постоянное значение API-интерфейса (см. примеры ниже).</p></dd>
<dt>Данные</dt>
<dd>Описание данных, связанных с объектом Intent.
- <p>Указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>. Используя один
+ <p>Указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>. Используя один
или несколько атрибутов в этом элементе, вы можете указать только тип MIME, только префикс URI,
только схему URI или из сочетание, а также другие индикаторы типа
принимаемых данных.</p>
@@ -76,12 +76,12 @@
с жестом пользователя или местом запуска. Система поддерживает несколько разных категорий,
но большинство из них используется редко. Однако по умолчанию все неявные объекты Intent определяются с
{@link android.content.Intent#CATEGORY_DEFAULT}.
- <p>Это указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
+ <p>Это указывается в фильтре Intent с элементом <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
.</p></dd>
</dl>
<p>В своем фильтре Intent вы можете декларировать критерии, принимаемые вашей операцией.
-Для этого нужно декларировать каждый из них с соответствующими элементами XML, вложенными в элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+Для этого нужно декларировать каждый из них с соответствующими элементами XML, вложенными в элемент <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
.</p>
<p>Рассмотрим в качестве примера операцию с фильтром Intent, обрабатывающим объект {@link
@@ -100,11 +100,11 @@
<p>Каждый входящий объект Intent указывает только одно действие и только один тип данных, однако допускается декларирование нескольких
экземпляров элементов <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> и <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> в каждом
+<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> и <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> в каждом
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>.</p>
+<intent-filter>}</a>.</p>
<p>Если поведение любых двух пар действий и данных является взаимоисключающим,
необходимо создать отдельные фильтры Intent с указанием допустимых действий
diff --git a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd
index 5eea293..6a60945 100644
--- a/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/zh-cn/distribute/googleplay/quality/tv.jd
@@ -320,7 +320,7 @@
<td>
<p style="margin-bottom:.5em;">
如果应用使用游戏手柄作为主要输入方法,则要通过
-<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>清单文件标记来声明相应的要求。
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>清单文件标记来声明相应的要求。
(<a href="{@docRoot}training/tv/games/index.html#gamepad">了解方法</a>)
</p>
</td>
diff --git a/docs/html-intl/intl/zh-cn/google/play/filters.jd b/docs/html-intl/intl/zh-cn/google/play/filters.jd
index 70f8d9b..9d68faf 100644
--- a/docs/html-intl/intl/zh-cn/google/play/filters.jd
+++ b/docs/html-intl/intl/zh-cn/google/play/filters.jd
@@ -329,23 +329,23 @@
<tr><th>清单文件元素</th><th>摘要</th></tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a></nobr></td>
+<compatible-screens>}</a></nobr></td>
<td>
<p>如果设备屏幕尺寸和密度不符合
{@code
-<compatible-screens>} 元素中的任何屏幕配置(由{@code <screen>} 元素声明),则 Google Play 会将该应用筛选掉。</p>
+<compatible-screens>} 元素中的任何屏幕配置(由{@code <screen>} 元素声明),则 Google Play 会将该应用筛选掉。</p>
<p class="caution"><strong>注意:</strong>正常情况下,<strong>不能使用此清单文件元素</strong>。
使用此元素可能会显著减少应用的潜在用户群,因为排除了您未列出的所有屏幕尺寸和密度组合。
应当改用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> 清单文件元素(上面<a href="#table1">表
+<supports-screens>}</a> 清单文件元素(上面<a href="#table1">表
1</a> 所述),通过替代资源为您没有考虑的屏幕配置启用屏幕兼容模式。
</p>
</td>
</tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a></nobr></td>
+<supports-gl-texture>}</a></nobr></td>
<td>
<p>除非应用所支持的一种或多种 GL 纹理压缩格式也受到设备支持,否则 Google Play 将应用筛选掉。
</p>
@@ -408,16 +408,16 @@
<ul>
<li>OpenGL 纹理压缩格式
<p>使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a> 元素。</p>
+<supports-gl-texture>}</a> 元素。</p>
</li>
<li>屏幕尺寸(以及可选的屏幕密度)
<p>使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> 或 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> 元素。</p>
+<supports-screens>}</a> 或 <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+<compatible-screens>}</a> 元素。</p>
</li>
<li>API 级别
<p>使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> 元素。</p>
+<uses-sdk>}</a> 元素。</p>
</li>
<li>CPU 架构 (ABI)
<p>包括针对特定 CPU 架构(例如 ARM EABI v7 或 x86)的、通过 <a href="{@docRoot}tools/sdk/ndk/index.html">Android
diff --git a/docs/html-intl/intl/zh-cn/preview/api-overview.jd b/docs/html-intl/intl/zh-cn/preview/api-overview.jd
index c64a38e..f7764cd 100644
--- a/docs/html-intl/intl/zh-cn/preview/api-overview.jd
+++ b/docs/html-intl/intl/zh-cn/preview/api-overview.jd
@@ -134,7 +134,7 @@
adb -e emu finger touch <finger_id>
</pre>
<p>在 Windows 上,您可能需要运行带有
-{@code finger touch <finger_id>} 参数的 {@code telnet 127.0.0.1 <emulator-id>} 命令。
+{@code finger touch <finger_id>} 参数的 {@code telnet 127.0.0.1 <emulator-id>} 命令。
</p>
</li>
</ol>
@@ -193,7 +193,7 @@
<p>对于您想要向 {@code ChooserTargetService} 公开的每个活动,请在您的应用清单文件中为其添加一个名为
{@code "android.service.chooser.chooser_target_service"} 的
-{@code <meta-data>} 元素。
+{@code <meta-data>} 元素。
</p>
<pre>
diff --git a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd
index 05f9728..cebd748 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/activity-lifecycle/starting.jd
@@ -149,7 +149,7 @@
</p>
<p>您的应用的主Activity必须使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>(包括 {@link
+<intent-filter>}</a>(包括 {@link
android.content.Intent#ACTION_MAIN MAIN} 操作和
{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 类别)在宣示说明中声明。例如:</p>
diff --git a/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
index 4bcbdf9..ff5c792 100644
--- a/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/zh-cn/training/basics/intents/filters.jd
@@ -31,8 +31,8 @@
</p>
-<p>要允许其他应用开始您的Activity,您需要 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
-在相应元素的宣示说明文件中添加一个 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 元素。</p>
+<p>要允许其他应用开始您的Activity,您需要 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+在相应元素的宣示说明文件中添加一个 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 元素。</p>
<p>当您的应用安装在设备上时,系统会识别您的意向过滤器并添加信息至所有已安装应用支持的意向内部目录。当应用通过隐含意向调用 {@link android.app.Activity#startActivity
startActivity()} 或 {@link android.app.Activity#startActivityForResult startActivityForResult()} 时,系统会找到可以响应该意向的Activity。
@@ -56,13 +56,13 @@
<dt>操作</dt>
<dd>对要执行的操作命名的字符串。通常是平台定义的值之一,比如
{@link android.content.Intent#ACTION_SEND} 或 {@link android.content.Intent#ACTION_VIEW}。
- <p>使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 元素在您的意向过滤器中指定此值。您在此元素中指定的值必须是操作的完整字符串名称,而不是 API 常数(请参阅以下示例)。
+ <p>使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 元素在您的意向过滤器中指定此值。您在此元素中指定的值必须是操作的完整字符串名称,而不是 API 常数(请参阅以下示例)。
</p></dd>
<dt>数据</dt>
<dd>与意向关联的数据描述。
- <p>用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 元素在您的意向过滤器中指定此内容。使用此元素中的一个或多个属性,您可以只指定 MIME 类型、URI 前缀、URI 架构或这些的组合以及其他指示所接受数据类型的项。
+ <p>用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 元素在您的意向过滤器中指定此内容。使用此元素中的一个或多个属性,您可以只指定 MIME 类型、URI 前缀、URI 架构或这些的组合以及其他指示所接受数据类型的项。
</p>
@@ -76,11 +76,11 @@
系统支持多种不同的类别,但大多数都很少使用。
但是,所有隐含意向默认使用
{@link android.content.Intent#CATEGORY_DEFAULT} 进行定义。
- <p>用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
+ <p>用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
元素在您的意向过滤器中指定此内容。</p></dd>
</dl>
-<p>在您的意向过滤器中,您可以通过声明嵌套在 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+<p>在您的意向过滤器中,您可以通过声明嵌套在 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
元素中的具有相应 XML 元素的各项,来声明您的Activity接受的条件。
</p>
@@ -100,11 +100,11 @@
<p>每个入站意向仅指定一项操作和一个数据类型,但可以在每个
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"> {@code
-<intent-filter>}</a> 中声明
+<intent-filter>}</a> 中声明
<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> 和 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> 元素的多个实例。</p>
+<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> 和 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> 元素的多个实例。</p>
<p>如果任何两对操作和数据的行为相斥,您应创建单独的意向过滤器指定与哪种数据类型配对时哪些操作可接受。
diff --git a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd
index 9329606..996df61 100644
--- a/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd
+++ b/docs/html-intl/intl/zh-tw/distribute/googleplay/quality/tv.jd
@@ -285,7 +285,7 @@
</td>
<td>
<p style="margin-bottom:.5em;">
- 若應用程式將遊戲手把用作主要輸入方式,會使用 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> 宣示說明標籤宣告相應的需求。(<a href="{@docRoot}training/tv/games/index.html#gamepad">進行了解</a>)
+ 若應用程式將遊戲手把用作主要輸入方式,會使用 <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> 宣示說明標籤宣告相應的需求。(<a href="{@docRoot}training/tv/games/index.html#gamepad">進行了解</a>)
</p>
</td>
</tr>
diff --git a/docs/html-intl/intl/zh-tw/google/play/filters.jd b/docs/html-intl/intl/zh-tw/google/play/filters.jd
index 8cfd59a..e96b9dd 100644
--- a/docs/html-intl/intl/zh-tw/google/play/filters.jd
+++ b/docs/html-intl/intl/zh-tw/google/play/filters.jd
@@ -208,14 +208,14 @@
<table>
<tr><th>宣示說明元素</th><th>摘要</th></tr>
<tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a></nobr></td>
+ <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a></nobr></td>
<td>
- <p>若裝置螢幕大小與密度不符合元素中的{@code <compatible-screens>}任何螢幕組態 (由 {@code <screen>} 元素宣告),Google Play 會對應用程式進行篩選。</p>
- <p class="caution"><strong>注意:</strong>通常,<strong>您不應使用此宣示說明元素</strong>。若使用此元素,會將您未列出的螢幕大小與密度的所有組合排除在外,從而大幅減少您應用程式可能擁有的使用者。您應改為針對未使用替代資源說明的螢幕組態,使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> 宣示說明元素 (如<a href="#table1">表 1</a> 所述) 啟用螢幕相容性模式。</p>
+ <p>若裝置螢幕大小與密度不符合元素中的{@code <compatible-screens>}任何螢幕組態 (由 {@code <screen>} 元素宣告),Google Play 會對應用程式進行篩選。</p>
+ <p class="caution"><strong>注意:</strong>通常,<strong>您不應使用此宣示說明元素</strong>。若使用此元素,會將您未列出的螢幕大小與密度的所有組合排除在外,從而大幅減少您應用程式可能擁有的使用者。您應改為針對未使用替代資源說明的螢幕組態,使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a> 宣示說明元素 (如<a href="#table1">表 1</a> 所述) 啟用螢幕相容性模式。</p>
</td>
</tr>
<tr>
- <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a></nobr></td>
+ <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a></nobr></td>
<td>
<p>除非裝置支援應用程式所支援的一或多個 GL 材質壓縮格式,否則 Google Play 會對應用程式進行篩選。 </p>
</td>
@@ -249,11 +249,11 @@
<p>目前,只有在每個 APK 根據以下組態提供不同的篩選器時,Google Play 才允許您針對同一應用程式發行多個 APK:</p>
<ul>
- <li>OpenGL 材質壓縮格式 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a>元素。</p>
+ <li>OpenGL 材質壓縮格式 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code <supports-gl-texture>}</a>元素。</p>
</li>
- <li>螢幕大小 (以及可選的螢幕密度) <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a>或<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a> 元素。</p>
+ <li>螢幕大小 (以及可選的螢幕密度) <p>透過使用 <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code <supports-screens>}</a>或<a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code <compatible-screens>}</a> 元素。</p>
</li>
- <li>API 層級 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>元素。</p>
+ <li>API 層級 <p>透過使用 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>元素。</p>
</li>
<li>CPU 架構 (ABI) <p>透過納入使用 <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> (針對諸如 ARM EABI v7 或 x86 等特定 CPU 架構) 而建置的原生資源庫。</p>
</li>
diff --git a/docs/html-intl/intl/zh-tw/preview/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd
index f6c5696..a68f0cd 100644
--- a/docs/html-intl/intl/zh-tw/preview/api-overview.jd
+++ b/docs/html-intl/intl/zh-tw/preview/api-overview.jd
@@ -133,8 +133,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>在 Windows 上,您可能必須執行 {@code telnet 127.0.0.1 <emulator-id>},後面接著
-{@code finger touch <finger_id>}。
+<p>在 Windows 上,您可能必須執行 {@code telnet 127.0.0.1 <emulator-id>},後面接著
+{@code finger touch <finger_id>}。
</p>
</li>
</ol>
@@ -193,7 +193,7 @@
<p>針對您要向 {@code ChooserTargetService} 公開的每個活動,在您的應用程式宣示說明中,新增名稱為
{@code "android.service.chooser.chooser_target_service"} 的
-{@code <meta-data>} 元素。
+{@code <meta-data>} 元素。
</p>
<pre>
diff --git a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd
index 3453ac5..fae2fa3 100644
--- a/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html-intl/intl/zh-tw/training/basics/activity-lifecycle/starting.jd
@@ -149,7 +149,7 @@
</p>
<p>必須在宣示說明中使用 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> (包括 {@link
+<intent-filter>}</a> (包括 {@link
android.content.Intent#ACTION_MAIN MAIN} 行為與 {@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} 類別) 宣告您應用程式的主要應用行為顯示。
例如:</p>
diff --git a/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd
index 2088b27..6b4eebf 100644
--- a/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd
+++ b/docs/html-intl/intl/zh-tw/training/basics/intents/filters.jd
@@ -31,7 +31,7 @@
</p>
-<p>若要允許其他應用程式啟動您的應用行為顯示,需要在您的宣示說明檔案中針對對應的 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 元素新增 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素。
+<p>若要允許其他應用程式啟動您的應用行為顯示,需要在您的宣示說明檔案中針對對應的 <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> 元素新增 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素。
</p>
<p>若您的應用程式安裝在裝置上,系統會識別您的意圖篩選器,並將資訊新增至安裝的所有應用程式都支援的意圖內部目錄中。在應用程式使用隱含意圖呼叫 {@link android.app.Activity#startActivity
@@ -56,13 +56,13 @@
<dt>行為</dt>
<dd>對要執行的行為進行命名的字串。通常是平台所定義值 (例如 {@link android.content.Intent#ACTION_SEND} 或 {@link android.content.Intent#ACTION_VIEW}) 的其中之一。
- <p>請在您的意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 元素指定此項目。在此元素中指定的值必須是行為的完整字串名稱,而非 API 常數 (請參閱以下範例)。
+ <p>請在您的意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> 元素指定此項目。在此元素中指定的值必須是行為的完整字串名稱,而非 API 常數 (請參閱以下範例)。
</p></dd>
<dt>資料</dt>
<dd>對意圖所關聯資料的描述。
- <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 元素指定此項目。在此元素中使用一或多個屬性,您可以僅指定 MIME 類型、URI 首碼、URI 配置,或指定這些項目的組合,以及表示所接受資料類型的其他項目。
+ <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> 元素指定此項目。在此元素中使用一或多個屬性,您可以僅指定 MIME 類型、URI 首碼、URI 配置,或指定這些項目的組合,以及表示所接受資料類型的其他項目。
</p>
@@ -76,11 +76,11 @@
系統支援多種不同的類別,但大多數類別很少使用。
然而依預設,所有隱含意圖都與 {@link android.content.Intent#CATEGORY_DEFAULT} 一併定義。
- <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 元素指定此項目。
+ <p>請在意圖篩選器中使用 <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> 元素指定此項目。
</p></dd>
</dl>
-<p>在意圖篩選器中,您可以宣告每個條件以及 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素中巢套的對應 XML 元素,以宣告應用行為顯示所接受的條件。
+<p>在意圖篩選器中,您可以宣告每個條件以及 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a> 元素中巢套的對應 XML 元素,以宣告應用行為顯示所接受的條件。
</p>
@@ -99,10 +99,10 @@
</pre>
<p>傳入的每項意圖只會指定一項行為與一種資料類型,但是在每個 <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> 中,可以宣告 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> 與 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> 元素的多個執行個體。
+<intent-filter>}</a> 中,可以宣告 <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a>、<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> 與 <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> 元素的多個執行個體。
</p>
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index e04940b..ff6b681 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -112,10 +112,10 @@
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
android:glEsVersion} attribute of the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element. You can also use the <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a> element to declare the GL compression formats that your application
+<supports-gl-texture>}</a> element to declare the GL compression formats that your application
uses.</p>
diff --git a/docs/html/about/versions/android-1.6.jd b/docs/html/about/versions/android-1.6.jd
index 8e97ff6..e727f55 100644
--- a/docs/html/about/versions/android-1.6.jd
+++ b/docs/html/about/versions/android-1.6.jd
@@ -296,7 +296,7 @@
<ul>
<li>New <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
- <supports-screens>}</a> element lets you specify the device screen sizes that your
+ <supports-screens>}</a> element lets you specify the device screen sizes that your
application is designed and tested to support, where "size" is a combination
of resolution and density. If your application is run on a device whose screen
size is not specified in the <code><supports-screen></code> element, the system
@@ -331,7 +331,7 @@
</p>
</li>
- <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+ <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element lets an application specify hardware (or other)
features that it requires to function normally. When an application
specifies such features, the system allows the application to be installed only
@@ -345,7 +345,7 @@
</ul>
</li>
<li>New attributes for the
- <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element:
+ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element:
<ul>
<li><code>targetSdkVersion</code>: Indicates the API Level that the application is targeting.
It is able to run on older versions (down to minSdkVersion), but was explicitly tested to
diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd
index 3b23e4d..c16088a 100644
--- a/docs/html/about/versions/android-2.0-highlights.jd
+++ b/docs/html/about/versions/android-2.0-highlights.jd
@@ -159,7 +159,7 @@
<li>Database API support, for client-side databases using SQL.</li>
<li>Application cache support, for offline applications.</li>
<li>Geolocation API support, to provide location information about the device.</li>
- <li>{@code <video>} tag support in fullscreen mode.</li>
+ <li>{@code <video>} tag support in fullscreen mode.</li>
</ul>
</li>
</ul>
diff --git a/docs/html/about/versions/android-2.3.jd b/docs/html/about/versions/android-2.3.jd
index 4b8ef91..34fdb52 100644
--- a/docs/html/about/versions/android-2.3.jd
+++ b/docs/html/about/versions/android-2.3.jd
@@ -589,7 +589,7 @@
<ul>
<li>New <code>xlargeScreens</code> attribute for <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a>
+<supports-screens>}</a>
element, to indicate whether the application supports
extra large screen form-factors. For details, see <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
diff --git a/docs/html/about/versions/android-3.0.jd b/docs/html/about/versions/android-3.0.jd
index f319fed..5184743 100644
--- a/docs/html/about/versions/android-3.0.jd
+++ b/docs/html/about/versions/android-3.0.jd
@@ -257,7 +257,7 @@
such as from a content provider.</p>
<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
-<appwidget-provider>} element) also supports two new fields: {@link
+<appwidget-provider>} element) also supports two new fields: {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
@@ -535,9 +535,9 @@
<p>You can now enable the OpenGL renderer for your application by setting {@code
android:hardwareAccelerated="true"} in your manifest element's <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element or for individual <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
elements.</p>
<p>This flag helps applications by making them draw faster. This results in smoother animations,
@@ -683,7 +683,7 @@
href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
android:numericShortcut} attribute for each <a
-href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code <item>}</a>
+href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code <item>}</a>
element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
@@ -715,9 +715,9 @@
<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
allows you to disable split touch events that occur between child views in a layout. For example:
<pre>
-<LinearLayout android:splitMotionEvents="false" ... >
+<LinearLayout android:splitMotionEvents="false" ... >
...
-</LinearLayout>
+</LinearLayout>
</pre>
<p>This way, child views in the linear layout cannot split touch events—only one view can
receive touch events at a time.</p>
@@ -727,14 +727,14 @@
allows you to disable split touch events across windows, by applying it to a theme for the activity
or entire application. For example:
<pre>
-<style name="NoSplitMotionEvents" parent="android:Theme.Holo">
- <item name="android:windowEnableSplitTouch">false</item>
+<style name="NoSplitMotionEvents" parent="android:Theme.Holo">
+ <item name="android:windowEnableSplitTouch">false</item>
...
-</style>
+</style>
</pre>
<p>When this theme is applied to an <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>,
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>,
only touch events within the current activity window are accepted. For example, by disabling split
touch events across windows, the system bar cannot receive touch events at the same time as the
activity. This does <em>not</em> affect whether views inside the activity can split touch
@@ -794,7 +794,7 @@
capabilities of the device. For example, the following HTML provides an input for the user to
capture a photo to upload:</p>
<pre>
-<input type="file" accept="image/*;capture=camera" />
+<input type="file" accept="image/*;capture=camera" />
</pre>
<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
new image with the camera or select one from the device (such as from the Gallery application).</p>
@@ -850,7 +850,7 @@
<h3>New feature constants</h3>
<p>The <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
manfest element should be used to inform external entities (such as Google Play) of the set of
hardware and software features on which your application depends. In this release, Android adds the
following new constants that applications can declare with this element:</p>
@@ -868,14 +868,14 @@
<em>not</em> want your application filtered from devices with an emulated touchscreen, you
should declare {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element. This way, your application will be available to the greatest number of device types,
including those that provide only an emulated touchscreen input.</p>
<p>All devices that include a touchscreen also support {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
a touchscreen, you should add a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element for faketouch.</p>
</li>
</ul>
@@ -889,14 +889,14 @@
<li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
"android.permission.BIND_REMOTEVIEWS"}
<p>This must be declared as a required permission in the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> manifest
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> manifest
element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
collection view, the manifest entry may look like this:</p>
<pre>
<service android:name=".widget.WidgetService"
android:exported="false"
- android:permission="android.permission.BIND_REMOTEVIEWS" />
+ android:permission="android.permission.BIND_REMOTEVIEWS" />
</pre>
</ul>
diff --git a/docs/html/about/versions/android-3.1.jd b/docs/html/about/versions/android-3.1.jd
index c22dfaa..cdcf51e 100644
--- a/docs/html/about/versions/android-3.1.jd
+++ b/docs/html/about/versions/android-3.1.jd
@@ -388,8 +388,8 @@
android:previewImage="@drawable/preview"
android:initialLayout="@layout/example_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigure"
- android:resizeMode="horizontal|vertical" >
-</appwidget-provider></pre>
+ android:resizeMode="horizontal|vertical" >
+</appwidget-provider></pre>
<p>For more information about Home screen widgets, see the <a
href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
@@ -809,7 +809,7 @@
in this version of the platform. Developers declare these and other feature
constants in <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> manifest elements.
+<uses-feature>}</a> manifest elements.
<ul>
<li>{@link android.content.pm.PackageManager#FEATURE_USB_ACCESSORY
@@ -824,7 +824,7 @@
<p>Google Play filters applications based on features declared in <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> manifest elements. For more information about
+<uses-feature>}</a> manifest elements. For more information about
declaring features in an application manifest, read <a
href="{@docRoot}google/play/filters.html">Google Play
Filters</a>.</p>
diff --git a/docs/html/about/versions/android-3.2.jd b/docs/html/about/versions/android-3.2.jd
index ef95337..887755c 100644
--- a/docs/html/about/versions/android-3.2.jd
+++ b/docs/html/about/versions/android-3.2.jd
@@ -481,7 +481,7 @@
Play of required hardware and software capabilities. You declare these
and other feature constants in <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> manifest elements.
+<uses-feature>}</a> manifest elements.
<p>Google Play filters applications based on their <code><uses-feature></code> attributes, to ensure that they are available only to devices on which their requirements are met. </p>
diff --git a/docs/html/about/versions/android-4.0.3.jd b/docs/html/about/versions/android-4.0.3.jd
index 4c2ccb9..fef9ce1 100644
--- a/docs/html/about/versions/android-4.0.3.jd
+++ b/docs/html/about/versions/android-4.0.3.jd
@@ -297,7 +297,7 @@
application against an Android platform that supports API level {@sdkPlatformApiLevel} or
higher. Depending on your needs, you might also need to add an
<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
element.</p>
<p>For more information, see the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
diff --git a/docs/html/about/versions/android-4.0.jd b/docs/html/about/versions/android-4.0.jd
index cc1d1c7..1b103b7 100644
--- a/docs/html/about/versions/android-4.0.jd
+++ b/docs/html/about/versions/android-4.0.jd
@@ -909,9 +909,9 @@
<p>Applications with a spell checker service must declare the {@link
android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service.
-The service must also declare an intent filter with {@code <action
+The service must also declare an intent filter with {@code <action
android:name="android.service.textservice.SpellCheckerService" />} as the intent’s action and should
-include a {@code <meta-data>} element that declares configuration information for the spell
+include a {@code <meta-data>} element that declares configuration information for the spell
checker. </p>
<p>See the sample <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
@@ -997,12 +997,12 @@
action. For example:</p>
<pre>
-<activity android:name="DataPreferences" android:label="@string/title_preferences">
- <intent-filter>
- <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
-</activity>
+<activity android:name="DataPreferences" android:label="@string/title_preferences">
+ <intent-filter>
+ <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+</activity>
</pre>
<p>This intent filter indicates to the system that this is the activity that controls your
@@ -1054,7 +1054,7 @@
<p>Applications that manage the device restrictions can now disable the camera using {@link
android.app.admin.DevicePolicyManager#setCameraDisabled setCameraDisabled()} and the {@link
android.app.admin.DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} property (applied with a {@code
-<disable-camera />} element in the policy configuration file).</p>
+<disable-camera />} element in the policy configuration file).</p>
<h4>Certificate management</h4>
@@ -1120,10 +1120,10 @@
allows you to enable “split action bar" so that more action items can appear on the screen in a
separate bar at the bottom of the screen. To enable split action bar, add {@link
android.R.attr#uiOptions android:uiOptions} with {@code "splitActionBarWhenNarrow"} to either your
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
tag or
individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> tags
+<activity>}</a> tags
in your manifest file. When enabled, the system will add an additional bar at the bottom of the
screen for all action items when the screen is narrow (no action items will appear in the primary
action bar).</p>
@@ -1166,7 +1166,7 @@
<p>To declare an action provider for an action item, include the {@code android:actionProviderClass}
attribute in the <a href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
-<item>}</a> element for your activity’s options menu, with the class name of the action
+<item>}</a> element for your activity’s options menu, with the class name of the action
provider as the value. For example:</p>
<pre>
@@ -1208,7 +1208,7 @@
<p>To declare that an action item that contains an action view be collapsible, include the {@code
“collapseActionView"} flag in the {@code android:showAsAction} attribute for the <a
href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
-<item>}</a> element in the menu’s XML file.</p>
+<item>}</a> element in the menu’s XML file.</p>
<p>To receive callbacks when an action view switches between expanded and collapsed, register an
instance of {@link android.view.MenuItem.OnActionExpandListener} with the respective {@link
@@ -1560,8 +1560,8 @@
<p>If necessary, you can manually disable hardware acceleration with the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#hwaccel">{@code hardwareAccelerated}</a>
attribute for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> elements or the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+<activity>}</a> elements or the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element. You can alternatively disable hardware acceleration for individual views by calling {@link
android.view.View#setLayerType setLayerType(LAYER_TYPE_SOFTWARE)}.</p>
@@ -1759,7 +1759,7 @@
href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
New Tools for Managing Screen Sizes</a>.</li>
<li>New constants for <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> to
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> to
declare landscape or portrait screen orientation requirements.</li>
<li>The device "screen size" configuration now changes during a screen orientation
change. If your app targets API level 13 or higher, you must handle the {@code "screenSize"}
@@ -1787,7 +1787,7 @@
application against an Android platform that supports API level {@sdkPlatformApiLevel} or
higher. Depending on your needs, you might also need to add an
<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
element.</p>
<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
diff --git a/docs/html/about/versions/android-4.1.jd b/docs/html/about/versions/android-4.1.jd
index f8770fa..4131c36 100644
--- a/docs/html/about/versions/android-4.1.jd
+++ b/docs/html/about/versions/android-4.1.jd
@@ -149,7 +149,7 @@
<h3 id="Isolated">Isolated services</h3>
<p>By specifying <a href="{@docRoot}guide/topics/manifest/service-element.html#isolated">{@code android:isolatedProcess="true"}</a> in the
-<a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> tag, your {@link android.app.Service} will run under
+<a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> tag, your {@link android.app.Service} will run under
its own isolated user ID process that has no permissions of its own.</p>
@@ -196,7 +196,7 @@
All you need to do is add the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> to each <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element in
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element in
your manifest file. The system uses this information to open the appropriate activity when the user
presses the Up button in the action bar (while also finishing the current activity). So if you
declare the <a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
@@ -287,7 +287,7 @@
adding <a
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> to each <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.</p>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.</p>
@@ -889,13 +889,13 @@
<p>Android 4.1 includes a new feature declaration for devices that are dedicated
to displaying the user interface on a television screen: {@link
android.content.pm.PackageManager#FEATURE_TELEVISION}. To declare that your app requires
-a television interface, declare this feature in your manifest file with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element:</p>
+a television interface, declare this feature in your manifest file with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element:</p>
<pre>
-<manifest ... >
+<manifest ... >
<uses-feature android:name="android.hardware.type.television"
- android:required="true" />
+ android:required="true" />
...
-</manifest>
+</manifest>
</pre>
<p>This feature defines "television" to be a typical living room television experience:
diff --git a/docs/html/about/versions/android-4.2.jd b/docs/html/about/versions/android-4.2.jd
index 76acb8a..f903156 100644
--- a/docs/html/about/versions/android-4.2.jd
+++ b/docs/html/about/versions/android-4.2.jd
@@ -166,18 +166,18 @@
<p>To make your daydream available to the system, declare your {@link
android.service.dreams.DreamService} with a <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
in your manifest file. You must then include an intent filter with the action {@code
"android.service.dreams.DreamService"}. For example:</p>
<pre>
<service android:name=".MyDream" android:exported="true"
- android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
- <intent-filter>
- <action android:name="android.service.dreams.DreamService" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
-</service>
+ android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
+ <intent-filter>
+ <action android:name="android.service.dreams.DreamService" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+</service>
</pre>
<p>There are some other useful methods in {@link android.service.dreams.DreamService}
@@ -255,7 +255,7 @@
secondary screens, you can apply
a different theme by specifying the {@link
android.R.attr#presentationTheme android:presentationTheme} attribute in the <a
-href="{@docRoot}guide/topics/resources/style-resource.html">{@code <style>}</a> that you’ve
+href="{@docRoot}guide/topics/resources/style-resource.html">{@code <style>}</a> that you’ve
applied to your application or activity.</p>
<p>Keep in mind that screens connected to the user’s device often have a larger screen size and
@@ -294,8 +294,8 @@
<pre>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
- android:widgetCategory="keyguard|home_screen">
-</appwidget-provider>
+ android:widgetCategory="keyguard|home_screen">
+</appwidget-provider>
</pre>
<p>You should also specify an initial layout for your app widget when on the lock screen with
@@ -399,7 +399,7 @@
direction, such as Arabic and Hebrew.</p>
<p>To begin supporting RTL layouts in your app, set the {@link android.R.attr#supportsRtl
-android:supportsRtl} attribute to the {@code <application>} element in your manifest file
+android:supportsRtl} attribute to the {@code <application>} element in your manifest file
and set it {@code “true"}. Once you enable this, the system will enable various RTL APIs to
display your app with RTL layouts. For instance, the action bar will show the icon and title
on the right side and action buttons on the left, and any layouts you’ve created with the
@@ -483,7 +483,7 @@
fragment designs on Android 1.6 and higher.</p>
<p><strong>Note:</strong> You cannot inflate a layout into a fragment when that layout
-includes a {@code <fragment>}. Nested fragments are only supported when added to a
+includes a {@code <fragment>}. Nested fragments are only supported when added to a
fragment dynamically.</p>
diff --git a/docs/html/about/versions/android-4.3.jd b/docs/html/about/versions/android-4.3.jd
index 2496854..547b2f8 100644
--- a/docs/html/about/versions/android-4.3.jd
+++ b/docs/html/about/versions/android-4.3.jd
@@ -204,7 +204,7 @@
app depends on account information that's sensitive, specify the <a
href="{@docRoot}guide/topics/manifest/application-element.html#requiredAccountType">{@code
android:requiredAccountType}</a> attribute in your manifest's <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element.</p>
<p>If you’d like to allow restricted profiles to continue using your app even though they can’t
@@ -298,10 +298,10 @@
<li><strong>Allow access to the owner’s accounts from a restricted profile.</strong>
<p>To get access to an account from a restricted profile, you must add the <a href="{@docRoot}guide/topics/manifest/application-element.html#restrictedAccountType">{@code android:restrictedAccountType}</a> attribute to the <a
-href="{@docRoot}guide/topics/manifest/application-element.html"><application></a> tag:</p>
+href="{@docRoot}guide/topics/manifest/application-element.html"><application></a> tag:</p>
<pre>
<application ...
- android:restrictedAccountType="com.example.account.type" >
+ android:restrictedAccountType="com.example.account.type" >
</pre>
<p class="caution"><strong>Caution:</strong> Enabling this attribute provides your
@@ -341,10 +341,10 @@
currently cannot add new accounts), add
the <a href="{@docRoot}guide/topics/manifest/application-element.html#requiredAccountType">{@code
android:requiredAccountType}</a> attribute to the <a
-href="{@docRoot}guide/topics/manifest/application-element.html"><application></a> tag:</p>
+href="{@docRoot}guide/topics/manifest/application-element.html"><application></a> tag:</p>
<pre>
<application ...
- android:requiredAccountType="com.example.account.type" >
+ android:requiredAccountType="com.example.account.type" >
</pre>
<p>For example, the Gmail app uses this attribute to disable itself for restricted profiles,
because the owner's personal email should not be available to restricted profiles.</p>
@@ -363,10 +363,10 @@
<p>Because Bluetooth LE is a hardware feature that is not available on all
Android-powered devices, you must declare in your manifest file a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element for {@code "android.hardware.bluetooth_le"}:</p>
<pre>
-<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
+<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
</pre>
<p>If you're already familiar with Android's Classic Bluetooth APIs, notice that using the
@@ -592,13 +592,13 @@
<p>The Java interface for OpenGL ES 3.0 on Android is provided with {@link android.opengl.GLES30}.
When using OpenGL ES 3.0, be sure that you declare it in your manifest file with the
-<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a>
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a>
tag and the {@code android:glEsVersion} attribute. For example:</p>
<pre>
-<manifest>
- <uses-feature android:glEsVersion="0x00030000" />
+<manifest>
+ <uses-feature android:glEsVersion="0x00030000" />
...
-</manifest>
+</manifest>
</pre>
<p>And remember to specify the OpenGL ES context by calling {@link
@@ -740,7 +740,7 @@
<p style="clear:left">To align the views based on their optical bounds, set the {@code android:layoutMode} attribute to {@code "opticalBounds"} in one of the parent layouts. For example:</p>
<pre>
-<LinearLayout android:layoutMode="opticalBounds" ... >
+<LinearLayout android:layoutMode="opticalBounds" ... >
</pre>
@@ -818,7 +818,7 @@
<h3 id="Orientation">Screen orientation</h3>
<p>The <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
tag's <a
href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code screenOrientation}</a>
attribute now supports additional values to honor the user's preference for auto-rotation:</p>
@@ -1110,7 +1110,7 @@
<h3 id="ManifestFeatures">Declarable required features</h3>
<p>The following values are now supported in the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element so you can ensure that your app is installed only on devices that provide the features
your app needs.</p>
@@ -1120,7 +1120,7 @@
include a Home screen or similar location where users can embed app widgets.
Example:
<pre>
-<uses-feature android:name="android.software.app_widgets" android:required="true" />
+<uses-feature android:name="android.software.app_widgets" android:required="true" />
</pre>
</dd>
@@ -1129,7 +1129,7 @@
devices that support third-party Home screen apps.
Example:
<pre>
-<uses-feature android:name="android.software.home_screen" android:required="true" />
+<uses-feature android:name="android.software.home_screen" android:required="true" />
</pre>
</dd>
@@ -1139,7 +1139,7 @@
support third-party input methods.
Example:
<pre>
-<uses-feature android:name="android.software.input_methods" android:required="true" />
+<uses-feature android:name="android.software.input_methods" android:required="true" />
</pre>
</dd>
@@ -1148,7 +1148,7 @@
that are capable of communicating with other devices via Bluetooth Low Energy.
Example:
<pre>
-<uses-feature android:name="android.software.bluetooth_le" android:required="true" />
+<uses-feature android:name="android.software.bluetooth_le" android:required="true" />
</pre>
</dd>
</dl>
@@ -1156,7 +1156,7 @@
<h3 id="ManifestPermissions">User permissions</h3>
<p>The following values are now supported in the <a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a>
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a>
to declare the
permissions your app requires in order to access certain APIs.</p>
diff --git a/docs/html/about/versions/android-4.4.jd b/docs/html/about/versions/android-4.4.jd
index 3de2acc..0d58a1d 100644
--- a/docs/html/about/versions/android-4.4.jd
+++ b/docs/html/about/versions/android-4.4.jd
@@ -257,7 +257,7 @@
<p>When running on a device that includes an infrared (IR) transmitter, you can now transmit IR signals using the {@link android.hardware.ConsumerIrManager} APIs. To get an instance of {@link android.hardware.ConsumerIrManager}, call {@link android.content.Context#getSystemService getSystemService()} with {@link android.content.Context#CONSUMER_IR_SERVICE} as the argument. You can then query the device's supported IR frequencies with {@link android.hardware.ConsumerIrManager#getCarrierFrequencies()} and transmit signals by passing your desired frequency and signal pattern with {@link android.hardware.ConsumerIrManager#transmit transmit()}.</p>
-<p>You should always first check whether a device includes an IR transmitter by calling {@link android.hardware.ConsumerIrManager#hasIrEmitter()}, but if your app is compatible only with devices that do have one, you should include a <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element in your manifest for {@code "android.hardware.consumerir"} ({@link android.content.pm.PackageManager#FEATURE_CONSUMER_IR}).</p>
+<p>You should always first check whether a device includes an IR transmitter by calling {@link android.hardware.ConsumerIrManager#hasIrEmitter()}, but if your app is compatible only with devices that do have one, you should include a <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> element in your manifest for {@code "android.hardware.consumerir"} ({@link android.content.pm.PackageManager#FEATURE_CONSUMER_IR}).</p>
@@ -372,7 +372,7 @@
<p>Alternatively, you don't need to create a {@link android.transition.Scene} object at all, but can instead call {@link android.transition.TransitionManager#beginDelayedTransition beginDelayedTransition()}, specifying a {@link android.view.ViewGroup} that contains the views you want to change. Then add, remove, or reconfigure the target views. After the system lays out the changes as necessary, a transition starts to animate all the affected views.</p>
-<p>For additional control, you can define sets of transitions that should occur between pre-defined scenes, using an XML file in your project {@code res/transition/} directory. Inside a {@code <transitionManager>} element, specify one or more {@code <transition>} tags that each specify a scene (a reference to a layout file) and the transition to apply when entering and/or exiting that scene. Then inflate this set of transitions using {@link android.transition.TransitionInflater#inflateTransitionManager inflateTransitionManager()}. Use the returned {@link android.transition.TransitionManager} to execute each transition with {@link android.transition.TransitionManager#transitionTo transitionTo()}, passing a {@link android.transition.Scene} that is represented by one of the {@code <transition>} tags. You can also define sets of transitions programmatically with the {@link android.transition.TransitionManager} APIs.</p>
+<p>For additional control, you can define sets of transitions that should occur between pre-defined scenes, using an XML file in your project {@code res/transition/} directory. Inside a {@code <transitionManager>} element, specify one or more {@code <transition>} tags that each specify a scene (a reference to a layout file) and the transition to apply when entering and/or exiting that scene. Then inflate this set of transitions using {@link android.transition.TransitionInflater#inflateTransitionManager inflateTransitionManager()}. Use the returned {@link android.transition.TransitionManager} to execute each transition with {@link android.transition.TransitionManager#transitionTo transitionTo()}, passing a {@link android.transition.Scene} that is represented by one of the {@code <transition>} tags. You can also define sets of transitions programmatically with the {@link android.transition.TransitionManager} APIs.</p>
<p>When specifying a transition, you can use several predefined types defined by subclasses of {@link android.transition.Transition}, such as {@link android.transition.Fade} and {@link android.transition.ChangeBounds}. If you don't specify a transition type, the system uses {@link android.transition.AutoTransition} by default, which automatically fades, moves, and resizes views as necessary. Additionally, you can create custom transitions by extending any of these classes to perform the animations however you'd like. A custom transition can track any property changes you'd like, and create any animation you want to based on those changes. For example, you could provide a subclass of {@link android.transition.Transition} that listens for changes to the "rotation" property of a view then animate any changes.</p>
@@ -531,7 +531,7 @@
<h2 id="Permissions">App Permissions</h2>
-<p>The following are new permissions that your app must request with the <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a> tag to use certain new APIs:</p>
+<p>The following are new permissions that your app must request with the <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a> tag to use certain new APIs:</p>
<dl>
<dt>{@link android.Manifest.permission#INSTALL_SHORTCUT}</dt>
@@ -550,7 +550,7 @@
<h2 id="DeviceFeatures">Device Features</h2>
-<p>The following are new device features that you can declare with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag to declare your app requirements and enable filtering on Google Play or check for at runtime:</p>
+<p>The following are new device features that you can declare with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag to declare your app requirements and enable filtering on Google Play or check for at runtime:</p>
<dl>
<dt>{@link android.content.pm.PackageManager#FEATURE_CONSUMER_IR}</dt>
diff --git a/docs/html/about/versions/android-5.0.jd b/docs/html/about/versions/android-5.0.jd
index 8956076..1bdd2d6 100644
--- a/docs/html/about/versions/android-5.0.jd
+++ b/docs/html/about/versions/android-5.0.jd
@@ -351,7 +351,7 @@
<p>The Java interface for OpenGL ES 3.1 on Android is provided with
{@link android.opengl.GLES31}. When using OpenGL ES 3.1, be sure that you
declare it in your manifest file with the
- <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag and the {@code android:glEsVersion} attribute. For example:</p>
+ <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag and the {@code android:glEsVersion} attribute. For example:</p>
<pre>
<manifest>
@@ -942,7 +942,7 @@
<h3 id="ManifestFeatures">Declarable required features</h3>
<p>The following values are now supported in the
-<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element, so you can ensure that your app is installed only on devices that
provide the features your app needs.</p>
@@ -968,7 +968,7 @@
<h3 id="Permissions">User permissions</h3>
<p>The following permission is now supported in the
-<a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a>
+<a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code <uses-permission>}</a>
element to declare the permissions your app requires to access certain APIs.</p>
<ul>
diff --git a/docs/html/distribute/essentials/quality/tv.jd b/docs/html/distribute/essentials/quality/tv.jd
index c7f6fcb..18c7a32 100644
--- a/docs/html/distribute/essentials/quality/tv.jd
+++ b/docs/html/distribute/essentials/quality/tv.jd
@@ -321,7 +321,7 @@
<p style="margin-bottom:.5em;">
If the app uses a game controller as it's primary input method, it declares the appropriate
requirement with the <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"
- >{@code <uses-feature>}</a> manifest tag.
+ >{@code <uses-feature>}</a> manifest tag.
(<a href="{@docRoot}training/tv/games/index.html#gamepad">Learn how</a>)
</p>
</td>
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index eb58af4..52973a8 100644
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -70,7 +70,7 @@
<li>Select <strong>Google Play Billing Library</strong>.</li>
<li>Click <strong>Install packages</strong> to complete the download.</li>
</ol>
-<p>The {@code IInAppBillingService.aidl} file will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
+<p>The {@code IInAppBillingService.aidl} file will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
<p>To add the AIDL to your project:</p>
<ol>
@@ -85,7 +85,7 @@
Application</strong> wizard to create a new project in your workspace.</li>
<li>In the {@code /src} directory, click <strong>File</strong> >
<strong>New</strong> > <strong>Package</strong>, then create a package named {@code com.android.vending.billing}.</li>
- <li>Copy the {@code IInAppBillingService.aidl} file from {@code <sdk>/extras/google/play_billing/} and paste it into the {@code src/com.android.vending.billing/}
+ <li>Copy the {@code IInAppBillingService.aidl} file from {@code <sdk>/extras/google/play_billing/} and paste it into the {@code src/com.android.vending.billing/}
folder in your workspace.</li>
</ol>
</li>
diff --git a/docs/html/google/play/expansion-files.jd b/docs/html/google/play/expansion-files.jd
index 601ea48..0c514b2 100644
--- a/docs/html/google/play/expansion-files.jd
+++ b/docs/html/google/play/expansion-files.jd
@@ -131,7 +131,7 @@
<dt>{@code main} or {@code patch}</dt>
<dd>Specifies whether the file is the main or patch expansion file. There can be
only one main file and one patch file for each APK.</dd>
- <dt>{@code <expansion-version>}</dt>
+ <dt>{@code <expansion-version>}</dt>
<dd>This is an integer that matches the version code of the APK with which the expansion is
<em>first</em> associated (it matches the application's <a
href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
@@ -139,7 +139,7 @@
<p>"First" is emphasized because although the Developer Console allows you to
re-use an uploaded expansion file with a new APK, the expansion file's name does not change—it
retains the version applied to it when you first uploaded the file.</p></dd>
- <dt>{@code <package-name>}</dt>
+ <dt>{@code <package-name>}</dt>
<dd>Your application's Java-style package name.</dd>
</dl>
@@ -162,9 +162,9 @@
</pre>
<ul>
- <li>{@code <shared-storage>} is the path to the shared storage space, available from
+ <li>{@code <shared-storage>} is the path to the shared storage space, available from
{@link android.os.Environment#getExternalStorageDirectory()}.</li>
- <li>{@code <package-name>} is your application's Java-style package name, available
+ <li>{@code <package-name>} is your application's Java-style package name, available
from {@link android.content.Context#getPackageName()}.</li>
</ul>
@@ -464,7 +464,7 @@
<ol>
<li>Begin a new Android project.</li>
<li>Select <strong>Create project from existing
-source</strong> and choose the library from the {@code <sdk>/extras/google/} directory
+source</strong> and choose the library from the {@code <sdk>/extras/google/} directory
({@code market_licensing/} for the License Verification Library or {@code
market_apk_expansion/downloader_library/} for the Downloader Library).</li>
<li>Specify a <em>Project Name</em> such as "Google Play License Library" and "Google Play
@@ -717,7 +717,7 @@
</li>
<li>Start the download by calling the static method {@code
DownloaderClientMarshaller.startDownloadServiceIfRequired(Context c, PendingIntent
-notificationClient, Class<?> serviceClass)}.
+notificationClient, Class<?> serviceClass)}.
<p>The method takes the following parameters:</p>
<ul>
<li><code>context</code>: Your application's {@link android.content.Context}.</li>
@@ -781,7 +781,7 @@
</li>
<li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other
than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by
-calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class<?>
+calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class<?>
downloaderService)}. The {@code IStub} provides a binding between your activity to the downloader
service such that your activity receives callbacks about the download progress.
<p>In order to instantiate your {@code IStub} by calling {@code CreateStub()}, you must pass it
@@ -957,7 +957,7 @@
depends on the type of file you've used. As discussed in the <a href="#Overview">overview</a>, your
expansion files can be any kind of file you
want, but are renamed using a particular <a href="#Filename">file name format</a> and are saved to
-{@code <shared-storage>/Android/obb/<package-name>/}.</p>
+{@code <shared-storage>/Android/obb/<package-name>/}.</p>
<p>Regardless of how you read your files, you should always first check that the external
storage is available for reading. There's a chance that the user has the storage mounted to a
@@ -1060,7 +1060,7 @@
<p>The Google Market Apk Expansion package includes a library called the APK
Expansion Zip Library (located in {@code
-<sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
+<sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
helps you read your expansion
files when they're saved as ZIP files. Using this library allows you to easily read resources from
your ZIP expansion files as a virtual file system.</p>
diff --git a/docs/html/google/play/filters.jd b/docs/html/google/play/filters.jd
index 1ec68c6..50cc807 100644
--- a/docs/html/google/play/filters.jd
+++ b/docs/html/google/play/filters.jd
@@ -338,24 +338,24 @@
<tr><th>Manifest Element</th><th>Summary</th></tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a></nobr></td>
+<compatible-screens>}</a></nobr></td>
<td>
<p>Google Play filters the application if the device screen size and density does not match
-any of the screen configurations (declared by a {@code <screen>} element) in the {@code
-<compatible-screens>} element.</p>
+any of the screen configurations (declared by a {@code <screen>} element) in the {@code
+<compatible-screens>} element.</p>
<p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use
this manifest element</strong>. Using this element can dramatically
reduce the potential user base for your application, by excluding all combinations of screen size
and density that you have not listed. You should instead use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> manifest element (described above in <a href="#table1">table
+<supports-screens>}</a> manifest element (described above in <a href="#table1">table
1</a>) to enable screen compatibility mode for screen configurations you have not accounted for
with alternative resources.</p>
</td>
</tr>
<tr>
<td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a></nobr></td>
+<supports-gl-texture>}</a></nobr></td>
<td>
<p>Google Play filters the application unless one or more of the GL texture compression
formats supported by the application are also supported by the device. </p>
@@ -419,17 +419,17 @@
<li>OpenGL texture compression formats
<p>By using the <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a> element.</p>
+<supports-gl-texture>}</a> element.</p>
</li>
<li>Screen size (and, optionally, screen density)
<p>By using the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> or <a
+<supports-screens>}</a> or <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element.</p>
+<compatible-screens>}</a> element.</p>
</li>
<li>API level
<p>By using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> element.</p>
+<uses-sdk>}</a> element.</p>
</li>
<li>CPU Architecture (ABI)
<p>By including native libraries built with the <a href="{@docRoot}tools/sdk/ndk/index.html">Android
diff --git a/docs/html/google/play/licensing/setting-up.jd b/docs/html/google/play/licensing/setting-up.jd
index f43e4aba..1822337 100644
--- a/docs/html/google/play/licensing/setting-up.jd
+++ b/docs/html/google/play/licensing/setting-up.jd
@@ -180,12 +180,12 @@
<ol>
<li>Launch the Android SDK Manager (available under the Eclipse <strong>Window</strong>
-menu or by executing {@code <sdk>/tools/android sdk}).</li>
+menu or by executing {@code <sdk>/tools/android sdk}).</li>
<li>Select and download <strong>Google APIs</strong> for the Android version you'd like to target
(must be Android 2.2 or higher).</li>
<li>When the download is complete, open the AVD Manager (available under the Eclipse
<strong>Window</strong>
-menu or by executing {@code <sdk>/tools/android avd}).</li>
+menu or by executing {@code <sdk>/tools/android avd}).</li>
<li>Click
<strong>New</strong> and set the configuration details for the new AVD. </li>
<li>In the dialog that appears, assign a descriptive name to the AVD and then
diff --git a/docs/html/google/play/publishing/multiple-apks.jd b/docs/html/google/play/publishing/multiple-apks.jd
index ab08e6f..71a7ae5 100644
--- a/docs/html/google/play/publishing/multiple-apks.jd
+++ b/docs/html/google/play/publishing/multiple-apks.jd
@@ -204,7 +204,7 @@
<li><strong>OpenGL texture compression formats</strong>
<p>This is based on your manifest file's <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a> element(s).</p>
+<supports-gl-texture>}</a> element(s).</p>
<p>For example, when developing a game that uses OpenGL ES, you can provide one APK for
devices that support ATI texture compression and a separate APK for devices
that support PowerVR compression (among many others).</p>
@@ -214,11 +214,11 @@
<li><strong>Screen size (and, optionally, screen density)</strong>
<p>This is based on your manifest file's <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> <em>or</em> <a
+<supports-screens>}</a> <em>or</em> <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element. You should never use both elements and you should use only
+<compatible-screens>}</a> element. You should never use both elements and you should use only
<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> when possible.</p>
+<supports-screens>}</a> when possible.</p>
<p>For example, you can provide one APK that supports small and normal size screens and another
APK that supports large and xlarge screens.</p>
@@ -230,7 +230,7 @@
with a single APK.</p>
<p class="caution"><strong>Caution:</strong> By default, all screen size attributes in the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element are "true" if you do not declare them otherwise. However,
+<supports-screens>}</a> element are "true" if you do not declare them otherwise. However,
because the {@code android:xlargeScreens} attribute was added in Android 2.3 (API level
9), Google Play will assume that it is "false" if your application does not set either <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
@@ -239,9 +239,9 @@
android:targetSdkVersion}</a> to "9" or higher.</p>
<p class="caution"><strong>Caution:</strong> You should not combine both <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> and <a
+<supports-screens>}</a> and <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> elements in your manifest file. Using both increases the chances
+<compatible-screens>}</a> elements in your manifest file. Using both increases the chances
that you'll introduce an error due to conflicts between them. For help deciding which to use, read
<a href="{@docRoot}guide/practices/screens-distribution.html">Distributing to Specific Screens</a>.
If you can't avoid using both, be aware that for any conflicts in agreement between a given size,
@@ -251,7 +251,7 @@
<li><strong>Device feature sets</strong>
<p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element(s).</p>
<p>For example, you can provide one APK for devices that support multitouch and another
APK for devices that do not support multitouch. See
@@ -262,7 +262,7 @@
<li><strong>API level</strong>
<p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element.
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element.
You
can use both the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> and <a
@@ -312,7 +312,7 @@
based on other characteristics in the manifest or APK). For
example, you cannot provide different APKs that differ purely on the <a
href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
-<uses-configuration>}</a> characteristics.</p>
+<uses-configuration>}</a> characteristics.</p>
diff --git a/docs/html/guide/components/activities.jd b/docs/html/guide/components/activities.jd
index 5e6917b..7eeaeeb 100644
--- a/docs/html/guide/components/activities.jd
+++ b/docs/html/guide/components/activities.jd
@@ -141,9 +141,9 @@
<p>You must declare your activity in the manifest file in order for it to
be accessible to the system. To declare your activity, open your manifest file and add an <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
as a child of the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element. For example:</p>
<pre>
@@ -166,16 +166,16 @@
That Cannot Change</a>).</p>
<p>See the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
reference for more information about declaring your activity in the manifest.</p>
<h4>Using intent filters</h4>
<p>An <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> element can also specify various intent filters—using the <a
+<activity>}</a> element can also specify various intent filters—using the <a
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> element—in order to declare how other application components may
+<intent-filter>}</a> element—in order to declare how other application components may
activate it.</p>
<p>When you create a new application using the Android SDK tools, the stub activity
@@ -193,9 +193,9 @@
</pre>
<p>The <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a> element specifies that this is the "main" entry point to the application. The <a
+<action>}</a> element specifies that this is the "main" entry point to the application. The <a
href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> element specifies that this activity should be listed in the
+<category>}</a> element specifies that this activity should be listed in the
system's application launcher (to allow users to launch this activity).</p>
<p>If you intend for your application to be self-contained and not allow other applications to
@@ -208,13 +208,13 @@
other applications (and your own), then you must define additional intent filters for your
activity. For each type of intent to which you want to respond, you must include an <a
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> that includes an
+<intent-filter>}</a> that includes an
<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a> element and, optionally, a <a
+<action>}</a> element and, optionally, a <a
href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> element and/or a <a
+<category>}</a> element and/or a <a
href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> element. These elements specify the type of intent to which your activity can
+<data>}</a> element. These elements specify the type of intent to which your activity can
respond.</p>
<p>For more information about how your activities can respond to intents, see the <a
diff --git a/docs/html/guide/components/aidl.jd b/docs/html/guide/components/aidl.jd
index 0be6e6f..e15e53f1 100644
--- a/docs/html/guide/components/aidl.jd
+++ b/docs/html/guide/components/aidl.jd
@@ -140,7 +140,7 @@
<p>All elements in the {@link java.util.Map} must be one of the supported data types in this
list or one of the other AIDL-generated interfaces or parcelables you've declared. Generic maps,
(such as those of the form
-{@code Map<String,Integer>} are not supported. The actual concrete class that the other side
+{@code Map<String,Integer>} are not supported. The actual concrete class that the other side
receives is always a {@link java.util.HashMap}, although the method is generated to
use the {@link java.util.Map} interface.</p>
</li>
diff --git a/docs/html/guide/components/fragments.jd b/docs/html/guide/components/fragments.jd
index 0065397..3b7da87 100644
--- a/docs/html/guide/components/fragments.jd
+++ b/docs/html/guide/components/fragments.jd
@@ -68,7 +68,7 @@
android.view.ViewGroup} inside the activity's view hierarchy and the fragment defines its own view
layout.
You can insert a fragment into your activity layout by declaring the fragment in the activity's
-layout file, as a {@code <fragment>} element, or from your application code by adding it to an
+layout file, as a {@code <fragment>} element, or from your application code by adding it to an
existing {@link android.view.ViewGroup}. However, a fragment is not required to be a part of the
activity layout; you may also use a fragment without its own UI as an invisible worker for the
activity.</p>
@@ -290,13 +290,13 @@
android:layout_height="match_parent" />
</LinearLayout>
</pre>
- <p>The {@code android:name} attribute in the {@code <fragment>} specifies the {@link
+ <p>The {@code android:name} attribute in the {@code <fragment>} specifies the {@link
android.app.Fragment} class to instantiate in the layout.</p>
<p>When the system creates this activity layout, it instantiates each fragment specified in the
layout and calls the {@link android.app.Fragment#onCreateView onCreateView()} method for each one,
to retrieve each fragment's layout. The system inserts the {@link android.view.View} returned by the
-fragment directly in place of the {@code <fragment>} element.</p>
+fragment directly in place of the {@code <fragment>} element.</p>
<div class="note">
<p><strong>Note:</strong> Each fragment requires a unique identifier that
diff --git a/docs/html/guide/components/fundamentals.jd b/docs/html/guide/components/fundamentals.jd
index fd1a7a8..1d45106 100644
--- a/docs/html/guide/components/fundamentals.jd
+++ b/docs/html/guide/components/fundamentals.jd
@@ -348,7 +348,7 @@
intent filters that declare the capabilities of the activity so it can respond to intents
from other apps. You can declare an intent filter for your component by
adding an <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> element as a child of the component's declaration element.</p>
+<intent-filter>}</a> element as a child of the component's declaration element.</p>
<p>For example, if you've built an email app with an activity for composing a new email, you can
declare an intent filter to respond to "send" intents (in order to send a new email) like this:</p>
diff --git a/docs/html/guide/components/intents-common.jd b/docs/html/guide/components/intents-common.jd
index 8aa5fa9..078ff53 100644
--- a/docs/html/guide/components/intents-common.jd
+++ b/docs/html/guide/components/intents-common.jd
@@ -881,7 +881,7 @@
<dd>{@link android.content.Intent#ACTION_VIEW}</dd>
<dt><b>Data URI Scheme</b></dt>
-<dd>{@code content:<URI>}</dd>
+<dd>{@code content:<URI>}</dd>
<dt><b>MIME Type</b></dt>
<dd>None. The type is inferred from contact URI.
@@ -922,7 +922,7 @@
<dd>{@link android.content.Intent#ACTION_EDIT}</dd>
<dt><b>Data URI Scheme</b></dt>
-<dd>{@code content:<URI>}</dd>
+<dd>{@code content:<URI>}</dd>
<dt><b>MIME Type</b></dt>
<dd>The type is inferred from contact URI.
@@ -1497,9 +1497,9 @@
<dt><b>Data URI Scheme</b></dt>
<dd>
<dl>
- <dt>{@code file:<em><URI></em>}
- <dt>{@code content:<em><URI></em>}
- <dt>{@code http:<em><URL></em>}
+ <dt><code>file:<em><URI></em></code>
+ <dt><code>content:<em><URI></em></code>
+ <dt><code>http:<em><URL></em></code>
</dl>
</dd>
@@ -1830,8 +1830,8 @@
<dt><b>Data URI Scheme</b></dt>
<dd>
<ul>
- <li>{@code tel:<phone-number>}</li>
- <li>{@code voicemail:<phone-number>}</li>
+ <li>{@code tel:<phone-number>}</li>
+ <li>{@code voicemail:<phone-number>}</li>
</ul>
</dd>
@@ -2042,10 +2042,10 @@
<dt><b>Data URI Scheme</b></dt>
<dd>
<dl>
- <dt>{@code sms:<em><phone_number></em>}
- <dt>{@code smsto:<em><phone_number></em>}
- <dt>{@code mms:<em><phone_number></em>}
- <dt>{@code mmsto:<em><phone_number></em>}
+ <dt><code>sms:<em><phone_number></em></code>
+ <dt><code>smsto:<em><phone_number></em></code>
+ <dt><code>mms:<em><phone_number></em></code>
+ <dt><code>mmsto:<em><phone_number></em></code>
</dl>
<p>Each of these schemes are handled the same.
</dd>
@@ -2158,8 +2158,8 @@
<dd>{@link android.content.Intent#ACTION_VIEW}<dd>
<dt><b>Data URI Scheme</b></dt>
- <dd>{@code http:<em><URL></em>}<br/>
- {@code https:<em><URL></em>}</dd>
+ <dd><code>http:<em><URL></em></code><br/>
+ <code>https:<em><URL></em></code></dd>
<dt><b>MIME Type</b></dt>
<dd>
diff --git a/docs/html/guide/components/intents-filters.jd b/docs/html/guide/components/intents-filters.jd
index 0759088..abc67f2 100644
--- a/docs/html/guide/components/intents-filters.jd
+++ b/docs/html/guide/components/intents-filters.jd
@@ -455,7 +455,7 @@
<p>To advertise which implicit intents your app can receive, declare one or more intent filters for
each of your app components with an <a href=
-"{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+"{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
element in your <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a>.
Each intent filter specifies the type of intents it accepts based on the intent's action,
data, and category. The system will deliver an implicit intent to your app component only if the
@@ -471,23 +471,23 @@
in the {@link android.content.Intent} (such as to show the editor controls or not).</p>
<p>Each intent filter is defined by an <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
element in the app's manifest file, nested in the corresponding app component (such
-as an <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+as an <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element). Inside the <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>,
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>,
you can specify the type of intents to accept using one or more
of these three elements:</p>
<dl>
-<dt><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a></dt>
+<dt><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a></dt>
<dd>Declares the intent action accepted, in the {@code name} attribute. The value
must be the literal string value of an action, not the class constant.</dd>
-<dt><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a></dt>
+<dt><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a></dt>
<dd>Declares the type of data accepted, using one or more attributes that specify various
aspects of the data URI (<code>scheme</code>, <code>host</code>, <code>port</code>,
<code>path</code>, etc.) and MIME type.</dd>
-<dt><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a></dt>
+<dt><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a></dt>
<dd>Declares the intent category accepted, in the {@code name} attribute. The value
must be the literal string value of an action, not the class constant.
@@ -516,9 +516,9 @@
</pre>
<p>It's okay to create a filter that includes more than one instance of
-<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>,
-<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>, or
-<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>.
+<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>,
+<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>, or
+<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>.
If you do, you simply need to be certain that the component can handle any and all combinations
of those filter elements.</p>
@@ -607,9 +607,9 @@
indicates this is the main entry point and does not expect any intent data.</li>
<li>The {@link android.content.Intent#CATEGORY_LAUNCHER} category indicates that this activity's
icon should be placed in the system's app launcher. If the <a
- href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
+ href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
does not specify an icon with {@code icon}, then the system uses the icon from the <a
- href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+ href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element.</li>
</ul>
<p>These two must be paired together in order for the activity to appear in the app launcher.</p>
@@ -715,7 +715,7 @@
<p>To specify accepted intent actions, an intent filter can declare zero or more
<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a> elements. For example:</p>
+<action>}</a> elements. For example:</p>
<pre>
<intent-filter>
@@ -739,7 +739,7 @@
<p>To specify accepted intent categories, an intent filter can declare zero or more
<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a> elements. For example:</p>
+<category>}</a> elements. For example:</p>
<pre>
<intent-filter>
@@ -762,7 +762,7 @@
android.app.Activity#startActivityForResult startActivityForResult()}.
So if you want your activity to receive implicit intents, it must
include a category for {@code "android.intent.category.DEFAULT"} in its intent filters (as
-shown in the previous {@code <intent-filter>} example.</p>
+shown in the previous {@code <intent-filter>} example.</p>
@@ -770,7 +770,7 @@
<p>To specify accepted intent data, an intent filter can declare zero or more
<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> elements. For example:</p>
+<data>}</a> elements. For example:</p>
<pre>
<intent-filter>
@@ -786,7 +786,7 @@
and {@code path} — for each part of the URI:
</p>
-<p style="margin-left: 2em">{@code <scheme>://<host>:<port>/<path>}</p>
+<p style="margin-left: 2em">{@code <scheme>://<host>:<port>/<path>}</p>
<p>
For example:
@@ -799,7 +799,7 @@
</p>
<p>Each of these attributes is optional in a <a
-href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element,
+href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element,
but there are linear dependencies:</p>
<ul>
<li>If a scheme is not specified, the host is ignored.</li>
@@ -851,7 +851,7 @@
Therefore, their filters can list just a data type and do not need to explicitly
name the {@code content:} and {@code file:} schemes.
This is a typical case. A <a
-href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element
+href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element
like the following, for example, tells Android that the component can get image data from a content
provider and display it:
</p>
@@ -870,7 +870,7 @@
<p>
Another common configuration is filters with a scheme and a data type. For
example, a <a
-href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>
+href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>
element like the following tells Android that
the component can retrieve video data from the network in order to perform the action:
</p>
diff --git a/docs/html/guide/components/processes-and-threads.jd b/docs/html/guide/components/processes-and-threads.jd
index 10a6410..7bb3c65 100644
--- a/docs/html/guide/components/processes-and-threads.jd
+++ b/docs/html/guide/components/processes-and-threads.jd
@@ -45,10 +45,10 @@
<p>The manifest entry for each type of component element—<a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
-<service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
-<receiver>}</a>, and <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
-<provider>}</a>—supports an {@code android:process} attribute that can specify a
+<activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
+<service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
+<receiver>}</a>, and <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
+<provider>}</a>—supports an {@code android:process} attribute that can specify a
process in which that component should run. You can set this attribute so that each component runs
in its own process or so that some components share a process while others do not. You can also set
{@code android:process} so that components of different applications run in the same
@@ -56,7 +56,7 @@
same certificates.</p>
<p>The <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-<application>}</a> element also supports an {@code android:process} attribute, to set a
+<application>}</a> element also supports an {@code android:process} attribute, to set a
default value that applies to all components.</p>
<p>Android might decide to shut down a process at some point, when memory is low and required by
diff --git a/docs/html/guide/components/services.jd b/docs/html/guide/components/services.jd
index b8c105d..8da1694 100644
--- a/docs/html/guide/components/services.jd
+++ b/docs/html/guide/components/services.jd
@@ -189,9 +189,9 @@
manifest file.</p>
<p>To declare your service, add a <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
as a child of the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element. For example:</p>
<pre>
@@ -205,11 +205,11 @@
</pre>
<p>See the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element
reference for more information about declaring your service in the manifest.</p>
<p>There are other attributes you can include in the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element to
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> element to
define properties such as permissions required to start the service and the process in
which the service should run. The <a
href="{@docRoot}guide/topics/manifest/service-element.html#nm">{@code android:name}</a>
diff --git a/docs/html/guide/components/tasks-and-back-stack.jd b/docs/html/guide/components/tasks-and-back-stack.jd
index aaef10e..c77b545 100644
--- a/docs/html/guide/components/tasks-and-back-stack.jd
+++ b/docs/html/guide/components/tasks-and-back-stack.jd
@@ -30,7 +30,7 @@
<li><a href="{@docRoot}design/patterns/navigation.html">Android Design:
Navigation</a></li>
<li><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>} manifest
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>} manifest
element</a></li>
<li><a href="{@docRoot}guide/components/recents.html">Overview Screen</a></li>
</ol>
@@ -221,12 +221,12 @@
activities except for the root activity when the user leaves the task.</p>
<p>You can do these things and more, with attributes in the
-<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
manifest element and with flags in the intent that you pass to
{@link android.app.Activity#startActivity startActivity()}.</p>
<p>In this regard, the principal <a href="{@docRoot}guide/topics/manifest/activity-element.html">
-{@code <activity>}</a> attributes you can use are:</p>
+{@code <activity>}</a> attributes you can use are:</p>
<ul class="nolist">
<li><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">
@@ -295,7 +295,7 @@
<p>When declaring an activity in your manifest file, you can specify how the activity should
associate with a task using the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element's <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
launchMode}</a> attribute.</p>
@@ -351,7 +351,7 @@
<p>As another example, the Android Browser application declares that the web browser activity should
always open in its own task—by specifying the {@code singleTask} launch mode in the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.
This means that if your application issues an
intent to open the Android Browser, its activity is <em>not</em> placed in the same
task as your application. Instead, either a new task starts for the Browser or, if the Browser
@@ -440,14 +440,14 @@
<p>You can modify the affinity for any given activity with the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> attribute
-of the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+of the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element.</p>
<p>The <a
href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
attribute takes a string value, which must be unique from the default package name
declared in the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">
-{@code <manifest>}
+{@code <manifest>}
</a> element, because the system uses that name to identify the default task
affinity for the application.</p>
diff --git a/docs/html/guide/practices/compatibility.jd b/docs/html/guide/practices/compatibility.jd
index db1642e..1bfc99d3 100644
--- a/docs/html/guide/practices/compatibility.jd
+++ b/docs/html/guide/practices/compatibility.jd
@@ -119,7 +119,7 @@
<p>If necessary, you can prevent users from installing your app when their devices don't provide a
given feature by declaring it with a <a href=
-"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element in your app's <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest
file</a>.</p>
@@ -169,7 +169,7 @@
on this feature and make your app available to devices without Bluetooth by setting the <a href=
"{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a> attribute
to {@code "false"} in the <a href=
-"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag.
+"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag.
For more information about implicitly required device features, read <a href=
"{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions that Imply
Feature Requirements</a>.</p>
@@ -191,7 +191,7 @@
<p>The API level allows you to declare the minimum version with which your app is
compatible, using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> manifest tag and its <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> attribute.</p>
+<uses-sdk>}</a> manifest tag and its <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> attribute.</p>
<p>For example, the <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar
Provider</a> APIs were added in Android 4.0 (API level 14). If your app cannot function without
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
index fea54af..4f3d0f2 100644
--- a/docs/html/guide/practices/optimizing-for-3.0.jd
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -188,7 +188,7 @@
<li><b>Apply the new "holographic" theme to your application</b>
<ol>
<li>Open your manifest file and update the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element to
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element to
set <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to {@code "11"}. For example:
@@ -383,9 +383,9 @@
<p>Android 3.0 adds a hardware-accelerated OpenGL renderer that gives a performance boost to most 2D
graphics operations. You can enable hardware-accelerated rendering in your application by setting
{@code android:hardwareAccelerated="true"} in your manifest's <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element or for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> elements. Hardware acceleration results in smoother animations, smoother
+<activity>}</a> elements. Hardware acceleration results in smoother animations, smoother
scrolling, and overall better performance and response to user interaction. When enabled, be sure
that you thoroughly test your application on a device that supports hardware acceleration.</p>
@@ -500,7 +500,7 @@
not fit a smaller screen or you've explicitly designed your application only for tablets and other
large devices. In this case, you can manage the availability of your application to smaller screens
by using the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> manifest element.</p>
+<supports-screens>}</a> manifest element.</p>
<p>For example, if you want your application to be available only to extra large
screens, you can declare the element in your manifest like this:</p>
@@ -523,7 +523,7 @@
<p class="note"><strong>Note:</strong> If you use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element for the reverse scenario (when your application is not compatible
+<supports-screens>}</a> element for the reverse scenario (when your application is not compatible
with <em>larger</em> screens) and set the larger screen size attributes to {@code "false"}, then
external services such as Google Play <strong>do not</strong> apply filtering. Your application
will still be available to larger screens, but when it runs, it will not fill the screen—the
@@ -540,22 +540,22 @@
that each deliver different features for different screen configurations, so you don't want
larger devices to download the version designed for smaller screens. In such a case, you can
use the <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element to manage the distribution of your application based on the
+<compatible-screens>}</a> element to manage the distribution of your application based on the
combination of screen size and density. External services such as
Google Play uses this information to apply filtering to your application, so that only devices
that have a screen configuration with which you declare compatibility can download your
application.</p>
<p>The <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element must contain one or more {@code <screen>} elements,
+<compatible-screens>}</a> element must contain one or more {@code <screen>} elements,
which each specify a screen configuration with which your application is compatible, using both
the {@code android:screenSize} and {@code android:screenDensity} attributes. Each {@code
-<screen>} element <strong>must include both attributes</strong> to specify an individual
+<screen>} element <strong>must include both attributes</strong> to specify an individual
screen configuration—if either attribute is missing, then the element is invalid
(external services such as Google Play will ignore it).</p>
<p>For example, if your application is compatible with only small and normal screens, regardless
-of screen density, then you must specify eight different {@code <screen>} elements,
+of screen density, then you must specify eight different {@code <screen>} elements,
because each screen size has four density configurations. You must declare each one of
these; any combination of size and density that you do <em>not</em> specify is considered a screen
configuration with which your application is <em>not</em> compatible. Here's what the manifest
@@ -584,17 +584,17 @@
<p class="note"><strong>Note:</strong> Although you can also use the <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element for the reverse scenario (when your application is not
+<compatible-screens>}</a> element for the reverse scenario (when your application is not
compatible with smaller screens), it's easier if you instead use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> as discussed in the previous section, because it doesn't require you
+<supports-screens>}</a> as discussed in the previous section, because it doesn't require you
to specify each screen density your application supports.</p>
<p>Remember, you should strive to make your application available to as many devices as possible by
applying all necessary techniques for <a
href="{@docRoot}guide/practices/screens_support.html">supporting multiple screens</a>. You should
then use the <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element to filter your application from certain devices only when you
+<compatible-screens>}</a> element to filter your application from certain devices only when you
cannot offer compatibility on all screen configurations or you have decided to provide
multiple versions of your application, each for a different set of screen configurations.</p>
@@ -650,7 +650,7 @@
<p>In the worst-case scenario, however, you can avoid orientation changes by using the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
android:screenOrientation}</a> attribute in the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element. Instead of locking the orientation in landscape or portrait, however, you should
specify a value of {@code "nosensor"}. This way, your activity uses whatever orientation the
device specifies as its natural orientation and the screen will not rotate. You should still
@@ -676,7 +676,7 @@
traditional phone calls or handle SMS. Some devices might also omit
other hardware features, such as Bluetooth. If your application uses these features, then your
manifest file probably already includes (or should include) a declaration of the feature with the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element. Doing so prevents devices that do not declare support for the feature from downloading
your applications. For example:</p>
diff --git a/docs/html/guide/practices/screen-compat-mode.jd b/docs/html/guide/practices/screen-compat-mode.jd
index e3160c39..34580ba 100644
--- a/docs/html/guide/practices/screen-compat-mode.jd
+++ b/docs/html/guide/practices/screen-compat-mode.jd
@@ -18,7 +18,7 @@
<ol>
<li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
<li><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a></li>
+<supports-screens>}</a></li>
</ol>
</div>
</div>
@@ -123,7 +123,7 @@
android:targetSdkVersion}</a> to {@code "10"} or lower and <strong>does not explicitly
declare support</strong> for large screens using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element.</li>
+<supports-screens>}</a> element.</li>
<li>Your application has set either <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
@@ -131,7 +131,7 @@
android:targetSdkVersion}</a> to {@code "11"} or higher and <strong>explicitly declares that it does
not support</strong> large screens, using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element.</li>
+<supports-screens>}</a> element.</li>
</ul>
<p>To completely disable the user option for screen compatibility mode and remove the icon in the
@@ -141,7 +141,7 @@
<li><strong>Easiest:</strong>
<p>In your manifest file, add the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element and specify the <a
+<supports-screens>}</a> element and specify the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html#xlarge">{@code
android:xlargeScreens}</a> attribute to {@code "true"}:</p>
<pre>
@@ -150,13 +150,13 @@
<p>That's it. This declares that your application supports all larger screen sizes, so the
system will always resize your layout to fit the screen. This works regardless of what values
you've set in the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
attributes.</p>
</li>
<li><strong>Easy but has other effects:</strong>
<p>In your manifest's <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a>
element, set <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to {@code "11"} or higher:</p>
@@ -171,10 +171,10 @@
Options Menu button in the system bar.</p>
<p>If screen compatibility mode is still enabled after you change this, check your manifest's <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> and be sure that there are no attributes set {@code "false"}. The best
+<supports-screens>}</a> and be sure that there are no attributes set {@code "false"}. The best
practice is to always explicitly declare your support for different screen sizes using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element, so you should use this element anyway.</p>
+<supports-screens>}</a> element, so you should use this element anyway.</p>
<p>For more information about updating your application to target Android 3.0 devices, read <a
href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android
3.0</a>.</p>
@@ -183,7 +183,7 @@
<li><strong>Most control</strong> (but you must compile against Android 3.2 or higher):
<p>In your manifest file, add the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element and specify the {@code android:compatibleWidthLimitDp}
+<supports-screens>}</a> element and specify the {@code android:compatibleWidthLimitDp}
attribute to any value <em>higher than</em> {@code "320"}:</p>
<pre>
<supports-screens android:compatibleWidthLimitDp="720" />
@@ -206,7 +206,7 @@
<p>When your application is targeting Android 3.2 (API level 13) or higher, you can affect
whether compatibility mode is enabled for certain screens by using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element.</p>
+<supports-screens>}</a> element.</p>
<p class="note"><strong>Note:</strong> Screen compatibility mode is <strong>not</strong> a mode in
which you should want your application to run—it causes pixelation and blurring in your UI,
@@ -227,7 +227,7 @@
<ul>
<li>In your manifest file, add the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element and specify the <a
+<supports-screens>}</a> element and specify the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html#compatibleWidth">{@code
android:compatibleWidthLimitDp}</a> attribute to {@code "320"}:</p>
<pre>
diff --git a/docs/html/guide/practices/screens-distribution.jd b/docs/html/guide/practices/screens-distribution.jd
index 99eb04e..92416e0 100644
--- a/docs/html/guide/practices/screens-distribution.jd
+++ b/docs/html/guide/practices/screens-distribution.jd
@@ -58,21 +58,21 @@
might discover that your application can't scale up well or perhaps you've decided to publish two
versions of your application for different screen configurations. In such a case, you can use the <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element to manage the distribution of your application based on
+<compatible-screens>}</a> element to manage the distribution of your application based on
combinations of screen size and density. External services such as Google Play use this
information to apply filtering to your application, so that only devices that have a screen
configuration with which you declare compatibility can download your application.</p>
<p>The <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element must contain one or more {@code <screen>} elements. Each
-{@code <screen>} element specifies a screen configuration with which your application is
+<compatible-screens>}</a> element must contain one or more {@code <screen>} elements. Each
+{@code <screen>} element specifies a screen configuration with which your application is
compatible, using both the {@code android:screenSize} and {@code android:screenDensity} attributes.
-Each {@code <screen>} element <strong>must include both attributes</strong> to specify an
+Each {@code <screen>} element <strong>must include both attributes</strong> to specify an
individual screen configuration—if either attribute is missing, then the element is invalid
(external services such as Google Play will ignore it).</p>
<p>For example, if your application is compatible with only small and normal size screens,
-regardless of screen density, you must specify eight different {@code <screen>} elements,
+regardless of screen density, you must specify eight different {@code <screen>} elements,
because each screen size has four density configurations. You must declare each one of
these; any combination of size and density that you do <em>not</em> specify is considered a screen
configuration with which your application is <em>not</em> compatible. Here's what the manifest
@@ -101,10 +101,10 @@
<p class="note"><strong>Note:</strong> Although you can also use the <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> element for the reverse scenario (when your application is not
+<compatible-screens>}</a> element for the reverse scenario (when your application is not
compatible with smaller screens), it's easier if you instead use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> as discussed in the next section, because it doesn't require you
+<supports-screens>}</a> as discussed in the next section, because it doesn't require you
to specify each screen density your application supports.</p>
@@ -116,7 +116,7 @@
large screen) or you need time to optimize it for smaller screens, you can prevent small-screen
devices from downloading your app by using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> manifest element.</p>
+<supports-screens>}</a> manifest element.</p>
<p>For example, if you want your application to be available only to tablet devices, you can declare
the element in your manifest like this:</p>
@@ -172,7 +172,7 @@
<p class="caution"><strong>Caution:</strong> If you use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element for the reverse scenario (when your application is not compatible
+<supports-screens>}</a> element for the reverse scenario (when your application is not compatible
with <em>larger</em> screens) and set the larger screen size attributes to {@code "false"}, then
external services such as Google Play <strong>do not</strong> apply filtering. Your application
will still be available to larger screens, but when it runs, it will not resize to fit the screen.
@@ -181,16 +181,16 @@
information). If you want
to prevent your application from being downloaded on larger screens, use <a
href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a>, as discussed in the previous section about <a
+<compatible-screens>}</a>, as discussed in the previous section about <a
href="#FilteringHandsetApps">Declaring an App is Only for Handsets</a>.</p>
<p>Remember, you should strive to make your application available to as many devices as possible by
applying all necessary techniques for <a
href="{@docRoot}guide/practices/screens_support.html">supporting multiple screens</a>. You should
use <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-<compatible-screens>}</a> or <a
+<compatible-screens>}</a> or <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> only when you cannot provide compatibility on all screen configurations
+<supports-screens>}</a> only when you cannot provide compatibility on all screen configurations
or you have decided to provide different versions of your application for different sets of screen
configurations.</p>
diff --git a/docs/html/guide/practices/screens-support-1.5.jd b/docs/html/guide/practices/screens-support-1.5.jd
index ad680d9..1676674 100644
--- a/docs/html/guide/practices/screens-support-1.5.jd
+++ b/docs/html/guide/practices/screens-support-1.5.jd
@@ -38,7 +38,7 @@
screens, using alternative resources for different screen configurations.</p>
<p>If your manifest file includes the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element,
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element,
with the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
attribute set to {@code "3"} or lower, and does <em>not</em> include the <a
@@ -87,7 +87,7 @@
<li>Extend compatibility for Android 1.6 (and higher) devices by adding <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element.
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element.
Set the value of <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to <code>"4"</code>. This allows your application to "inherit" the
platform's multiple screens support, even though it is technically using an earlier version of the
diff --git a/docs/html/guide/practices/screens_support.jd b/docs/html/guide/practices/screens_support.jd
index b6f1c49..1335790 100644
--- a/docs/html/guide/practices/screens_support.jd
+++ b/docs/html/guide/practices/screens_support.jd
@@ -315,7 +315,7 @@
href="{@docRoot}guide/practices/screen-compat-mode.html">screen compatibility mode</a>.</p>
<p>To declare the screen sizes your application supports, you should include the
<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element in your manifest file.</p>
+<supports-screens>}</a> element in your manifest file.</p>
</li>
<li><strong>Provide different layouts for different screen sizes</strong>
@@ -328,7 +328,7 @@
<code>small</code>, <code>normal</code>, <code>large</code>, and <code>xlarge</code>. For
example, layouts for an extra-large screen should go in {@code layout-xlarge/}.</p>
<p>Beginning with Android 3.2 (API level 13), the above size groups are deprecated and you
-should instead use the {@code sw<N>dp} configuration qualifier to define the smallest
+should instead use the {@code sw<N>dp} configuration qualifier to define the smallest
available width required by your layout resources. For example, if your multi-pane tablet layout
requires at least 600dp of screen width, you should place it in {@code layout-sw600dp/}. Using the
new techniques for declaring layout resources is discussed further in the section about <a
@@ -429,15 +429,15 @@
<p>To use a configuration qualifier:</p>
<ol>
<li>Create a new directory in your project's {@code res/} directory and name it using the
-format: <nobr>{@code <resources_name>-<qualifier>}</nobr>
+format: <nobr>{@code <resources_name>-<qualifier>}</nobr>
<ul>
- <li>{@code <resources_name>} is the standard resource name (such as {@code drawable} or
+ <li>{@code <resources_name>} is the standard resource name (such as {@code drawable} or
{@code layout}).</li>
- <li>{@code <qualifier>} is a configuration qualifier from table 1, below, specifying the
+ <li>{@code <qualifier>} is a configuration qualifier from table 1, below, specifying the
screen configuration for which these resources are to be used (such as {@code hdpi} or {@code
xlarge}).</li>
</ul>
- <p>You can use more than one {@code <qualifier>} at a time—simply separate each
+ <p>You can use more than one {@code <qualifier>} at a time—simply separate each
qualifier with a dash.</p>
</li>
<li>Save the appropriate configuration-specific resources in this new directory. The resource
@@ -759,7 +759,7 @@
screen area. Specifically, the device's smallestWidth is the shortest of the screen's available
height and width (you may also think of it as the "smallest possible width" for the screen). You can
use this qualifier to ensure that, regardless of the screen's current orientation, your
-application's has at least {@code <N>} dps of width available for its UI.</p>
+application's has at least {@code <N>} dps of width available for its UI.</p>
<p>For example, if your layout requires that its smallest dimension of screen area be at
least 600 dp at all times, then you can use this qualifier to create the layout resources, {@code
res/layout-sw600dp/}. The system will use these resources only when the smallest dimension of
@@ -868,8 +868,8 @@
</pre>
<p>Notice that the previous two sets of example resources use the "smallest width" qualifier, {@code
-sw<N>dp}, which specifies the smallest of the screen's two sides, regardless of the
-device's current orientation. Thus, using {@code sw<N>dp} is a simple way to specify the
+sw<N>dp}, which specifies the smallest of the screen's two sides, regardless of the
+device's current orientation. Thus, using {@code sw<N>dp} is a simple way to specify the
overall screen size available for your layout by ignoring the screen's orientation.</p>
<p>However, in some cases, what might be
@@ -883,13 +883,13 @@
res/layout-w600dp/main_activity.xml # Multi-pane (any screen with 600dp available width or more)
</pre>
-<p>Notice that the second set is using the "available width" qualifier, {@code w<N>dp}. This
+<p>Notice that the second set is using the "available width" qualifier, {@code w<N>dp}. This
way, one device may actually use both layouts, depending on the orientation of the screen (if
the available width is at least 600dp in one orientation and less than 600dp in the other
orientation).</p>
<p>If the available height is a concern for you, then you can do the same using the {@code
-h<N>dp} qualifier. Or, even combine the {@code w<N>dp} and {@code h<N>dp}
+h<N>dp} qualifier. Or, even combine the {@code w<N>dp} and {@code h<N>dp}
qualifiers if you need to be really specific.</p>
@@ -1287,7 +1287,7 @@
<p>To launch the Android SDK Manager, execute the {@code
SDK Manager.exe} from your Android SDK directory (on Windows only) or execute {@code android} from
-the {@code <sdk>/tools/} directory (on all platforms). Figure 6 shows the AVD
+the {@code <sdk>/tools/} directory (on all platforms). Figure 6 shows the AVD
Manager with a selection of AVDs, for testing various screen configurations.</p>
<p>Table 3 shows the various emulator skins that are available in the Android SDK, which you can use
diff --git a/docs/html/guide/practices/tablets-and-handsets.jd b/docs/html/guide/practices/tablets-and-handsets.jd
index a63a368..85327b6 100644
--- a/docs/html/guide/practices/tablets-and-handsets.jd
+++ b/docs/html/guide/practices/tablets-and-handsets.jd
@@ -424,8 +424,8 @@
at the top.</p>
<p>To enable split action bar, simply add {@code uiOptions="splitActionBarWhenNarrow"} to your
-<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> or
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
manifest element.</p>
diff --git a/docs/html/guide/topics/connectivity/bluetooth-le.jd b/docs/html/guide/topics/connectivity/bluetooth-le.jd
index 5c32e56..3d60686 100644
--- a/docs/html/guide/topics/connectivity/bluetooth-le.jd
+++ b/docs/html/guide/topics/connectivity/bluetooth-le.jd
@@ -186,7 +186,7 @@
<p>Before your application can communicate over BLE, you need
to verify that BLE is supported on the device, and if so, ensure that it is enabled.
-Note that this check is only necessary if {@code <uses-feature.../>}
+Note that this check is only necessary if {@code <uses-feature.../>}
is set to false.</p>
<p>If BLE is not supported, then you should gracefully disable any
diff --git a/docs/html/guide/topics/connectivity/nfc/hce.jd b/docs/html/guide/topics/connectivity/nfc/hce.jd
index 9ec1a8d..900d8ac 100644
--- a/docs/html/guide/topics/connectivity/nfc/hce.jd
+++ b/docs/html/guide/topics/connectivity/nfc/hce.jd
@@ -184,7 +184,7 @@
<p>Your application can check whether a device supports HCE by checking for the
{@link android.content.pm.PackageManager#FEATURE_NFC_HOST_CARD_EMULATION} feature. You should use the
-<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag in the manifest of your application to declare that your app
+<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag in the manifest of your application to declare that your app
uses the HCE feature, and whether it is required for the app to function or not.</p>
<h3 id="ServiceImplementation">Service implementation</h3>
diff --git a/docs/html/guide/topics/data/backup.jd b/docs/html/guide/topics/data/backup.jd
index 5710a47..9554835 100644
--- a/docs/html/guide/topics/data/backup.jd
+++ b/docs/html/guide/topics/data/backup.jd
@@ -160,7 +160,7 @@
href="{@docRoot}guide/topics/manifest/application-element.html#agent">{@code
android:backupAgent}</a> attribute in the <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-<application>}</a> tag.</p>
+<application>}</a> tag.</p>
<p>For example:</p>
@@ -205,8 +205,8 @@
<p>To get your Backup Service Key, <a
href="http://code.google.com/android/backup/signup.html">register for Android Backup Service</a>.
When you register, you will be provided a Backup Service Key and the appropriate {@code
-<meta-data>} XML code for your Android manifest file, which you must include as a child of the
-{@code <application>} element. For example:</p>
+<meta-data>} XML code for your Android manifest file, which you must include as a child of the
+{@code <application>} element. For example:</p>
<pre>
<application android:label="MyApplication"
@@ -231,7 +231,7 @@
your application to know what transport is used on the device. However, if you implement backup for
your application, you should always include a Backup Service Key for Android Backup Service so
your application can perform backup when the device uses the Android Backup Service transport. If
-the device does not use Android Backup Service, then the {@code <meta-data>} element with the
+the device does not use Android Backup Service, then the {@code <meta-data>} element with the
Backup Service Key is ignored.</p>
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index 24e7f54..46db371 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -190,8 +190,8 @@
<p class="note"><strong>Tip:</strong> If you want to save a static file in your application at
compile time, save the file in your project <code>res/raw/</code> directory. You can open it with
-{@link android.content.res.Resources#openRawResource(int) openRawResource()}, passing the {@code
-R.raw.<em><filename></em>} resource ID. This method returns an {@link java.io.InputStream}
+{@link android.content.res.Resources#openRawResource(int) openRawResource()}, passing the
+<code>R.raw.<em><filename></em></code> resource ID. This method returns an {@link java.io.InputStream}
that you can use to read the file (but you cannot write to the original file).
</p>
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index 3e3d569..80b3c2b 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -242,7 +242,7 @@
<li><strong>Texture compression requirements</strong> - If your application uses texture
compression formats, you must declare the formats your application supports in your manifest file
using <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-<supports-gl-texture>}</a>. For more information about available texture compression
+<supports-gl-texture>}</a>. For more information about available texture compression
formats, see <a href="#textures">Texture compression support</a>.
<p>Declaring texture compression requirements in your manifest hides your application from users
@@ -250,7 +250,7 @@
information on how Google Play filtering works for texture compressions, see the <a
href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html#market-texture-filtering">
Google Play and texture compression filtering</a> section of the {@code
-<supports-gl-texture>} documentation.</p>
+<supports-gl-texture>} documentation.</p>
</li>
</ul>
@@ -503,9 +503,9 @@
reducing memory requirements and making more efficient use of memory bandwidth. The Android
framework provides support for the ETC1 compression format as a standard feature, including a {@link
android.opengl.ETC1Util} utility class and the {@code etc1tool} compression tool (located in the
-Android SDK at {@code <sdk>/tools/}). For an example of an Android application that uses
+Android SDK at {@code <sdk>/tools/}). For an example of an Android application that uses
texture compression, see the {@code CompressedTextureActivity} code sample in Android SDK
-({@code <sdk>/samples/<version>/ApiDemos/src/com/example/android/apis/graphics/}).</p>
+({@code <sdk>/samples/<version>/ApiDemos/src/com/example/android/apis/graphics/}).</p>
<p class="caution"><strong>Caution:</strong> The ETC1 format is supported by most Android devices,
but it not guaranteed to be available. To check if the ETC1 format is supported on a device, call
diff --git a/docs/html/guide/topics/manifest/action-element.jd b/docs/html/guide/topics/manifest/action-element.jd
index 54ee6ae..fc6ce44 100644
--- a/docs/html/guide/topics/manifest/action-element.jd
+++ b/docs/html/guide/topics/manifest/action-element.jd
@@ -14,7 +14,7 @@
<dt>description:</dt>
<dd itemprop="description">Adds an action to an intent filter.
An <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element must contain
-one or more {@code <action>} elements. If it doesn't contain any, no
+one or more {@code <action>} elements. If it doesn't contain any, no
Intent objects will get through the filter. See
<a href="{@docRoot}guide/components/intents-filters.html">Intents and
Intent Filters</a> for details on intent filters and the role of action
@@ -26,9 +26,9 @@
<dt><a name="nm"></a>{@code android:name}</dt>
<dd>The name of the action. Some standard actions are defined in the
{@link android.content.Intent#ACTION_CHOOSER Intent} class as
-{@code ACTION_<i>string</i>} constants. To assign one of these actions to
+<code>ACTION_<i>string</i></code> constants. To assign one of these actions to
this attribute, prepend "{@code android.intent.action.}" to the
-{@code <i>string</i>} that follows {@code ACTION_}.
+<code><i>string</i></code> that follows {@code ACTION_}.
For example, for {@code ACTION_MAIN}, use "{@code android.intent.action.MAIN}"
and for {@code ACTION_WEB_SEARCH}, use "{@code android.intent.action.WEB_SEARCH}".
diff --git a/docs/html/guide/topics/manifest/activity-alias-element.jd b/docs/html/guide/topics/manifest/activity-alias-element.jd
index 343b02e..1427b55 100644
--- a/docs/html/guide/topics/manifest/activity-alias-element.jd
+++ b/docs/html/guide/topics/manifest/activity-alias-element.jd
@@ -42,7 +42,7 @@
</p>
<p>
-With the exception of {@code targetActivity}, {@code <activity-alias>}
+With the exception of {@code targetActivity}, {@code <activity-alias>}
attributes are a subset of <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> attributes.
For attributes in the subset, none of the values set for the target carry over
to the alias. However, for attributes not in the subset, the values set for
@@ -60,7 +60,7 @@
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all
application components, including activity aliases. The
-<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <activity-alias>}
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <activity-alias>}
attributes must both be "{@code true}" for the system to be able to instantiate
the target activity through the alias. If either is "{@code false}", the alias
does not work.
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index 99e64d9..fd1729c 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -64,7 +64,7 @@
<dt>description:</dt>
<dd itemprop="description">Declares an activity (an {@link android.app.Activity} subclass) that
implements part of the application's visual user interface. All activities
-must be represented by {@code <activity>}
+must be represented by {@code <activity>}
elements in the manifest file. Any that are not declared there will not be seen
by the system and will never be run.
@@ -158,7 +158,7 @@
<dt><a name="banner"></a>{@code android:banner}</dt>
<dd>A <a href="{@docRoot}guide/topics/resources/drawable-resource.html">drawable resource</a>
providing an extended graphical banner for its associated item. Use with the
-{@code <activity>} tag to supply a default banner for a specific activity, or with the
+{@code <activity>} tag to supply a default banner for a specific activity, or with the
<a href="{@docRoot}guide/topics/manifest/application-element.html"><code><application></code></a>
tag to supply a banner for all application activities.
@@ -168,7 +168,7 @@
{@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} intent.</p>
<p>This attribute must be set as a reference to a drawable resource containing
-the image (for example {@code "@drawable/banner"}). There is no default banner.
+the image (for example {@code "@drawable/banner"}). There is no default banner.
</p>
<p>
@@ -373,7 +373,7 @@
<a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code>
attribute that applies to all application components, including activities. The
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
-and {@code <activity>} attributes must both be "{@code true}" (as they both
+and {@code <activity>} attributes must both be "{@code true}" (as they both
are by default) for the system to be able to instantiate the activity. If either
is "{@code false}", it cannot be instantiated.
</p></dd>
@@ -700,7 +700,7 @@
<!-- api level 16 -->
<dt><a name="parent"></a>{@code android:parentActivityName}</dt>
<dd>The class name of the logical parent of the activity. The name here must match the class
- name given to the corresponding {@code <activity>} element's
+ name given to the corresponding {@code <activity>} element's
<a href="#nm"><code>android:name</code></a> attribute.
<p>The system reads this attribute to determine which activity should be started when
@@ -708,7 +708,7 @@
synthesize a back stack of activities with {@link android.app.TaskStackBuilder}.</p>
<p>To support API levels 4 - 16, you can also declare the parent activity with a {@code
-<meta-data>} element that specifies a value for {@code "android.support.PARENT_ACTIVITY"}.
+<meta-data>} element that specifies a value for {@code "android.support.PARENT_ACTIVITY"}.
For example:</p>
<pre>
<activity
@@ -888,7 +888,7 @@
{@code "sensorLandscape"}, then your application will be available only to devices that support
landscape orientation. However, you should also explicitly declare that
your application requires either portrait or landscape orientation with the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element. For example, <code><uses-feature
android:name="android.hardware.screen.portrait"/></code>. This is purely a filtering behavior
provided by Google Play (and other services that support it) and the platform itself does not
diff --git a/docs/html/guide/topics/manifest/application-element.jd b/docs/html/guide/topics/manifest/application-element.jd
index e63ba71..5600b5c 100644
--- a/docs/html/guide/topics/manifest/application-element.jd
+++ b/docs/html/guide/topics/manifest/application-element.jd
@@ -109,7 +109,7 @@
<dt><a name="banner"></a>{@code android:banner}</dt>
<dd>A <a href="{@docRoot}guide/topics/resources/drawable-resource.html">drawable resource</a>
providing an extended graphical banner for its associated item. Use with the
-{@code <application>} tag to supply a default banner for all application activities, or with the
+{@code <application>} tag to supply a default banner for all application activities, or with the
<a href="{@docRoot}guide/topics/manifest/activity-element.html"><code><activity></code></a>
tag to supply a banner for a specific activity.
@@ -119,7 +119,7 @@
{@link android.content.Intent#CATEGORY_LEANBACK_LAUNCHER} intent.</p>
<p>This attribute must be set as a reference to a drawable resource containing
-the image (for example {@code "@drawable/banner"}). There is no default banner.
+the image (for example <code>"@drawable/banner"</code>). There is no default banner.
</p>
<p>
@@ -197,7 +197,7 @@
<p>
This attribute must be set as a reference to a drawable resource containing
-the image (for example {@code "@drawable/icon"}). There is no default icon.
+the image (for example <code>"@drawable/icon"</code>). There is no default icon.
</p></dd>
<dt><a name="isGame"></a>{@code android:isGame}</dt>
@@ -252,7 +252,7 @@
<dt><a name="logo"></a>{@code android:logo}</dt>
<dd>A logo for the application as whole, and the default logo for activities.
<p>This attribute must be set as a reference to a drawable resource containing
-the image (for example {@code "@drawable/logo"}). There is no default logo.</p></dd>
+the image (for example <code>"@drawable/logo"</code>). There is no default logo.</p></dd>
<dt><a name="space"></a>{@code android:manageSpaceActivity}</dt>
<dd>The fully qualified name of an Activity subclass that the system
diff --git a/docs/html/guide/topics/manifest/category-element.jd b/docs/html/guide/topics/manifest/category-element.jd
index 563ed10..0034119 100644
--- a/docs/html/guide/topics/manifest/category-element.jd
+++ b/docs/html/guide/topics/manifest/category-element.jd
@@ -20,10 +20,10 @@
<dd><dl class="attr">
<dt><a name="nm"></a>{@code android:name}</dt>
<dd>The name of the category. Standard categories are defined in the
-{@link android.content.Intent} class as {@code CATEGORY_<i>name</i>}
+{@link android.content.Intent} class as <code>CATEGORY_<i>name</i></code>
constants. The name assigned here can be derived from those constants
by prefixing "{@code android.intent.category.}" to the
-{@code <i>name</i>} that follows {@code CATEGORY_}. For example,
+<code><i>name</i></code> that follows {@code CATEGORY_}. For example,
the string value for {@code CATEGORY_LAUNCHER} is
"{@code android.intent.category.LAUNCHER}".
diff --git a/docs/html/guide/topics/manifest/compatible-screens-element.jd b/docs/html/guide/topics/manifest/compatible-screens-element.jd
index de921d2..9c7f036 100644
--- a/docs/html/guide/topics/manifest/compatible-screens-element.jd
+++ b/docs/html/guide/topics/manifest/compatible-screens-element.jd
@@ -21,11 +21,11 @@
<dt>description:</dt>
<dd itemprop="description">Specifies each screen configuration with which the application is compatible. Only one instance
-of the {@code <compatible-screens>} element is allowed in the manifest, but it can
+of the <code><compatible-screens></code> element is allowed in the manifest, but it can
contain multiple <code><screen></code> elements. Each <code><screen></code> element
specifies a specific screen size-density combination with which the application is compatible.
- <p>The Android system <em>does not</em> read the {@code <compatible-screens>} manifest
+ <p>The Android system <em>does not</em> read the {@code <compatible-screens>} manifest
element (neither at install-time nor at runtime). This element is informational only and may be used
by external services (such as Google Play) to better understand the application's compatibility
with specific screen configurations and enable filtering for users. Any screen configuration that is
@@ -45,14 +45,14 @@
<p>If you want to set only a minimum screen <em>size</em> for your your application, then you
should use the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element. For example, if you want your application to be available
+<supports-screens>}</a> element. For example, if you want your application to be available
only for <em>large</em> and <em>xlarge</em> screen devices, the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element allows you to declare that your application does not
+<supports-screens>}</a> element allows you to declare that your application does not
support <em>small</em> and <em>normal</em> screen sizes. External services (such as Google
Play) will filter your application accordingly. You can also use the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-<supports-screens>}</a> element to declare whether the system should resize your
+<supports-screens>}</a> element to declare whether the system should resize your
application for different screen sizes.</p>
<p>Also see the <a href="{@docRoot}google/play/filters.html">Filters on Google Play</a>
@@ -65,10 +65,10 @@
<dd>
<dl class="tag-list">
- <dt id="screen">{@code <screen>}</dt>
+ <dt id="screen">{@code <screen>}</dt>
<dd>Specifies a single screen configuration with which the application is compatible.
<p>At least one instance of this element must be placed inside the {@code
-<compatible-screens>} element. This element <em>must include both</em> the {@code
+<compatible-screens>} element. This element <em>must include both</em> the {@code
android:screenSize} and {@code android:screenDensity} attributes (if you do not declare both
attributes, then the element is ignored).</p>
@@ -108,7 +108,7 @@
<dt>example</dt>
<dd>
<p>If your application is compatible with only small and normal screens, regardless
-of screen density, then you must specify twelve different {@code <screen>} elements,
+of screen density, then you must specify twelve different {@code <screen>} elements,
because each screen size has six different density configurations. You must declare each one of
these; any combination of size and density that you do <em>not</em> specify is considered a screen
configuration with which your application is <em>not</em> compatible. Here's what the manifest
diff --git a/docs/html/guide/topics/manifest/data-element.jd b/docs/html/guide/topics/manifest/data-element.jd
index 77f16dd..30020ad 100644
--- a/docs/html/guide/topics/manifest/data-element.jd
+++ b/docs/html/guide/topics/manifest/data-element.jd
@@ -24,7 +24,7 @@
attributes for each of its parts:
<p style="margin-left: 2em">
-{@code <scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]}</p>
+{@code <scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>]}</p>
<p>
These attributes that specify the URL format are optional, but also mutually dependent:
@@ -36,7 +36,7 @@
</ul>
<p>
-All the {@code <data>} elements contained within the same
+All the {@code <data>} elements contained within the same
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> element contribute to
the same filter. So, for example, the following filter specification,
</p>
@@ -55,7 +55,7 @@
</intent-filter></pre>
<p>
-You can place any number of {@code <data>} elements inside an
+You can place any number of {@code <data>} elements inside an
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> to give it multiple data
options. None of its attributes have default values.
</p>
@@ -157,7 +157,7 @@
The subtype can be the asterisk wildcard ({@code *}) to indicate that any
subtype matches.
-<p>It's common for an intent filter to declare a {@code <data>} that includes
+<p>It's common for an intent filter to declare a {@code <data>} that includes
only the {@code android:mimeType} attribute.</p>
diff --git a/docs/html/guide/topics/manifest/grant-uri-permission-element.jd b/docs/html/guide/topics/manifest/grant-uri-permission-element.jd
index 2179359..b2d9bb7 100644
--- a/docs/html/guide/topics/manifest/grant-uri-permission-element.jd
+++ b/docs/html/guide/topics/manifest/grant-uri-permission-element.jd
@@ -26,7 +26,7 @@
attribute is "{@code true}", permission can be granted for any the data under
the provider's purview. However, if that attribute is "{@code false}", permission
can be granted only to data subsets that are specified by this element.
-A provider can contain any number of {@code <grant-uri-permission>} elements.
+A provider can contain any number of {@code <grant-uri-permission>} elements.
Each one can specify only one path (only one of the three possible attributes).
</p>
diff --git a/docs/html/guide/topics/manifest/manifest-intro.jd b/docs/html/guide/topics/manifest/manifest-intro.jd
index d2a9308..c8d68f5 100644
--- a/docs/html/guide/topics/manifest/manifest-intro.jd
+++ b/docs/html/guide/topics/manifest/manifest-intro.jd
@@ -279,7 +279,7 @@
should be localized and therefore set from a resource or theme. Resource
values are expressed in the following format,</p>
-<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p>
+<p style="margin-left: 2em"><code>@[<i>package</i>:]<i>type</i>:<i>name</i></code></p>
<p>
where the <i>package</i> name can be omitted if the resource is in the same package
@@ -295,7 +295,7 @@
rather than '{@code @}':
</p>
-<p style="margin-left: 2em">{@code ?[<i>package</i>:]<i>type</i>:<i>name</i>}
+<p style="margin-left: 2em"><code>?[<i>package</i>:]<i>type</i>:<i>name</i></code>
</p></dd>
<dt><b>String values</b></dt>
diff --git a/docs/html/guide/topics/manifest/meta-data-element.jd b/docs/html/guide/topics/manifest/meta-data-element.jd
index 241153b..d3b41c3 100644
--- a/docs/html/guide/topics/manifest/meta-data-element.jd
+++ b/docs/html/guide/topics/manifest/meta-data-element.jd
@@ -20,7 +20,7 @@
<dt>description:</dt>
<dd itemprop="description">A name-value pair for an item of additional, arbitrary data that can
be supplied to the parent component. A component element can contain any
-number of {@code <meta-data>} subelements. The values from all of
+number of {@code <meta-data>} subelements. The values from all of
them are collected in a single {@link android.os.Bundle} object and made
available to the component as the
{@link android.content.pm.PackageItemInfo#metaData
@@ -45,7 +45,7 @@
<p>
It is highly recommended that you avoid supplying related data as
-multiple separate {@code <meta-data>} entries. Instead, if you
+multiple separate {@code <meta-data>} entries. Instead, if you
have complex data to associate with a component, store it as a resource and
use the {@code resource} attribute to inform the component of its ID.
</p></dd>
diff --git a/docs/html/guide/topics/manifest/provider-element.jd b/docs/html/guide/topics/manifest/provider-element.jd
index f3ffd58..4b5c0c3 100644
--- a/docs/html/guide/topics/manifest/provider-element.jd
+++ b/docs/html/guide/topics/manifest/provider-element.jd
@@ -40,7 +40,7 @@
Declares a content provider component. A content provider is a subclass of
{@link android.content.ContentProvider} that supplies structured access to data managed by the
application. All content providers in your application must be defined in a
- {@code <provider>} element in the manifest file; otherwise, the system is unaware of them
+ {@code <provider>} element in the manifest file; otherwise, the system is unaware of them
and doesn't run them.
<p>
You only declare content providers that are part of your application. Content providers in
@@ -100,7 +100,7 @@
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all
application components, including content providers. The
-<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <provider>}
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <provider>}
attributes must both be "{@code true}" (as they both
are by default) for the content provider to be enabled. If either is
"{@code false}", the provider is disabled; it cannot be instantiated.
diff --git a/docs/html/guide/topics/manifest/receiver-element.jd b/docs/html/guide/topics/manifest/receiver-element.jd
index df2437e..081a191 100644
--- a/docs/html/guide/topics/manifest/receiver-element.jd
+++ b/docs/html/guide/topics/manifest/receiver-element.jd
@@ -49,7 +49,7 @@
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all
application components, including broadcast receivers. The
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and
-{@code <receiver>} attributes must both be "{@code true}" for
+{@code <receiver>} attributes must both be "{@code true}" for
the broadcast receiver to be enabled. If either is "{@code false}", it is
disabled; it cannot be instantiated.
</p></dd>
diff --git a/docs/html/guide/topics/manifest/service-element.jd b/docs/html/guide/topics/manifest/service-element.jd
index e26f263..fca85f5 100644
--- a/docs/html/guide/topics/manifest/service-element.jd
+++ b/docs/html/guide/topics/manifest/service-element.jd
@@ -31,7 +31,7 @@
applications.
<p>
-All services must be represented by {@code <service>} elements in
+All services must be represented by {@code <service>} elements in
the manifest file. Any that are not declared there will not be seen
by the system and will never be run.
</p></dd>
@@ -47,7 +47,7 @@
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> element has its own
<code><a href="{@docRoot}guide/topics/manifest/application-element.html#enabled">enabled</a></code> attribute that applies to all
application components, including services. The
-<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <service>}
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> and {@code <service>}
attributes must both be "{@code true}" (as they both
are by default) for the service to be enabled. If either is
"{@code false}", the service is disabled; it cannot be instantiated.
diff --git a/docs/html/guide/topics/manifest/supports-screens-element.jd b/docs/html/guide/topics/manifest/supports-screens-element.jd
index bbeceb7..a4546fa 100644
--- a/docs/html/guide/topics/manifest/supports-screens-element.jd
+++ b/docs/html/guide/topics/manifest/supports-screens-element.jd
@@ -38,7 +38,7 @@
when it is on a tablet compared to when running on a handset device.</p>
<p>However, if your application does not work well when resized to fit different screen sizes, you
-can use the attributes of the {@code <supports-screens>} element to control whether your
+can use the attributes of the {@code <supports-screens>} element to control whether your
application should be distributed to smaller screens or have its UI scaled up ("zoomed") to fit
larger screens using the system's <a
href="{@docRoot}guide/practices/screen-compat-mode.html">screen compatibility mode</a>. When you
@@ -152,7 +152,7 @@
not need to use this attribute. Otherwise, you should use a value for this attribute that
matches the smallest value used by your application for the <a
href="{@docRoot}guide/topics/resources/providing-resources.html#SmallestScreenWidthQualifier">
-smallest screen width qualifier</a> ({@code sw<N>dp}).</p>
+smallest screen width qualifier</a> ({@code sw<N>dp}).</p>
<p class="caution"><strong>Caution:</strong> The Android system does not pay attention to this
attribute, so it does not affect how your application behaves at runtime. Instead, it is used
diff --git a/docs/html/guide/topics/manifest/uses-configuration-element.jd b/docs/html/guide/topics/manifest/uses-configuration-element.jd
index 15fd49c1..f551672 100644
--- a/docs/html/guide/topics/manifest/uses-configuration-element.jd
+++ b/docs/html/guide/topics/manifest/uses-configuration-element.jd
@@ -38,7 +38,7 @@
information about how to support d-pad input in your app, read <a href=
"{@docRoot}guide/topics/ui/accessibility/apps.html#focus-nav">Enabling Focus Navigation</a>. If
your app absolutely cannot function without a touchscreen, then instead use the <a href=
-"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag to
+"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag to
declare the required touchscreen type, ranging from {@code "android.hardware.faketouch"} for basic
touch-style events to more advanced touch types such as {@code
"android.hardware.touchscreen.multitouch.jazzhand"} for distinct input from multiple fingers.</p>
@@ -160,7 +160,7 @@
<p class="note"><strong>Note:</strong> If some type of touch input is required for your app,
you should instead use the
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
- <uses-feature>}</a> tag to declare the required touchscreen
+ <uses-feature>}</a> tag to declare the required touchscreen
type, beginning with {@code "android.hardware.faketouch"} for basic touch-style events.</p>
</td>
</tr>
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 21e3057..e746a67 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -719,10 +719,10 @@
android:screenOrientation}</a> with either {@code "landscape"}, {@code "reverseLandscape"}, or
{@code "sensorLandscape"}, then your application will be available only to devices that support
landscape orientation. As a best practice, you should still declare your requirement for this
-orientation using a {@code <uses-feature>} element. If you declare an orientation for your
+orientation using a {@code <uses-feature>} element. If you declare an orientation for your
activity using <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
android:screenOrientation}</a>, but don't actually <em>require</em> it, you can disable the
-requirement by declaring the orientation with a {@code <uses-feature>} element and include
+requirement by declaring the orientation with a {@code <uses-feature>} element and include
{@code android:required="false"}.</p>
<p>For backwards compatibility, any device running a platform version that supports only API
level 12 or lower is assumed to support both landscape and portrait.</p>
@@ -780,9 +780,9 @@
<p class="note"><strong>Note:</strong> Because applications require the {@code
android.hardware.touchscreen} feature by default, if you want your application to be available to
devices that provide a fake touch interface, you must also explicitly declare that a touch screen is
-<em>not</em> required by declaring {@code <uses-feature
+<em>not</em> required by declaring <code><uses-feature
android:name="android.hardware.touchscreen" <strong>android:required="false"</strong>
-/>}</p></td>
+/></code></p></td>
</tr>
<tr>
diff --git a/docs/html/guide/topics/media/mediarouter.jd b/docs/html/guide/topics/media/mediarouter.jd
index e0bf889..54d52a6 100644
--- a/docs/html/guide/topics/media/mediarouter.jd
+++ b/docs/html/guide/topics/media/mediarouter.jd
@@ -95,7 +95,7 @@
{@link android.support.v7.media.MediaRouteProvider} and distributing it as an application.
For more information on implementing a media route provider, see the {@link
android.support.v7.media.MediaRouteProvider} reference documentation and the v7-mediarouter
- support library sample {@code <sdk>/extras/android/compatibility/v7/mediarouter}.
+ support library sample {@code <sdk>/extras/android/compatibility/v7/mediarouter}.
</p>
@@ -540,7 +540,7 @@
multiple media items for playback and management of the media queue. For a comprehensive sample
implementation of these features, see {@code SampleMediaRouterActivity} and its associated
classes in the v7 mediarouter support library sample
- {@code <sdk>/extras/android/compatibility/v7/mediarouter}.
+ {@code <sdk>/extras/android/compatibility/v7/mediarouter}.
</p>
<p>
diff --git a/docs/html/guide/topics/providers/document-provider.jd b/docs/html/guide/topics/providers/document-provider.jd
index 8ea08bd..9d03616 100644
--- a/docs/html/guide/topics/providers/document-provider.jd
+++ b/docs/html/guide/topics/providers/document-provider.jd
@@ -282,7 +282,7 @@
<li>Adding the category {@link android.content.Intent#CATEGORY_OPENABLE} to the
intent filters the results to display only documents that can be opened, such as image files.</li>
-<li>The statement {@code intent.setType("image/*")} further filters to
+<li>The statement <code>intent.setType("image/*")</code> further filters to
display only documents that have the image MIME data type.</li>
</ul>
@@ -580,7 +580,7 @@
<li>The {@code android:enabled} attribute set to a boolean value defined in a resource
file. The purpose of this attribute is to disable the provider on devices running Android 4.3 or lower.
-For example, {@code android:enabled="@bool/atLeastKitKat"}. In
+For example, <code>android:enabled="@bool/atLeastKitKat"</code>. In
addition to including this attribute in the manifest, you need to do the following:
<ul>
<li>In your {@code bool.xml} resources file under {@code res/values/}, add
diff --git a/docs/html/guide/topics/resources/accessing-resources.jd b/docs/html/guide/topics/resources/accessing-resources.jd
index 8f99653..b971238 100644
--- a/docs/html/guide/topics/resources/accessing-resources.jd
+++ b/docs/html/guide/topics/resources/accessing-resources.jd
@@ -9,8 +9,8 @@
<ul>
<li>Resources can be referenced from code using integers from {@code R.java}, such as
{@code R.drawable.myimage}</li>
- <li>Resources can be referenced from resources using a special XML syntax, such as {@code
-@drawable/myimage}</li>
+ <li>Resources can be referenced from resources using a special XML syntax, such as
+<code>@drawable/myimage</code></li>
<li>You can also access your app resources with methods in
{@link android.content.res.Resources}</li>
</ul>
@@ -129,10 +129,10 @@
</pre>
<ul>
- <li><em>{@code <package_name>}</em> is the name of the package in which the resource is located (not
+ <li><em>{@code <package_name>}</em> is the name of the package in which the resource is located (not
required when referencing resources from your own package).</li>
- <li><em>{@code <resource_type>}</em> is the {@code R} subclass for the resource type.</li>
- <li><em>{@code <resource_name>}</em> is either the resource filename
+ <li><em>{@code <resource_type>}</em> is the {@code R} subclass for the resource type.</li>
+ <li><em>{@code <resource_name>}</em> is either the resource filename
without the extension or the {@code android:name} attribute value in the XML element (for simple
values).</li>
</ul>
@@ -210,11 +210,11 @@
</pre>
<ul>
- <li>{@code <package_name>} is the name of the package in which the resource is located (not
+ <li>{@code <package_name>} is the name of the package in which the resource is located (not
required when referencing resources from the same package)</li>
- <li>{@code <resource_type>} is the
+ <li>{@code <resource_type>} is the
{@code R} subclass for the resource type</li>
- <li>{@code <resource_name>} is either the resource filename
+ <li>{@code <resource_name>} is either the resource filename
without the extension or the {@code android:name} attribute value in the XML element (for simple
values).</li>
</ul>
@@ -295,7 +295,7 @@
essentially says, "use the style that is defined by this attribute, in the current theme."</p>
<p>To reference a style attribute, the name syntax is almost identical to the normal resource
-format, but instead of the at-symbol ({@code @}), use a question-mark ({@code ?}), and the
+format, but instead of the at-symbol (<code>@</code>), use a question-mark ({@code ?}), and the
resource type portion is optional. For instance:</p>
<pre class="classic">
diff --git a/docs/html/guide/topics/resources/color-list-resource.jd b/docs/html/guide/topics/resources/color-list-resource.jd
index b20915c..61f6665 100644
--- a/docs/html/guide/topics/resources/color-list-resource.jd
+++ b/docs/html/guide/topics/resources/color-list-resource.jd
@@ -20,7 +20,7 @@
or niether) and, using a color state list, you can provide a different color during each state.</p>
<p>You can describe the state list in an XML file. Each color is defined in an {@code
-<item>} element inside a single {@code <selector>} element. Each {@code <item>}
+<item>} element inside a single {@code <selector>} element. Each {@code <item>}
uses various attributes to describe the state in which it should be used.</p>
<p>During each state change, the state list is traversed top to bottom and the first item that
@@ -69,7 +69,7 @@
<dt id="selector-element"><code><selector></code></dt>
<dd><strong>Required.</strong> This must be the root element. Contains one or more {@code
-<item>} elements.
+<item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>xmlns:android</code></dt>
diff --git a/docs/html/guide/topics/resources/drawable-resource.jd b/docs/html/guide/topics/resources/drawable-resource.jd
index 06bd2d0..dd2c4c2 100644
--- a/docs/html/guide/topics/resources/drawable-resource.jd
+++ b/docs/html/guide/topics/resources/drawable-resource.jd
@@ -139,11 +139,11 @@
<p>An XML bitmap is a resource defined in XML that points to a bitmap file. The effect is an alias for a
raw bitmap file. The XML can specify additional properties for the bitmap such as dithering and tiling.</p>
-<p class="note"><strong>Note:</strong> You can use a {@code <bitmap>} element as a child of
-an {@code <item>} element. For
+<p class="note"><strong>Note:</strong> You can use a {@code <bitmap>} element as a child of
+an {@code <item>} element. For
example, when creating a <a href="#StateList">state list</a> or <a href="#LayerList">layer list</a>,
you can exclude the {@code android:drawable}
-attribute from an {@code <item>} element and nest a {@code <bitmap>} inside it
+attribute from an {@code <item>} element and nest a {@code <bitmap>} inside it
that defines the drawable item.</p>
<dl class="xml">
@@ -448,8 +448,8 @@
that manages an array of other drawables. Each drawable in the list is drawn in the order of the
list—the last drawable in the list is drawn on top.</p>
-<p>Each drawable is represented by an {@code <item>} element inside a single {@code
-<layer-list>} element.</p>
+<p>Each drawable is represented by an {@code <item>} element inside a single {@code
+<layer-list>} element.</p>
<dl class="xml">
@@ -492,7 +492,7 @@
<dt id="layerlist-element"><code><layer-list></code></dt>
<dd><strong>Required.</strong> This must be the root element. Contains one or more {@code
-<item>} elements.
+<item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>xmlns:android</code></dt>
@@ -502,7 +502,7 @@
</dd>
<dt id="layerlist-item-element"><code><item></code></dt>
<dd>Defines a drawable to place in the layer drawable, in a position defined by its attributes.
-Must be a child of a <code><selector></code> element. Accepts child {@code <bitmap>}
+Must be a child of a <code><selector></code> element. Accepts child {@code <bitmap>}
elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
@@ -528,15 +528,15 @@
<p>All drawable items are scaled to fit the size of the containing View, by default. Thus,
placing your images in a layer list at different positions might increase the size of the View and
some images scale as appropriate. To avoid
-scaling items in the list, use a {@code <bitmap>} element inside the {@code
-<item>} element to specify the drawable and define the gravity to something that does not
-scale, such as {@code "center"}. For example, the following {@code <item>} defines an item
+scaling items in the list, use a {@code <bitmap>} element inside the {@code
+<item>} element to specify the drawable and define the gravity to something that does not
+scale, such as {@code "center"}. For example, the following {@code <item>} defines an item
that scales to fit its container View:</p>
<pre>
<item android:drawable="@drawable/image" />
</pre>
-<p>To avoid scaling, the following example uses a {@code <bitmap>} element with centered
+<p>To avoid scaling, the following example uses a {@code <bitmap>} element with centered
gravity:</p>
<pre>
<item>
@@ -569,7 +569,7 @@
</item>
</layer-list>
</pre>
-<p>Notice that this example uses a nested {@code <bitmap>} element to define the drawable
+<p>Notice that this example uses a nested {@code <bitmap>} element to define the drawable
resource for each item with a "center" gravity. This ensures that none of the images are scaled to
fit the size of the container, due to resizing caused by the offset images.</p>
@@ -611,7 +611,7 @@
state.</p>
<p>You can describe the state list in an XML file. Each graphic is represented by an {@code
-<item>} element inside a single {@code <selector>} element. Each {@code <item>}
+<item>} element inside a single {@code <selector>} element. Each {@code <item>}
uses various attributes to describe the state in which it should be used as the graphic for the
drawable.</p>
@@ -666,7 +666,7 @@
<dt id="selector-element"><code><selector></code></dt>
<dd><strong>Required.</strong> This must be the root element. Contains one or more {@code
-<item>} elements.
+<item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>xmlns:android</code></dt>
@@ -828,7 +828,7 @@
<dl class="tag-list">
<dt id="levellist-element"><code><level-list></code></dt>
- <dd>This must be the root element. Contains one or more {@code <item>} elements.
+ <dd>This must be the root element. Contains one or more {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>xmlns:android</code></dt>
@@ -895,8 +895,8 @@
<p>A {@link android.graphics.drawable.TransitionDrawable} is a drawable object
that can cross-fade between the two drawable resources.</p>
-<p>Each drawable is represented by an {@code <item>} element inside a single {@code
-<transition>} element. No more than two items are supported. To transition forward, call
+<p>Each drawable is represented by an {@code <item>} element inside a single {@code
+<transition>} element. No more than two items are supported. To transition forward, call
{@link android.graphics.drawable.TransitionDrawable#startTransition(int) startTransition()}. To
transition backward, call {@link android.graphics.drawable.TransitionDrawable#reverseTransition(int)
reverseTransition()}.</p>
@@ -942,7 +942,7 @@
<dt id="transition-element"><code><transition></code></dt>
<dd><strong>Required.</strong> This must be the root element. Contains one or more {@code
-<item>} elements.
+<item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>xmlns:android</code></dt>
@@ -952,7 +952,7 @@
</dd>
<dt id="transition-item-element"><code><item></code></dt>
<dd>Defines a drawable to use as part of the drawable transition.
-Must be a child of a <code><transition></code> element. Accepts child {@code <bitmap>}
+Must be a child of a <code><transition></code> element. Accepts child {@code <bitmap>}
elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
@@ -1516,7 +1516,7 @@
<td>An oval shape that fits the dimensions of the containing View.</td></tr>
<tr><td>{@code "line"}</td>
<td>A horizontal line that spans the width of the containing View. This
- shape requires the {@code <stroke>} element to define the width of the
+ shape requires the {@code <stroke>} element to define the width of the
line.</td></tr>
<tr><td>{@code "ring"}</td>
<td>A ring shape.</td></tr>
diff --git a/docs/html/guide/topics/resources/layout-resource.jd b/docs/html/guide/topics/resources/layout-resource.jd
index 366ddc8..8c5708a 100644
--- a/docs/html/guide/topics/resources/layout-resource.jd
+++ b/docs/html/guide/topics/resources/layout-resource.jd
@@ -54,7 +54,7 @@
</pre>
<p class="note"><strong>Note:</strong> The root element can be either a
{@link android.view.ViewGroup}, a {@link android.view.View}, or a <a
-href="#merge-element">{@code <merge>}</a> element, but there must be only
+href="#merge-element">{@code <merge>}</a> element, but there must be only
one root element and it must contain the {@code xmlns:android} attribute with the {@code android}
namespace as shown.</p>
</dd>
diff --git a/docs/html/guide/topics/resources/more-resources.jd b/docs/html/guide/topics/resources/more-resources.jd
index b5f449a..1afbf70 100644
--- a/docs/html/guide/topics/resources/more-resources.jd
+++ b/docs/html/guide/topics/resources/more-resources.jd
@@ -34,13 +34,13 @@
<p class="note"><strong>Note:</strong> A bool is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine bool resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <bool>} element's {@code name} will be used as the resource
+The filename is arbitrary. The {@code <bool>} element's {@code name} will be used as the resource
ID.</dd>
<dt>resource reference:</dt>
@@ -130,13 +130,13 @@
<p class="note"><strong>Note:</strong> A color is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine color resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/colors.xml</code><br/>
-The filename is arbitrary. The {@code <color>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <color>} element's {@code name} will be used as the
resource ID.</dd>
<dt>resource reference:</dt>
@@ -244,13 +244,13 @@
<p class="note"><strong>Note:</strong> A dimension is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine dimension resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <dimen>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <dimen>} element's {@code name} will be used as the
resource ID.</dd>
<dt>resource reference:</dt>
@@ -329,7 +329,7 @@
<h2 id="Id">ID</h2>
-<p>A unique resource ID defined in XML. Using the name you provide in the {@code <item>}
+<p>A unique resource ID defined in XML. Using the name you provide in the {@code <item>}
element, the Android developer tools create a unique integer in your project's {@code
R.java} class, which you can use as an
identifier for an application resources (for example, a {@link android.view.View} in your UI layout)
@@ -339,7 +339,7 @@
<p class="note"><strong>Note:</strong> An ID is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine ID resources with other simple resources in the one XML file,
-under one {@code <resources>} element. Also, remember that an ID resources does not reference
+under one {@code <resources>} element. Also, remember that an ID resources does not reference
an actual resource item; it is simply a unique ID that you can attach to other resources or use
as a unique integer in your application.</p>
@@ -446,13 +446,13 @@
<p class="note"><strong>Note:</strong> An integer is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine integer resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename.xml</em></code><br/>
-The filename is arbitrary. The {@code <integer>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <integer>} element's {@code name} will be used as the
resource ID.</dd>
<dt>resource reference:</dt>
@@ -525,14 +525,14 @@
<p class="note"><strong>Note:</strong> An integer array is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine integer array resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <integer-array>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <integer-array>} element's {@code name} will be used as the
resource ID.</dd>
<dt>compiled resource datatype:</dt>
@@ -566,7 +566,7 @@
<p>No attributes.</p>
</dd>
<dt id="integer-array-element"><code><integer-array></code></dt>
- <dd>Defines an array of integers. Contains one or more child {@code <item>} elements.
+ <dd>Defines an array of integers. Contains one or more child {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>android:name</code></dt>
@@ -576,7 +576,7 @@
</dd>
<dt id="integer-array-item-element"><code><item></code></dt>
<dd>An integer. The value can be a reference to another
-integer resource. Must be a child of a {@code <integer-array>} element.
+integer resource. Must be a child of a {@code <integer-array>} element.
<p>No attributes.</p>
</dd>
</dl>
@@ -620,14 +620,14 @@
<p class="note"><strong>Note:</strong> A typed array is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine typed array resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <array>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <array>} element's {@code name} will be used as the
resource ID.</dd>
<dt>compiled resource datatype:</dt>
@@ -660,7 +660,7 @@
<p>No attributes.</p>
</dd>
<dt id="array-element"><code><array></code></dt>
- <dd>Defines an array. Contains one or more child {@code <item>} elements.
+ <dd>Defines an array. Contains one or more child {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>android:name</code></dt>
@@ -670,7 +670,7 @@
</dd>
<dt id="array-item-element"><code><item></code></dt>
<dd>A generic resource. The value can be a reference to a resource or a simple data type.
-Must be a child of an {@code <array>} element.
+Must be a child of an {@code <array>} element.
<p>No attributes.</p>
</dd>
</dl>
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index c179a2e..c919ed5 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -148,7 +148,7 @@
<td><code>raw/</code></td>
<td><p>Arbitrary files to save in their raw form. To open these resources with a raw
{@link java.io.InputStream}, call {@link android.content.res.Resources#openRawResource(int)
-Resources.openRawResource()} with the resource ID, which is {@code R.raw.<em>filename</em>}.</p>
+Resources.openRawResource()} with the resource ID, which is <code>R.raw.<em>filename</em></code>.</p>
<p>However, if you need access to original file names and file hierarchy, you might consider
saving some resources in the {@code
assets/} directory (instead of {@code res/raw/}). Files in {@code assets/} are not given a
@@ -160,9 +160,9 @@
<td><p>XML files that contain simple values, such as strings, integers, and colors.</p>
<p>Whereas XML resource files in other {@code res/} subdirectories define a single resource
based on the XML filename, files in the {@code values/} directory describe multiple resources.
-For a file in this directory, each child of the {@code <resources>} element defines a single
-resource. For example, a {@code <string>} element creates an
-{@code R.string} resource and a {@code <color>} element creates an {@code R.color}
+For a file in this directory, each child of the {@code <resources>} element defines a single
+resource. For example, a {@code <string>} element creates an
+{@code R.string} resource and a {@code <color>} element creates an {@code R.color}
resource.</p>
<p>Because each resource is defined with its own XML element, you can name the file
whatever you want and place different resource types in one file. However, for clarity, you might
@@ -229,15 +229,15 @@
<p>To specify configuration-specific alternatives for a set of resources:</p>
<ol>
- <li>Create a new directory in {@code res/} named in the form {@code
-<em><resources_name></em>-<em><config_qualifier></em>}.
+ <li>Create a new directory in {@code res/} named in the form
+ <code><em><resources_name></em>-<em><config_qualifier></em></code>.
<ul>
- <li><em>{@code <resources_name>}</em> is the directory name of the corresponding default
+ <li><em>{@code <resources_name>}</em> is the directory name of the corresponding default
resources (defined in table 1).</li>
- <li><em>{@code <qualifier>}</em> is a name that specifies an individual configuration
+ <li><em>{@code <qualifier>}</em> is a name that specifies an individual configuration
for which these resources are to be used (defined in table 2).</li>
</ul>
- <p>You can append more than one <em>{@code <qualifier>}</em>. Separate each
+ <p>You can append more than one <em>{@code <qualifier>}</em>. Separate each
one with a dash.</p>
<p class="caution"><strong>Caution:</strong> When appending multiple qualifiers, you must
place them in the same order in which they are listed in table 2. If the qualifiers are ordered
@@ -384,7 +384,7 @@
screen area. Specifically, the device's smallestWidth is the shortest of the screen's available
height and width (you may also think of it as the "smallest possible width" for the screen). You can
use this qualifier to ensure that, regardless of the screen's current orientation, your
-application has at least {@code <N>} dps of width available for its UI.</p>
+application has at least {@code <N>} dps of width available for its UI.</p>
<p>For example, if your layout requires that its smallest dimension of screen area be at
least 600 dp at all times, then you can use this qualifer to create the layout resources, {@code
res/layout-sw600dp/}. The system will use these resources only when the smallest dimension of
@@ -899,13 +899,13 @@
name other than {@code icon.png}) and put
it in the default {@code res/drawable/} directory. Then create an {@code icon.xml} file in {@code
res/drawable-en-rCA/} and {@code res/drawable-fr-rCA/} that refers to the {@code icon_ca.png}
-resource using the {@code <bitmap>} element. This allows you to store just one version of the
+resource using the {@code <bitmap>} element. This allows you to store just one version of the
PNG file and two small XML files that point to it. (An example XML file is shown below.)</p>
<h4>Drawable</h4>
-<p>To create an alias to an existing drawable, use the {@code <bitmap>} element.
+<p>To create an alias to an existing drawable, use the {@code <bitmap>} element.
For example:</p>
<pre>
@@ -922,8 +922,8 @@
<h4>Layout</h4>
-<p>To create an alias to an existing layout, use the {@code <include>}
-element, wrapped in a {@code <merge>}. For example:</p>
+<p>To create an alias to an existing layout, use the {@code <include>}
+element, wrapped in a {@code <merge>}. For example:</p>
<pre>
<?xml version="1.0" encoding="utf-8"?>
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index 0e03fe0..8781d20 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -190,7 +190,7 @@
configuration change and is not recommended for most applications.</p>
<p>To declare that your activity handles a configuration change, edit the appropriate <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element in
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element in
your manifest file to include the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
android:configChanges}</a> attribute with a value that represents the configuration you want to
diff --git a/docs/html/guide/topics/resources/string-resource.jd b/docs/html/guide/topics/resources/string-resource.jd
index 743e692..9adf6de 100644
--- a/docs/html/guide/topics/resources/string-resource.jd
+++ b/docs/html/guide/topics/resources/string-resource.jd
@@ -28,13 +28,13 @@
<p class="note"><strong>Note:</strong> A string is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). So, you can
combine string resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <string>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <string>} element's {@code name} will be used as the
resource ID.</dd>
<dt>compiled resource datatype:</dt>
@@ -125,13 +125,13 @@
<p class="note"><strong>Note:</strong> A string array is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine string array resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <string-array>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <string-array>} element's {@code name} will be used as the
resource ID.</dd>
<dt>compiled resource datatype:</dt>
@@ -164,7 +164,7 @@
<p>No attributes.</p>
</dd>
<dt id="string-array-element"><code><string-array></code></dt>
- <dd>Defines an array of strings. Contains one or more {@code <item>} elements.
+ <dd>Defines an array of strings. Contains one or more {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>name</code></dt>
@@ -175,7 +175,7 @@
</dd>
<dt id="string-array-item-element"><code><item></code></dt>
<dd>A string, which can include styling tags. The value can be a reference to another
-string resource. Must be a child of a {@code <string-array>} element. Beware that you
+string resource. Must be a child of a {@code <string-array>} element. Beware that you
must escape apostrophes and
quotation marks. See <a href="#FormattingAndStyling">Formatting and Styling</a>, below, for
information about to properly style and format your strings.
@@ -252,13 +252,13 @@
<p class="note"><strong>Note:</strong> A plurals collection is a simple resource that is
referenced using the value provided in the {@code name} attribute (not the name of the XML
file). As such, you can combine plurals resources with other simple resources in the one
-XML file, under one {@code <resources>} element.</p>
+XML file, under one {@code <resources>} element.</p>
<dl class="xml">
<dt>file location:</dt>
<dd><code>res/values/<em>filename</em>.xml</code><br/>
-The filename is arbitrary. The {@code <plurals>} element's {@code name} will be used as the
+The filename is arbitrary. The {@code <plurals>} element's {@code name} will be used as the
resource ID.</dd>
<dt>resource reference:</dt>
@@ -291,7 +291,7 @@
</dd>
<dt id="plurals-element"><code><plurals></code></dt>
<dd>A collection of strings, of which, one string is provided depending on the amount of
-something. Contains one or more {@code <item>} elements.
+something. Contains one or more {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>name</code></dt>
@@ -302,7 +302,7 @@
</dd>
<dt id="plurals-item-element"><code><item></code></dt>
<dd>A plural or singular string. The value can be a reference to another
-string resource. Must be a child of a {@code <plurals>} element. Beware that you must
+string resource. Must be a child of a {@code <plurals>} element. Beware that you must
escape apostrophes and quotation marks. See <a href="#FormattingAndStyling">Formatting and
Styling</a>, below, for information about to properly style and format your strings.
<p class="caps">attributes:</p>
@@ -465,9 +465,9 @@
</pre>
<p>Supported HTML elements include:</p>
<ul>
- <li>{@code <b>} for <b>bold</b> text.</li>
- <li>{@code <i>} for <i>italic</i> text.</li>
- <li>{@code <u>} for <u>underline</u> text.</li>
+ <li>{@code <b>} for <b>bold</b> text.</li>
+ <li>{@code <i>} for <i>italic</i> text.</li>
+ <li>{@code <u>} for <u>underline</u> text.</li>
</ul>
<p>Sometimes you may want to create a styled text resource that is also used as a format
@@ -486,8 +486,8 @@
<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>
</pre>
-<p>In this formatted string, a {@code <b>} element is added. Notice that the opening bracket is
-HTML-escaped, using the {@code &lt;} notation.</p>
+<p>In this formatted string, a {@code <b>} element is added. Notice that the opening bracket is
+HTML-escaped, using the {@code <} notation.</p>
</li>
<li>Then format the string as usual, but also call {@link android.text.Html#fromHtml} to
convert the HTML text into styled text:
diff --git a/docs/html/guide/topics/resources/style-resource.jd b/docs/html/guide/topics/resources/style-resource.jd
index f6252dba..dc3d23f 100644
--- a/docs/html/guide/topics/resources/style-resource.jd
+++ b/docs/html/guide/topics/resources/style-resource.jd
@@ -23,7 +23,7 @@
<p class="note"><strong>Note:</strong> A style is a simple resource that is referenced
using the value provided in the {@code name} attribute (not the name of the XML file). As
such, you can combine style resources with other simple resources in the one XML file,
-under one {@code <resources>} element.</p>
+under one {@code <resources>} element.</p>
<dl class="xml">
@@ -61,7 +61,7 @@
<p>No attributes.</p>
</dd>
<dt id="style-element"><code><style></code></dt>
- <dd>Defines a single style. Contains {@code <item>} elements.
+ <dd>Defines a single style. Contains {@code <item>} elements.
<p class="caps">attributes:</p>
<dl class="atn-list">
<dt><code>name</code></dt>
diff --git a/docs/html/guide/topics/search/adding-custom-suggestions.jd b/docs/html/guide/topics/search/adding-custom-suggestions.jd
index 6ebef08..a251ce1 100644
--- a/docs/html/guide/topics/search/adding-custom-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-custom-suggestions.jd
@@ -128,7 +128,7 @@
<h2 id="CustomSearchableConfiguration">Modifying the searchable configuration</h2>
<p>To add support for custom suggestions, add the {@code android:searchSuggestAuthority} attribute
-to the {@code <searchable>} element in your searchable configuration file. For example:</p>
+to the {@code <searchable>} element in your searchable configuration file. For example:</p>
<pre>
<?xml version="1.0" encoding="utf-8"?>
@@ -608,7 +608,7 @@
<p>The only scenario in which additional work is necessary is when your content provider demands a
read permission. In which case, you need to add a special
-{@code <path-permission>} element for the provider to grant Quick Search Box read access to
+{@code <path-permission>} element for the provider to grant Quick Search Box read access to
your content provider. For example:</p>
<pre>
@@ -622,7 +622,7 @@
</pre>
<p>In this example, the provider restricts read and write access to the content. The
-{@code <path-permission>} element amends the restriction by granting read access to content
+{@code <path-permission>} element amends the restriction by granting read access to content
inside the {@code "/search_suggest_query"} path prefix when the {@code
"android.permission.GLOBAL_SEARCH"} permission exists. This grants access to Quick Search Box
so that it may query your content provider for suggestions.</p>
diff --git a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
index e1020dd..8bd180e 100644
--- a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
@@ -154,7 +154,7 @@
<p>To configure the system to use your suggestions provider, you need to add
the {@code android:searchSuggestAuthority} and {@code android:searchSuggestSelection} attributes to
-the {@code <searchable>} element in your searchable configuration file. For example:</p>
+the {@code <searchable>} element in your searchable configuration file. For example:</p>
<pre>
<?xml version="1.0" encoding="utf-8"?>
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index fcaaed36..1af3e5d 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -158,7 +158,7 @@
<p>The searchable configuration file must include the <a
href="{@docRoot}guide/topics/search/searchable-config.html#searchable-element">{@code
-<searchable>}</a> element as the root node and specify one
+<searchable>}</a> element as the root node and specify one
or more attributes. For example:</p>
<pre>
@@ -186,7 +186,7 @@
<p>The <a
href="{@docRoot}guide/topics/search/searchable-config.html#searchable-element">{@code
-<searchable>}</a> element accepts several other attributes. However, you don't need
+<searchable>}</a> element accepts several other attributes. However, you don't need
most attributes until you add features such as <a href="#SearchSuggestions">search suggestions</a>
and <a href="#VoiceSearch">voice search</a>. For detailed information about the searchable
configuration file, see the <a
@@ -216,15 +216,15 @@
<p>If you don't have one already, create an {@link android.app.Activity} that will perform
searches and present results. You don't need to implement the search functionality yet—just
create an activity that you can declare in the manifest. Inside the manifest's <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element:</p>
<ol>
<li>Declare the activity to accept the {@link android.content.Intent#ACTION_SEARCH} intent, in an
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>
+<intent-filter>}</a>
element.</li>
<li>Specify the searchable configuration to use, in a <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element.</li>
</ol>
@@ -243,17 +243,17 @@
</application>
</pre>
-<p>The {@code <meta-data>} element must include the {@code android:name} attribute with a
+<p>The {@code <meta-data>} element must include the {@code android:name} attribute with a
value of {@code "android.app.searchable"} and the {@code android:resource} attribute with a
reference to the searchable configuration file (in this example, it
refers to the {@code res/xml/searchable.xml} file).</p>
<p class="note"><strong>Note:</strong> The <a
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> does not need a <a
-href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> with the
+<intent-filter>}</a> does not need a <a
+href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a> with the
{@code DEFAULT} value (which you usually see in <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> elements),
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> elements),
because the system delivers the {@link android.content.Intent#ACTION_SEARCH} intent explicitly to
your searchable activity, using its component name.</p>
@@ -416,10 +416,10 @@
searchable activity to use for the search dialog in {@code OtherActivity}.</p>
<p>To declare the searchable activity for an activity's search dialog,
-add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element inside the respective activity's <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.
-The <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.
+The <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element must include the {@code android:value} attribute that specifies the searchable activity's
class name and the {@code android:name} attribute with a value of {@code
"android.app.default_searchable"}.</p>
@@ -452,7 +452,7 @@
</pre>
<p>Because the {@code OtherActivity} now includes a <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element to declare which searchable activity to use for searches, the activity has enabled the
search dialog.
While the user is in this activity, the {@link
@@ -464,15 +464,15 @@
by default, so you don't need to add this declaration to {@code SearchableActivity}.</p>
<p>If you want every activity in your application to provide the search dialog, insert the above <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element as a child of the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element, instead of each <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>. This
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>. This
way, every activity inherits the value, provides the search dialog, and delivers searches to
the same searchable activity. (If you have multiple searchable activities, you can override the
default searchable activity by placing a different <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
declaration inside individual activities.)</p>
<p>With the search dialog now enabled for your activities, your application is ready to perform
diff --git a/docs/html/guide/topics/search/searchable-config.jd b/docs/html/guide/topics/search/searchable-config.jd
index 4874bb4..e6c1a0d 100644
--- a/docs/html/guide/topics/search/searchable-config.jd
+++ b/docs/html/guide/topics/search/searchable-config.jd
@@ -72,9 +72,9 @@
<dt><a name="label"></a><code>android:label</code></dt>
<dd><em>String resource</em>. (Required.) The name of your application.
It should be the same as the name applied to the {@code android:label} attribute of your <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#label">{@code <activity>}</a> or
+href="{@docRoot}guide/topics/manifest/activity-element.html#label">{@code <activity>}</a> or
<a href="{@docRoot}guide/topics/manifest/application-element.html#label">{@code
-<application>}</a> manifest element. This label is only visible to the user when you set
+<application>}</a> manifest element. This label is only visible to the user when you set
<code>android:includeInGlobalSearch</code> to "true", in which case, this label is used to identify
your application as a searchable item in the system's search settings.</dd>
@@ -136,13 +136,13 @@
<p>If you have defined a content provider to generate search suggestions, you need to
define additional attributes that configure communications with the content
provider. When providing search suggestions, you need some of the following
- {@code <searchable>} attributes:</p><br/>
+ {@code <searchable>} attributes:</p><br/>
<dl class="atn-list">
<dt><a name="searchSuggestAuthority"></a><code>android:searchSuggestAuthority</code></dt>
<dd><em>String</em>. (Required to provide search suggestions.)
This value must match the authority string provided in the {@code android:authorities}
-attribute of the Android manifest {@code <provider>} element.</dd>
+attribute of the Android manifest {@code <provider>} element.</dd>
<dt><a name="searchSuggestPath"></a><code>android:searchSuggestPath</code></dt>
<dd><em>String</em>. This path is used as a portion of the suggestions
@@ -189,7 +189,7 @@
<h4>Quick Search Box attributes</h4>
<p>To make your custom search suggestions available to Quick Search Box, you need some of the
- following {@code <searchable>} attributes:</p><br/>
+ following {@code <searchable>} attributes:</p><br/>
<dl class="atn-list">
<dt><a name="includeInGlobalSearch"></a><code>android:includeInGlobalSearch</code></dt>
@@ -219,7 +219,7 @@
<h4>Voice search attributes</h4>
<p>To enable voice search, you'll need some of the
- following {@code <searchable>} attributes:</p><br/>
+ following {@code <searchable>} attributes:</p><br/>
<dl class="atn-list">
<dt><a name="voiceSearchMode"></a><code>android:voiceSearchMode</code></dt>
diff --git a/docs/html/guide/topics/security/permissions.jd b/docs/html/guide/topics/security/permissions.jd
index cfab3c9..6158e40 100644
--- a/docs/html/guide/topics/security/permissions.jd
+++ b/docs/html/guide/topics/security/permissions.jd
@@ -452,7 +452,7 @@
<dd>Information about how requesting some permissions will implicitly restrict your app
to devices that include the corresponding hardware or software feature.</dd>
<dt><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code
- <uses-permission>}</a></dt>
+ <uses-permission>}</a></dt>
<dd>API reference for the manifest tag that declare's your app's required system permissions.
</dd>
<dt>{@link android.Manifest.permission}</dt>
diff --git a/docs/html/guide/topics/ui/accessibility/apps.jd b/docs/html/guide/topics/ui/accessibility/apps.jd
index da24d03..567dc5b 100644
--- a/docs/html/guide/topics/ui/accessibility/apps.jd
+++ b/docs/html/guide/topics/ui/accessibility/apps.jd
@@ -357,7 +357,7 @@
ViewCompat.setAccessibilityDelegate()} method to implement the accessibility methods
above. For an example of this approach, see the Android Support Library (revision 5 or higher)
sample {@code AccessibilityDelegateSupportActivity} in
-({@code <sdk>/extras/android/support/v4/samples/Support4Demos/})
+({@code <sdk>/extras/android/support/v4/samples/Support4Demos/})
</li>
</ul>
@@ -536,7 +536,7 @@
directly in your custom view class. For another example of this approach, see the Android
<a href="{@docRoot}tools/support-library/index.html">Support Library</a> (revision 5 or higher)
sample {@code AccessibilityDelegateSupportActivity} in
-({@code <sdk>/extras/android/support/v4/samples/Support4Demos/}).</p>
+({@code <sdk>/extras/android/support/v4/samples/Support4Demos/}).</p>
<p class="note"><strong>Note:</strong> You may find information on implementing accessibility for
custom views written prior to Android 4.0 that describes the use of the
diff --git a/docs/html/guide/topics/ui/accessibility/services.jd b/docs/html/guide/topics/ui/accessibility/services.jd
index d69af9f..3ccdbc4 100644
--- a/docs/html/guide/topics/ui/accessibility/services.jd
+++ b/docs/html/guide/topics/ui/accessibility/services.jd
@@ -111,7 +111,7 @@
android.accessibilityservice.AccessibilityService#setServiceInfo setServiceInfo()} at runtime.
However, not all configuration options are available using this method.</p>
-<p>Beginning with Android 4.0, you can include a {@code <meta-data>} element in your manifest
+<p>Beginning with Android 4.0, you can include a {@code <meta-data>} element in your manifest
with a reference to a configuration file, which allows you to set the full range of options for
your accessibility service, as shown in the following example:</p>
@@ -125,7 +125,7 @@
</pre>
<p>This meta-data element refers to an XML file that you create in your application’s resource
-directory ({@code <project_dir>/res/xml/accessibility_service_config.xml}). The following code
+directory ({@code <project_dir>/res/xml/accessibility_service_config.xml}). The following code
shows example contents for the service configuration file:</p>
<pre>
@@ -445,7 +445,7 @@
<p>The API Demo project contains two samples which can be used as a starting point for generating
accessibility services
-({@code <sdk>/samples/<platform>/ApiDemos/src/com/example/android/apis/accessibility}):
+({@code <sdk>/samples/<platform>/ApiDemos/src/com/example/android/apis/accessibility}):
</p>
<ul>
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index b2f98ad..c21671f 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -184,9 +184,9 @@
<p>By default, the system uses your application icon in the action bar, as specified by the <a
href="{@docRoot}guide/topics/manifest/application-element.html#icon">{@code icon}</a>
attribute in the <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-<application>}</a> or <a
+<application>}</a> or <a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> element. However, if you also specify the <a
+<activity>}</a> element. However, if you also specify the <a
href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code logo}</a>
attribute, then the action bar uses the logo image instead of the icon.</p>
@@ -249,7 +249,7 @@
<p>To request that an item appear directly in the action bar
as an action button, include {@code
-showAsAction="ifRoom"} in the {@code <item>} tag. For example:</p>
+showAsAction="ifRoom"} in the {@code <item>} tag. For example:</p>
<pre>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
@@ -269,7 +269,7 @@
<div class="note" id="XmlAttributes">
<p><strong>Using XML attributes from the support library</strong></p>
Notice that the {@code showAsAction} attribute above uses a custom namespace defined in the
-{@code <menu>} tag. This is necessary when using any XML attributes defined by the support
+{@code <menu>} tag. This is necessary when using any XML attributes defined by the support
library, because these attributes do not exist in the Android framework on older devices.
So you must use your own namespace as a prefix for all attributes defined by the support library.
</p>
@@ -319,7 +319,7 @@
<p>When the user presses an action, the system calls your activity's {@link
android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} method. Using the
{@link android.view.MenuItem} passed to this method, you can identify the action by calling {@link
-android.view.MenuItem#getItemId()}. This returns the unique ID provided by the {@code <item>}
+android.view.MenuItem#getItemId()}. This returns the unique ID provided by the {@code <item>}
tag's {@code id} attribute so you can perform the appropriate action. For example:</p>
<pre>
@@ -373,15 +373,15 @@
<p>To enable split action bar when using the support library, you must do two things:</p>
<ol>
<li>Add {@code uiOptions="splitActionBarWhenNarrow"} to each
-<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element or to the
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element. This attribute is understood only by API level 14 and higher (it is ignored
by older versions).</li>
<li>To support older versions, add a <a
- href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+ href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element as a child of each
- <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element that declares the same value for {@code "android.support.UI_OPTIONS"}.</li>
</ol>
@@ -460,10 +460,10 @@
<p>Beginning in Android 4.1 (API level 16), you can declare the parent with the <a href=
"{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code parentActivityName}</a>
attribute in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> element.</p>
+<activity>}</a> element.</p>
<p>To support older devices with the support library, also
include a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code
-<meta-data>}</a> element that specifies
+<meta-data>}</a> element that specifies
the parent activity as the value for {@code android.support.PARENT_ACTIVITY}. For example:</p>
<pre>
<application ... >
@@ -681,7 +681,7 @@
and an action provider can display a submenu when pressed.</p>
<p>To declare an action provider, supply the {@code actionViewClass} attribute in the
-menu {@code <item>} tag with a fully-qualified class name for an
+menu {@code <item>} tag with a fully-qualified class name for an
{@link android.support.v4.view.ActionProvider}.</p>
<p>You can build your own action provider by extending the {@link
@@ -709,7 +709,7 @@
<h3 id="ShareActionProvider">Using the ShareActionProvider</h3>
<p>To add a "share" action with {@link android.support.v7.widget.ShareActionProvider},
-define the {@code actionProviderClass} for an {@code <item>} tag with
+define the {@code actionProviderClass} for an {@code <item>} tag with
the {@link android.support.v7.widget.ShareActionProvider} class. For example:</p>
<pre>
@@ -1489,7 +1489,7 @@
<p class="caution"><strong>Caution:</strong> Be certain that each theme and style declares a parent
-theme in the {@code <style>} tag, from which it inherits all styles not explicitly declared
+theme in the {@code <style>} tag, from which it inherits all styles not explicitly declared
by your theme. When modifying the action bar, using a parent theme is important so that you can
simply override the action bar styles you want to change without re-implementing the styles you
want to leave alone (such as text size or padding in action items).</p>
diff --git a/docs/html/guide/topics/ui/controls/button.jd b/docs/html/guide/topics/ui/controls/button.jd
index b52c3e9..295044f 100644
--- a/docs/html/guide/topics/ui/controls/button.jd
+++ b/docs/html/guide/topics/ui/controls/button.jd
@@ -73,7 +73,7 @@
an on-click event.</p>
<p>To define the click event handler for a button, add the {@link
-android.R.attr#onClick android:onClick} attribute to the {@code <Button>} element in your XML
+android.R.attr#onClick android:onClick} attribute to the {@code <Button>} element in your XML
layout. The value for this attribute must be the name of the method you want to call in response
to a click event. The {@link android.app.Activity} hosting the layout must then implement the
corresponding method.</p>
@@ -140,7 +140,7 @@
<p>You can control exactly how your controls are styled using a theme that you apply to your
entire application. For instance, to ensure that all devices running Android 4.0 and higher use
the Holo theme in your app, declare {@code android:theme="@android:style/Theme.Holo"} in your
-manifest's {@code <application>} element. Also read the blog post, <a
+manifest's {@code <application>} element. Also read the blog post, <a
href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">Holo Everywhere</a>
for information about using the Holo theme while supporting older devices.</p>
diff --git a/docs/html/guide/topics/ui/controls/spinner.jd b/docs/html/guide/topics/ui/controls/spinner.jd
index d2db7a4..3b8aaad 100644
--- a/docs/html/guide/topics/ui/controls/spinner.jd
+++ b/docs/html/guide/topics/ui/controls/spinner.jd
@@ -27,7 +27,7 @@
<img src="{@docRoot}images/ui/spinner.png" alt="" />
<p>You can add a spinner to your layout with the {@link android.widget.Spinner} object. You
-should usually do so in your XML layout with a {@code <Spinner>} element. For example:</p>
+should usually do so in your XML layout with a {@code <Spinner>} element. For example:</p>
<pre>
<Spinner
diff --git a/docs/html/guide/topics/ui/controls/text.jd b/docs/html/guide/topics/ui/controls/text.jd
index c11dc32..f4d72b2a 100644
--- a/docs/html/guide/topics/ui/controls/text.jd
+++ b/docs/html/guide/topics/ui/controls/text.jd
@@ -36,7 +36,7 @@
(cut, copy, paste) and data look-up via auto-completion.</p>
<p>You can add a text field to you layout with the {@link android.widget.EditText} object. You
-should usually do so in your XML layout with a {@code <EditText>} element.</p>
+should usually do so in your XML layout with a {@code <EditText>} element.</p>
<img src="{@docRoot}images/ui/edittext-noextract.png" alt="" />
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index 0c6ec84..e4469ea 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -484,7 +484,7 @@
instead of using the {@link android.app.Dialog} APIs. Simply create an activity and set its theme to
{@link android.R.style#Theme_Holo_Dialog Theme.Holo.Dialog}
in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> manifest element:</p>
+<activity>}</a> manifest element:</p>
<pre>
<activity android:theme="@android:style/Theme.Holo.Dialog" >
@@ -754,7 +754,7 @@
<p>To show an activity as a dialog only when on large screens,
apply the {@link android.R.style#Theme_Holo_DialogWhenLarge Theme.Holo.DialogWhenLarge}
theme to the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> manifest element:</p>
+<activity>}</a> manifest element:</p>
<pre>
<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index dfcea52..2c6d0b2 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -141,7 +141,7 @@
element may contain a nested <code><menu></code> element in order to create a submenu.</dd>
<dt><code><group></code></dt>
- <dd>An optional, invisible container for {@code <item>} elements. It allows you to
+ <dd>An optional, invisible container for {@code <item>} elements. It allows you to
categorize menu items so they share properties such as active state and visibility. For more
information, see the section about <a href="#groups">Creating Menu Groups</a>.</dd>
</dl>
@@ -181,8 +181,8 @@
For information about all the supported attributes, see the <a
href="{@docRoot}guide/topics/resources/menu-resource.html">Menu Resource</a> document.</p>
-<p>You can add a submenu to an item in any menu (except a submenu) by adding a {@code <menu>}
-element as the child of an {@code <item>}. Submenus are useful when your application has a lot
+<p>You can add a submenu to an item in any menu (except a submenu) by adding a {@code <menu>}
+element as the child of an {@code <item>}. Submenus are useful when your application has a lot
of functions that can be organized into topics, like items in a PC application's menu bar (File,
Edit, View, etc.). For example:</p>
@@ -239,7 +239,7 @@
the right side of the action bar (or by pressing the device <em>Menu</em> button, if available). To
enable
quick access to important actions, you can promote a few items to appear in the action bar by adding
-{@code android:showAsAction="ifRoom"} to the corresponding {@code <item>} elements (see figure
+{@code android:showAsAction="ifRoom"} to the corresponding {@code <item>} elements (see figure
2). <p>For more information about action items and other action bar behaviors, see the <a
href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> guide. </p>
<p class="note"><strong>Note:</strong> Even if you're <em>not</em> developing for Android 3.0 or
@@ -260,7 +260,7 @@
declare items for the options menu, they are combined in the UI. The activity's items appear
first, followed by those of each fragment in the order in which each fragment is added to the
activity. If necessary, you can re-order the menu items with the {@code android:orderInCategory}
-attribute in each {@code <item>} you need to move.</p>
+attribute in each {@code <item>} you need to move.</p>
<p>To specify the options menu for an activity, override {@link
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragments provide their
@@ -833,7 +833,7 @@
android.view.Menu#setGroupCheckable(int,boolean,boolean) setGroupCheckable()}</li>
</ul>
-<p>You can create a group by nesting {@code <item>} elements inside a {@code <group>}
+<p>You can create a group by nesting {@code <item>} elements inside a {@code <group>}
element in your menu resource or by specifying a group ID with the {@link
android.view.Menu#add(int,int,int,int) add()} method.</p>
@@ -882,8 +882,8 @@
each time the state changes.</p>
<p>You can define the checkable behavior for individual menu items using the {@code
-android:checkable} attribute in the {@code <item>} element, or for an entire group with
-the {@code android:checkableBehavior} attribute in the {@code <group>} element. For
+android:checkable} attribute in the {@code <item>} element, or for an entire group with
+the {@code android:checkableBehavior} attribute in the {@code <group>} element. For
example, all items in this menu group are checkable with a radio button:</p>
<pre>
@@ -909,7 +909,7 @@
</dl>
<p>You can apply a default checked state to an item using the {@code android:checked} attribute in
-the {@code <item>} element and change it in code with the {@link
+the {@code <item>} element and change it in code with the {@link
android.view.MenuItem#setChecked(boolean) setChecked()} method.</p>
<p>When a checkable item is selected, the system calls your respective item-selected callback method
diff --git a/docs/html/guide/topics/ui/settings.jd b/docs/html/guide/topics/ui/settings.jd
index 02f1255..89960bb 100644
--- a/docs/html/guide/topics/ui/settings.jd
+++ b/docs/html/guide/topics/ui/settings.jd
@@ -186,7 +186,7 @@
generally pre-determined, although you can still modify the collection at runtime.</p>
<p>Each {@link android.preference.Preference} subclass can be declared with an XML element that
-matches the class name, such as {@code <CheckBoxPreference>}.</p>
+matches the class name, such as {@code <CheckBoxPreference>}.</p>
<p>You must save the XML file in the {@code res/xml/} directory. Although you can name the file
anything you want, it's traditionally named {@code preferences.xml}. You usually need only one file,
@@ -197,7 +197,7 @@
settings, then you need separate XML files for each fragment.</p>
<p>The root node for the XML file must be a {@link android.preference.PreferenceScreen
-<PreferenceScreen>} element. Within this element is where you add each {@link
+<PreferenceScreen>} element. Within this element is where you add each {@link
android.preference.Preference}. Each child you add within the
{@link android.preference.PreferenceScreen <PreferenceScreen>} element appears as a single
item in the list of settings.</p>
@@ -234,7 +234,7 @@
<p>The only instances in which this attribute is <em>not required</em> is when the preference is a
{@link android.preference.PreferenceCategory} or {@link android.preference.PreferenceScreen}, or the
preference specifies an {@link android.content.Intent} to invoke (with an <a
-href="#Intents">{@code <intent>}</a> element) or a {@link android.app.Fragment} to display (with an <a
+href="#Intents">{@code <intent>}</a> element) or a {@link android.app.Fragment} to display (with an <a
href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code
android:fragment}</a> attribute).</p>
</dd>
@@ -323,7 +323,7 @@
<img src="{@docRoot}images/ui/settings/settings-subscreen.png" alt="" />
<p class="img-caption"><strong>Figure 3.</strong> Setting subscreens. The {@code
-<PreferenceScreen>} element
+<PreferenceScreen>} element
creates an item that, when selected, opens a separate list to display the nested settings.</p>
<p>For example:</p>
@@ -360,8 +360,8 @@
<p>In some cases, you might want a preference item to open a different activity instead of a
settings screen, such as a web browser to view a web page. To invoke an {@link
-android.content.Intent} when the user selects a preference item, add an {@code <intent>}
-element as a child of the corresponding {@code <Preference>} element.</p>
+android.content.Intent} when the user selects a preference item, add an {@code <intent>}
+element as a child of the corresponding {@code <Preference>} element.</p>
<p>For example, here's how you can use a preference item to open a web page:</p>
@@ -577,7 +577,7 @@
<img src="{@docRoot}images/ui/settings/settings-headers-tablet.png" alt="" />
<p class="img-caption"><strong>Figure 4.</strong> Two-pane layout with headers. <br/><b>1.</b> The
headers are defined with an XML headers file. <br/><b>2.</b> Each group of settings is defined by a
-{@link android.preference.PreferenceFragment} that's specified by a {@code <header>} element in
+{@link android.preference.PreferenceFragment} that's specified by a {@code <header>} element in
the headers file.</p>
<img src="{@docRoot}images/ui/settings/settings-headers-handset.png" alt="" />
@@ -588,8 +588,8 @@
<h3 id="CreateHeaders" style="clear:left">Creating the headers file</h3>
-<p>Each group of settings in your list of headers is specified by a single {@code <header>}
-element inside a root {@code <preference-headers>} element. For example:</p>
+<p>Each group of settings in your list of headers is specified by a single {@code <header>}
+element inside a root {@code <preference-headers>} element. For example:</p>
<pre>
<?xml version="1.0" encoding="utf-8"?>
@@ -611,7 +611,7 @@
<p>With the {@code android:fragment} attribute, each header declares an instance of {@link
android.preference.PreferenceFragment} that should open when the user selects the header.</p>
-<p>The {@code <extras>} element allows you to pass key-value pairs to the fragment in a {@link
+<p>The {@code <extras>} element allows you to pass key-value pairs to the fragment in a {@link
android.os.Bundle}. The fragment can retrieve the arguments by calling {@link
android.app.Fragment#getArguments()}. You might pass arguments to the fragment for a variety of
reasons, but one good reason is to reuse the same subclass of {@link
@@ -619,7 +619,7 @@
preferences XML file the fragment should load.</p>
<p>For example, here's a fragment that can be reused for multiple settings groups, when each
-header defines an {@code <extra>} argument with the {@code "settings"} key:</p>
+header defines an {@code <extra>} argument with the {@code "settings"} key:</p>
<pre>
public static class SettingsFragment extends PreferenceFragment {
@@ -717,7 +717,7 @@
</PreferenceScreen>
</pre>
-<p>Because support for {@code <preference-headers>} was added in Android 3.0, the system calls
+<p>Because support for {@code <preference-headers>} was added in Android 3.0, the system calls
{@link android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} in your {@link
android.preference.PreferenceActivity} only when running on Androd 3.0 or higher. In order to load
the "legacy" headers file ({@code preference_headers_legacy.xml}), you must check the Android
@@ -747,7 +747,7 @@
<p>The only thing left to do is handle the {@link android.content.Intent} that's passed into the
activity to identify which preference file to load. So retrieve the intent's action and compare it
-to known action strings that you've used in the preference XML's {@code <intent>} tags:</p>
+to known action strings that you've used in the preference XML's {@code <intent>} tags:</p>
<pre>
final static String ACTION_PREFS_ONE = "com.example.prefs.PREFS_ONE";
diff --git a/docs/html/guide/topics/ui/themes.jd b/docs/html/guide/topics/ui/themes.jd
index bc1c4f0..f932dbd 100644
--- a/docs/html/guide/topics/ui/themes.jd
+++ b/docs/html/guide/topics/ui/themes.jd
@@ -77,13 +77,13 @@
directory of your project. The name of the XML file is arbitrary, but it must use the
{@code .xml} extension and be saved in the {@code res/values/} folder.</p>
-<p>The root node of the XML file must be {@code <resources>}.</p>
+<p>The root node of the XML file must be {@code <resources>}.</p>
-<p>For each style you want to create, add a {@code <style>} element to the file
+<p>For each style you want to create, add a {@code <style>} element to the file
with a {@code name} that uniquely identifies the style (this attribute is required).
-Then add an {@code <item>} element for each property of that style, with a
+Then add an {@code <item>} element for each property of that style, with a
{@code name} that declares the style property and a value to go with it (this attribute
-is required). The value for the {@code <item>} can
+is required). The value for the {@code <item>} can
be a keyword string, a hex color, a reference to another resource type, or other value
depending on the style property.
Here's an example file with a single style:</p>
@@ -100,12 +100,12 @@
</resources>
</pre>
-<p>Each child of the {@code <resources>} element is converted into an application resource
-object at compile-time, which can be referenced by the value in the {@code <style>} element's
+<p>Each child of the {@code <resources>} element is converted into an application resource
+object at compile-time, which can be referenced by the value in the {@code <style>} element's
{@code name} attribute. This example style can be referenced from an XML layout as
{@code @style/CodeFont} (as demonstrated in the introduction above).</p>
-<p>The <code>parent</code> attribute in the {@code <style>} element is optional and
+<p>The <code>parent</code> attribute in the {@code <style>} element is optional and
specifies the resource ID of another style from which this style should inherit
properties. You can then override the inherited style properties if you want to.</p>
@@ -117,7 +117,7 @@
<h3 id="Inheritance">Inheritance</h3>
-<p>The {@code parent} attribute in the {@code <style>} element lets you specify a style
+<p>The {@code parent} attribute in the {@code <style>} element lets you specify a style
from which your style should inherit properties.
You can use this to inherit properties from an existing style and
then define only the properties that you want to change or add. You can
@@ -144,7 +144,7 @@
</style>
</pre>
-<p>Notice that there is no {@code parent} attribute in the {@code <style>} tag, but because
+<p>Notice that there is no {@code parent} attribute in the {@code <style>} tag, but because
the {@code name} attribute begins with the {@code CodeFont} style name (which
is a style that you have created), this style inherits all style properties from that style. This
style then overrides the {@code android:textColor} property to make the text red. You can
@@ -170,7 +170,7 @@
<h3 id="Properties">Style Properties</h3>
<p>Now that you understand how a style is defined, you need to learn what kind
-of style properties—defined by the {@code <item>} element—are available.
+of style properties—defined by the {@code <item>} element—are available.
You're probably familiar with some already, such as {@link android.R.attr#layout_width} and
{@link android.R.attr#textColor}. Of course, there are many more style properties you can use.</p>
@@ -184,7 +184,7 @@
android:inputType}</a>, so where you might normally place the <a
href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
android:inputType}</a>
-attribute in an {@code <EditText>} element, like this:</p>
+attribute in an {@code <EditText>} element, like this:</p>
<pre>
<EditText
android:inputType="number"
@@ -226,8 +226,8 @@
style as a theme.</p>
<p class="note"><strong>Note:</strong> Don't forget to prefix the property names in each
-{@code <item>} element with the <code>android:</code> namespace. For example:
-{@code <item name="android:inputType">}.</p>
+{@code <item>} element with the <code>android:</code> namespace. For example:
+{@code <item name="android:inputType">}.</p>
diff --git a/docs/html/guide/webapps/best-practices.jd b/docs/html/guide/webapps/best-practices.jd
index a13c69da..9e070c6 100644
--- a/docs/html/guide/webapps/best-practices.jd
+++ b/docs/html/guide/webapps/best-practices.jd
@@ -72,7 +72,7 @@
<li>Use viewport meta data to properly resize your web page
- <p>In your document {@code <head>}, you should provide meta data that specifies how you
+ <p>In your document {@code <head>}, you should provide meta data that specifies how you
want the browser's viewport to render your web page. For example, your viewport meta data can
specify the height and width for the browser's viewport, the initial web page scale and even the
target screen density.</p>
@@ -89,7 +89,7 @@
<p>Because mobile devices typically have a connection speed far slower than a desktop
computer, you should make your web pages load as fast as possible. One way to speed it up is to
avoid loading extra files such as stylesheets and script files in the {@code
-<head>}. Instead, provide your CSS and JavaScript directly in the <head> (or
+<head>}. Instead, provide your CSS and JavaScript directly in the <head> (or
at the end of the <body>, for scripts that you don't need until the page is loaded).
Alternatively, you should optimize the size and speed of your files by compressing them with tools
like <a href="http://code.google.com/p/minify/">Minify</a>.</p>
diff --git a/docs/html/guide/webapps/targeting.jd b/docs/html/guide/webapps/targeting.jd
index 7e02340..4a2ea17 100644
--- a/docs/html/guide/webapps/targeting.jd
+++ b/docs/html/guide/webapps/targeting.jd
@@ -78,8 +78,8 @@
with {@link android.webkit.WebSettings#setUseWideViewPort setUseWideViewPort()}.</p>
<p>You can define properties of the viewport for your web page, such as the width and initial zoom
-level, using the {@code <meta name="viewport" ...>} tag in your document
-{@code <head>}.</p>
+level, using the {@code <meta name="viewport" ...>} tag in your document
+{@code <head>}.</p>
<p>The following syntax shows all of the
supported viewport properties and the types of values accepted by each one:</p>
@@ -96,7 +96,7 @@
" />
</pre>
-<p>For example, the following {@code <meta>} tag specifies that the viewport width
+<p>For example, the following {@code <meta>} tag specifies that the viewport width
should exactly match the device screen's width and that the ability to zoom should be disabled:</p>
<pre>
diff --git a/docs/html/guide/webapps/webview.jd b/docs/html/guide/webapps/webview.jd
index 9b46b5b..f133b57 100644
--- a/docs/html/guide/webapps/webview.jd
+++ b/docs/html/guide/webapps/webview.jd
@@ -68,7 +68,7 @@
<h2 id="AddingWebView">Adding a WebView to Your Application</h2>
<p>To add a {@link android.webkit.WebView} to your Application, simply include the {@code
-<WebView>} element in your activity layout. For example, here's a layout file in which the
+<WebView>} element in your activity layout. For example, here's a layout file in which the
{@link android.webkit.WebView} fills the screen:</p>
<pre>
@@ -171,7 +171,7 @@
<p class="caution"><strong>Caution:</strong> If you've set your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a>
to 17 or higher, <strong>you
-must add the {@code @JavascriptInterface} annotation</strong> to any method that you want
+must add the <code>@JavascriptInterface</code> annotation</strong> to any method that you want
available to your JavaScript (the method must also be public). If you do not provide the
annotation, the method is not accessible by your web page when running on Android 4.2 or
higher.</p>
diff --git a/docs/html/ndk/downloads/revision_history.jd b/docs/html/ndk/downloads/revision_history.jd
index a32b814..95bfe7c 100644
--- a/docs/html/ndk/downloads/revision_history.jd
+++ b/docs/html/ndk/downloads/revision_history.jd
@@ -1218,7 +1218,7 @@
(<a href="https://android-review.googlesource.com/#/c/46821">Change 46821</a>)</li>
<li>Modified {@code wchar.h} to not redefine {@code WCHAR_MAX} and
{@code WCHAR_MIN}</li>
- <li>Fixed {@code <inttypes.h>} declaration for pointer-related {@code PRI} and
+ <li>Fixed {@code <inttypes.h>} declaration for pointer-related {@code PRI} and
{@code SCN} macros. (<a href="http://b.android.com/57218">Issue 57218</a>)</li>
<li>Changed the {@code sys/cdefs.h} header so that {@code __WCHAR_TYPE__} is 32-bit
for API levels less than 9, which means that {@code wchat_t} is 32-bit for all
@@ -1367,7 +1367,7 @@
(<a href="http://b.android.com/52909">Issue 52909</a>)</li>
<li>Fixed a GCC 4.7 segfault.
(<a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55245">GCC Issue</a>)</li>
- <li>Fixed {@code <chrono>} clock resolution and enabled {@code steady_clock}.
+ <li>Fixed {@code <chrono>} clock resolution and enabled {@code steady_clock}.
(<a href="http://b.android.com/39680">Issue 39680</a>)</li>
<li>Fixed toolchain to enable {@code _GLIBCXX_HAS_GTHREADS} for GCC 4.7 libstdc++.
(<a href="http://b.android.com/41770">Issue 41770</a>,
@@ -1387,7 +1387,7 @@
(<a href="https://android-review.googlesource.com/#/c/52134">Change 52134</a>)</li>
<li>Fixed Clang 3.1 internal compiler error when using Eigen library.
(<a href="http://b.android.com/41246">Issue 41246</a>)</li>
- <li>Fixed Clang 3.1 internal compiler error including {@code <chrono>} in C++11
+ <li>Fixed Clang 3.1 internal compiler error including {@code <chrono>} in C++11
mode.
(<a href="http://b.android.com/39600">Issue 39600</a>)</li>
<li>Fixed Clang 3.1 internal compiler error when generating object code for a method
@@ -1484,7 +1484,7 @@
(<a href="http://b.android.com/52805">Issue 52805</a>)</li>
<li>Enabled {@code FUTEX} system call in GNU libstdc++.</li>
<li>Updated {@code ndk-build} so that it no longer copies prebuilt static library to
- a project's {@code obj/local/<abi>/} directory.
+ a project's {@code obj/local/<abi>/} directory.
(<a href="http://b.android.com/40302">Issue 40302</a>)</li>
<li>Removed {@code __ARM_ARCH_5*__} from ARM {@code toolchains/*/setup.mk} script.
(<a href="http://b.android.com/21132">Issue 21132</a>)</li>
@@ -1723,8 +1723,8 @@
add this environment variable setting to {@code Application.mk}.</li>
<li>For standalone builds, add {@code --llvm-version=3.1} to
{@code make-standalone-toolchain.sh} and replace {@code CC} and {@code CXX} in your
- makefile with {@code <tool-path>/bin/clang} and
- {@code <tool-path>/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
+ makefile with {@code <tool-path>/bin/clang} and
+ {@code <tool-path>/bin/clang++}. See {@code STANDALONE-TOOLCHAIN.html} for
details.</li>
</ul>
<p class="note"><strong>Note:</strong> This feature is experimental. Please try it and
@@ -1915,12 +1915,12 @@
<li>Removed unimplemented functions in {@code malloc.h}.</li>
<li>Fixed {@code stdint.h} defintion of {@code uint64_t} for ANSI compilers.
(<a href="http://b.android.com/1952">Issue 1952</a>)</li>
- <li>Fixed preprocessor macros in {@code <arch>/include/machine/*}.</li>
+ <li>Fixed preprocessor macros in {@code <arch>/include/machine/*}.</li>
<li>Replaced {@code link.h} for MIPS with new version supporting all platforms.</li>
<li>Removed {@code linux-unistd.h}</li>
<li>Move GLibc-specific macros {@code LONG_LONG_MIN}, {@code LONG_LONG_MAX} and
- {@code ULONG_LONG_MAX} from {@code <pthread.h>} to {@code
-<limits.h>}.</li>
+ {@code ULONG_LONG_MAX} from {@code <pthread.h>} to {@code
+<limits.h>}.</li>
</ul>
</li>
<li>Fixed a buffer overflow in {@code ndk-stack-parser}.</li>
@@ -2177,8 +2177,8 @@
<li>Changed locations of binaries:
<ul>
<li>Moved {@code gdbserver} from
-{@code toolchain/<arch-os-ver>/prebuilt/gdbserver} to
-{@code prebuilt/android-<arch>/gdbserver/gdbserver}.</li>
+{@code toolchain/<arch-os-ver>/prebuilt/gdbserver} to
+{@code prebuilt/android-<arch>/gdbserver/gdbserver}.</li>
<li>Renamed x86 toolchain prefix from {@code i686-android-linux-} to
{@code i686-linux-android-}.</li>
<li>Moved {@code sources/cxx-stl/gnu-libstdc++/include} and {@code lib} to
@@ -2262,7 +2262,7 @@
<dd>
<ul>
<li>Fixed a typo in GAbi++ implementation where the result of {@code
- dynamic_cast<D>(b)} of base class object {@code b} to derived class {@code D} is
+ dynamic_cast<D>(b)} of base class object {@code b} to derived class {@code D} is
incorrectly adjusted in the opposite direction from the base class.
(<a href="http://b.android.com/28721">Issue 28721</a>)
</li>
diff --git a/docs/html/ndk/guides/abis.jd b/docs/html/ndk/guides/abis.jd
index f4819b2..7b1a7ad 100644
--- a/docs/html/ndk/guides/abis.jd
+++ b/docs/html/ndk/guides/abis.jd
@@ -418,8 +418,8 @@
/lib/<abi>/lib<name>.so
</pre>
-<p>Here, {@code <abi>} is one of the ABI names listed under <a href="#sa">Supported ABIs</a>,
-and {@code <name>} is the name of the library as you defined it for the {@code LOCAL_MODULE}
+<p>Here, {@code <abi>} is one of the ABI names listed under <a href="#sa">Supported ABIs</a>,
+and {@code <name>} is the name of the library as you defined it for the {@code LOCAL_MODULE}
variable in the <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file. Since
APK files are just zip files, it is trivial to open them and confirm that the shared native
libraries are where they belong.</p>
@@ -488,7 +488,7 @@
<p>When it finds the libraries that it's looking for, the package manager
copies them to <code>/lib/lib<name>.so</code>, under the application's
-{@code data} directory ({@code data/data/<package_name>/lib/}).</p>
+{@code data} directory ({@code data/data/<package_name>/lib/}).</p>
<p>If there is no shared-object file at all, the application builds and installs, but crashes at
runtime.</p>
diff --git a/docs/html/ndk/guides/android_mk.jd b/docs/html/ndk/guides/android_mk.jd
index 47fefc3..1416d13 100644
--- a/docs/html/ndk/guides/android_mk.jd
+++ b/docs/html/ndk/guides/android_mk.jd
@@ -774,7 +774,7 @@
<h3 id="npfm">NDK-provided function macros</h2>
<p>This section explains GNU Make function macros that the NDK provides. Use
-{@code $(call <function>)} to evaluate them; they return textual information.</p>
+{@code $(call <function>)} to evaluate them; they return textual information.</p>
<h4>my-dir</h4>
@@ -870,6 +870,6 @@
$(call import-module,<name>)
</pre>
-<p>In this example, the build system looks for the module tagged {@code <name>} in the list of
+<p>In this example, the build system looks for the module tagged {@code <name>} in the list of
directories referenced that your {@code NDK_MODULE_PATH} environment variable references, and
includes its {@code Android.mk} file automatically for you.</p>
\ No newline at end of file
diff --git a/docs/html/ndk/guides/application_mk.jd b/docs/html/ndk/guides/application_mk.jd
index 1294687..e669f3f 100644
--- a/docs/html/ndk/guides/application_mk.jd
+++ b/docs/html/ndk/guides/application_mk.jd
@@ -30,7 +30,7 @@
$NDK/apps/<myapp>/Application.mk
</pre>
-<p>Here, {@code <myapp>} is a short name used to describe your app to the NDK build system. It
+<p>Here, {@code <myapp>} is a short name used to describe your app to the NDK build system. It
doesn't actually go into your generated shared libraries or your final packages.</p>
<h2 id="var">Variables</h2>
@@ -39,7 +39,7 @@
uses this information to place stripped-down versions of the generated JNI shared libraries
into a specific location known to the APK-generating tools.</p>
-<p>If you place your {@code Application.mk} file under {@code $NDK/apps/<myapp>/}, you must
+<p>If you place your {@code Application.mk} file under {@code $NDK/apps/<myapp>/}, you must
define this variable. If you place it under {@code $PROJECT/jni/}, it is optional.
<h4>APP_OPTIM</h4>
@@ -54,7 +54,7 @@
preventing you from inspecting them. Also, code re-ordering can make it more difficult to step
through the code; stack traces may not be reliable.</p>
-<p>Declaring {@code android:debuggable} in your application manifest's {@code <application>}
+<p>Declaring {@code android:debuggable} in your application manifest's {@code <application>}
tag will cause this variable to default to {@code debug} instead of {@code release}. Override this
default value by setting {@code APP_OPTIM} to {@code release}.</p>
diff --git a/docs/html/ndk/guides/concepts.jd b/docs/html/ndk/guides/concepts.jd
index 0601f21..9f2b22a 100644
--- a/docs/html/ndk/guides/concepts.jd
+++ b/docs/html/ndk/guides/concepts.jd
@@ -222,10 +222,10 @@
callbacks from blocking your main thread.</li>
</ul>
-<p>The {@code <ndk_root>/sources/android/native_app_glue/android_native_app_glue.c} source is
+<p>The {@code <ndk_root>/sources/android/native_app_glue/android_native_app_glue.c} source is
also available, allowing you to modify the implementation.</p>
<p>For more information on how to use this static library, examine the native-activity sample
-application and its documentation. Further reading is also available in the comments in the {@code <ndk_root>/sources/android/native_app_glue/android_native_app_glue.h} file.</p>
+application and its documentation. Further reading is also available in the comments in the {@code <ndk_root>/sources/android/native_app_glue/android_native_app_glue.h} file.</p>
<h3 id="na">Using the native_activity.h interface</h3>
@@ -277,13 +277,13 @@
<a href="{@docRoot}ndk/reference/struct_a_native_activity.html">{@code ANativeActivity}</a>
structure, which contains function pointers to the various callback implementations that you need
to write.
-Set the applicable callback function pointers in {@code ANativeActivity->callbacks} to the
+Set the applicable callback function pointers in {@code ANativeActivity->callbacks} to the
implementations of your callbacks.</li>
-<li>Set the {@code ANativeActivity->instance} field to the address of any instance of specific
+<li>Set the {@code ANativeActivity->instance} field to the address of any instance of specific
data that you want to use.</li>
<li>Implement anything else that you want your activity to do upon starting.</li>
-<li>Implement the rest of the callbacks that you set in {@code ANativeActivity->callbacks}. For
+<li>Implement the rest of the callbacks that you set in {@code ANativeActivity->callbacks}. For
more information on when the callbacks are called, see
<a href="{@docRoot}training/basics/activity-lifecycle/index.html">Managing the Activity
Lifecycle</a>.
diff --git a/docs/html/ndk/guides/cpp-support.jd b/docs/html/ndk/guides/cpp-support.jd
index 0074b80..21df6af 100644
--- a/docs/html/ndk/guides/cpp-support.jd
+++ b/docs/html/ndk/guides/cpp-support.jd
@@ -188,7 +188,7 @@
<h4>atomic support</h4>
-<p>If you include {@code <atomic>}, it's likely that you also need {@code libatomic}.
+<p>If you include {@code <atomic>}, it's likely that you also need {@code libatomic}.
If you are using {@code ndk-build}, add the following line:</p>
<pre>
diff --git a/docs/html/ndk/guides/cpu-features.jd b/docs/html/ndk/guides/cpu-features.jd
index b031909..3323efd 100644
--- a/docs/html/ndk/guides/cpu-features.jd
+++ b/docs/html/ndk/guides/cpu-features.jd
@@ -29,7 +29,7 @@
</pre>
</li>
-<li>In your source code, include the {@code <cpu-features.h>} header file.</li>
+<li>In your source code, include the {@code <cpu-features.h>} header file.</li>
<li>At the end of your <a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file,
insert an instruction to import the {@code android/cpufeatures} module. For example:
diff --git a/docs/html/ndk/guides/ndk-build.jd b/docs/html/ndk/guides/ndk-build.jd
index 18ca2d8..e8f6fc5 100644
--- a/docs/html/ndk/guides/ndk-build.jd
+++ b/docs/html/ndk/guides/ndk-build.jd
@@ -77,11 +77,11 @@
<dt>{@code NDK_HOST_32BIT=1}</dt>
<dd>Always use the toolchain in 32-bit mode (see <a href="#6432">64-bit and 32-bit
Toolchains</a>).</dd>
- <dt>{@code NDK_APPLICATION_MK=<file>}</dt>
+ <dt>{@code NDK_APPLICATION_MK=<file>}</dt>
<dd>Build, using a specific <code>Application.mk</code> file pointed to by the
{@code NDK_APPLICATION_MK} variable.</dd>
- <dt>{@code -C <project>}</dt>
- <dd>Build the native code for the project path located at {@code <project>}. Useful if you
+ <dt>{@code -C <project>}</dt>
+ <dd>Build the native code for the project path located at {@code <project>}. Useful if you
don't want to {@code cd} to it in your terminal.</dd>
</dl>
@@ -159,8 +159,8 @@
<h2 id="6432">64-Bit and 32-Bit Toolchains</h2>
<p>Some toolchains come with both 64-bit and 32-bit versions. For example,
-directories {@code <ndk>/toolchain/<name>/prebuilt/} and
-{@code <ndk>/prebuilt/} may contain both {@code linux-x86} and
+directories {@code <ndk>/toolchain/<name>/prebuilt/} and
+{@code <ndk>/prebuilt/} may contain both {@code linux-x86} and
{@code linux-x86_64} folders for Linux tools in 32-bit and 64-bit modes,
respectively. The ndk-build script automatically chooses a 64-bit version of
the toolchain if the host OS supports it. You can force the use of a 32-bit
@@ -182,7 +182,7 @@
$ ndk-build
</pre>
-<p>You can override other host prebuilt tools in {@code $NDK/prebuilt/<OS>/bin/}
+<p>You can override other host prebuilt tools in {@code $NDK/prebuilt/<OS>/bin/}
with the following environment variables: </p>
<pre class="no-pretty-print">
diff --git a/docs/html/ndk/guides/ndk-gdb.jd b/docs/html/ndk/guides/ndk-gdb.jd
index b15e67e..5e2b751 100644
--- a/docs/html/ndk/guides/ndk-gdb.jd
+++ b/docs/html/ndk/guides/ndk-gdb.jd
@@ -22,9 +22,9 @@
<ul>
<li>Build your app using the {@code ndk-build} script. The {@code ndk-gdb} script
-does not support using the legacy {@code make APP=<name>} method to build.</p></li>
+does not support using the legacy {@code make APP=<name>} method to build.</p></li>
<li>Enable app debugging in your {@code AndroidManifest.xml} file by including an
-{@code <application>} element that sets the {@code android:debuggable} attribute to {@code
+{@code <application>} element that sets the {@code android:debuggable} attribute to {@code
true}.</li>
<li>Build your app to run on Android 2.2 (Android API level 8) or higher.</li>
<li>Debug on a device or emulator running Android 2.2 or higher. For debugging purposes, the target
@@ -59,7 +59,7 @@
<p>Next, {@code ndk-gdb} displays a normal GDB prompt.</p>
<p>You interact with {@code ndk-gdb} in the same way as you would with GNU GDB. For example, you can
-use {@code b <location>} to set breakpoints, and {@code c} (for "continue") to
+use {@code b <location>} to set breakpoints, and {@code c} (for "continue") to
resume execution. For a comprehensive list of commands, see the
<a href="http://www.gnu.org/software/gdb/">GDB manual.</a></p>
@@ -78,7 +78,7 @@
<p>By default, {@code ndk-gdb} searches for an already-running application process, and displays an
error if it doesn't find one. You can, however, use the {@code --start} or
-{@code --launch=<name>} option to automatically start your activity before the debugging
+{@code --launch=<name>} option to automatically start your activity before the debugging
session. For more information, see <a href="#opt">Options</a>.</p>
@@ -117,13 +117,13 @@
explicitly launch the application on the target device before the debugging session.</p></td>
<p>Starting {@code ndk-gdb} with this option specified launches the first launchable activity listed
-in your application manifest. Use {@code --launch=<name>} to start the next launchable
+in your application manifest. Use {@code --launch=<name>} to start the next launchable
activity. To dump the list of launchable activities, run {@code --launch-list} from the command
line.</p>
</tr>
<tr>
-<td>{@code --launch=<name>}</td>
+<td>{@code --launch=<name>}</td>
<td><p>This option is similar to {@code --start}, except that it allows you to start a specific
activity from your application. This feature is only useful if your manifest defines multiple
launchable activities.</p></td>
@@ -136,20 +136,20 @@
</tr>
<tr>
-<td>{@code --project=<path>}</td>
+<td>{@code --project=<path>}</td>
<td>This option specifies the app project directory. It is useful if you want to launch the
script without first having to change to the project directory.</p></td>
</tr>
<tr>
-<td>{@code --port=<port>}</td>
+<td>{@code --port=<port>}</td>
<td> <p>By default, {@code ndk-gdb} uses local TCP port 5039 to communicate with the app it
is debugging on the target device. Using a different port allows you to natively debug programs
running on different devices or emulators connected to the same host machine.</p></td>
</tr>
<tr>
-<td>{@code --adb=<file>}</td>
+<td>{@code --adb=<file>}</td>
<td><p>This option specifies the <a href="{@docRoot}tools/help/adb.html">adb</a>
tool executable. It is only necessary if you have not set your path to include that executable.</p>
</td>
@@ -159,7 +159,7 @@
<td>
<li>{@code -d}</li>
<li>{@code -e}</li>
-<li>{@code -s <serial>}</li></td>
+<li>{@code -s <serial>}</li></td>
<td><p>These flags are similar to the adb commands with the same names. Set these flags if you have
several devices or emulators connected to your host machine. Their meanings are as follows:</p>
<dl>
@@ -167,8 +167,8 @@
<dd>Connect to a single physical device.</dd>
<dt>{@code -e}</dt>
<dd>Connect to a single emulator device.</dd>
- <dt>{@code -s <serial>}</dt>
- <dd>Connect to a specific device or emulator. Here, {@code <serial>} is the device's name
+ <dt>{@code -s <serial>}</dt>
+ <dd>Connect to a specific device or emulator. Here, {@code <serial>} is the device's name
as listed by the {@code adb devices} command.</dd>
</dl>
@@ -178,11 +178,11 @@
<tr>
<td>
-<li>{@code --exec=<file>}</li>
-<li>{@code -x <file>}</li>
+<li>{@code --exec=<file>}</li>
+<li>{@code -x <file>}</li>
</td>
<td><p>This option tells {@code ndk-gdb} to run the GDB initialization commands found in
-{@code <file>} after connecting to the process it is debugging. This is a useful feature if
+{@code <file>} after connecting to the process it is debugging. This is a useful feature if
you want to do something repeatedly, such as setting up a list of breakpoints, and then resuming
execution automatically.</p></td>
</tr>
@@ -200,7 +200,7 @@
</tr>
<tr>
-<td>{@code --gnumake-flag=<flag>}</td>
+<td>{@code --gnumake-flag=<flag>}</td>
<td><p>This option is an extra flag (or flags) to pass to the
{@code ndk-build} system when
querying it for project information. You can use multiple instances of this option in the
diff --git a/docs/html/ndk/guides/ndk-stack.jd b/docs/html/ndk/guides/ndk-stack.jd
index 46146cb..45d433c 100644
--- a/docs/html/ndk/guides/ndk-stack.jd
+++ b/docs/html/ndk/guides/ndk-stack.jd
@@ -14,7 +14,7 @@
<p>The {@code ndk-stack} tool allows you to filter stack traces as they appear in the
output of <a href="{@docRoot}tools/help/logcat.html">{@code adb logcat}</a>. It also replaces any
address inside a shared library with the corresponding
-{@code <source-file>:<line-number>} values from your source code, making issues easier
+{@code <source-file>:<line-number>} values from your source code, making issues easier
to pinpoint.</p>
<p>For example, it translates something like:</p>
@@ -57,7 +57,7 @@
<h2>Usage</h2>
<p>To use {@code ndk-stack}, you first need a directory containing symbolic versions of your app's
shared libraries. If you use the NDK build system ({@code ndk-build}), these shared-library
-files reside under {@code $PROJECT_PATH/obj/local/<abi>}, where {@code <abi>} represents
+files reside under {@code $PROJECT_PATH/obj/local/<abi>}, where {@code <abi>} represents
your device's ABI. By default, the system uses the {@code armeabi} ABI.</p>
<p>There are two ways to use the tool. You can feed the logcat text as direct input to the program.
diff --git a/docs/html/ndk/guides/prebuilts.jd b/docs/html/ndk/guides/prebuilts.jd
index 52eb437..4cb1819 100644
--- a/docs/html/ndk/guides/prebuilts.jd
+++ b/docs/html/ndk/guides/prebuilts.jd
@@ -58,7 +58,7 @@
<p>In this example, the name of the module is the same as that of the prebuilt library.</p>
<p>The build system places a copy of your prebuilt shared library into {@code $PROJECT/obj/local},
-and another copy, stripped of debug information, into {@code $PROJECT/libs/<abi>}. Here,
+and another copy, stripped of debug information, into {@code $PROJECT/libs/<abi>}. Here,
{@code $PROJECT} is the root directory of your project.</p>
<h2 id="rp">Referencing the Prebuilt Library from Other Modules</h2>
@@ -111,7 +111,7 @@
<h2 id="dp">Debugging Prebuilt Libraries</h2>
<p>We recommend that you provide prebuilt shared libraries containing debug symbols. The NDK build
system always strips the symbols from the version of the library that it installs into
-{@code $PROJECT/libs/<abi>/}, but you can use the debug version for debugging with
+{@code $PROJECT/libs/<abi>/}, but you can use the debug version for debugging with
{@code ndk-gdb}.</p>
<h2 id="sa">Selecting ABIs for Prebuilt Libraries</h2>
diff --git a/docs/html/ndk/guides/setup.jd b/docs/html/ndk/guides/setup.jd
index 81a33c0..8d4334e 100644
--- a/docs/html/ndk/guides/setup.jd
+++ b/docs/html/ndk/guides/setup.jd
@@ -61,7 +61,7 @@
<p>To confirm that you have installed the NDK, set it up correctly, and properly configured Eclipse,
follow these steps:</p>
<ol type="1">
-<li>Import the hello-jni sample from {@code <ndk>/samples/}, as you would any other Android
+<li>Import the hello-jni sample from {@code <ndk>/samples/}, as you would any other Android
project.</li>
<li>In the <i>Project Explorer</i> pane, right-click the project name (<i>HelloJni</i>). A
context menu appears.</li>
diff --git a/docs/html/ndk/guides/stable_apis.jd b/docs/html/ndk/guides/stable_apis.jd
index cad02ac..c38e684 100644
--- a/docs/html/ndk/guides/stable_apis.jd
+++ b/docs/html/ndk/guides/stable_apis.jd
@@ -54,7 +54,7 @@
the C and C++ libraries, see <a href="#a3">Android API level 3</a>.</p>
<p>The NDK often provides new headers and libraries for new Android releases. These files reside
-under {@code $NDK/platforms/android-<level>/<abi>/usr/include}. When the NDK does not
+under {@code $NDK/platforms/android-<level>/<abi>/usr/include}. When the NDK does not
have a specific new group of headers and libraries for an Android API level, it means that
an app targeting that level should use the most recently released NDK assets. For example,
there was no new release of NDK headers or libraries for Android API levels 6 and 7. Therefore,
@@ -154,7 +154,7 @@
<h4>Android-specific log support</h4>
-<p>{@code <android/log.h>} contains various definitions that an app can use to send log
+<p>{@code <android/log.h>} contains various definitions that an app can use to send log
messages to the kernel from native code. For more information about these definitions, see the
comments in {@code $NDK/platforms/android-3/arch-arm/usr/include/android/log.h}, where {@code $NDK}
is the root of your NDK installation.</p>
@@ -214,7 +214,7 @@
<p>Additionally, you must put a
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> tag in your manifest file to indicate the version of
+<uses-feature>}</a> tag in your manifest file to indicate the version of
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>
that your application requires.</p>
@@ -234,7 +234,7 @@
images and above.</p>
<h4>OpenGL ES 2.0 library:</h4>
-<p>The standard OpenGL ES 2.0 headers {@code <GLES2/gl2.h>} and {@code <GLES2/gl2ext.h>}
+<p>The standard OpenGL ES 2.0 headers {@code <GLES2/gl2.h>} and {@code <GLES2/gl2ext.h>}
contain the declarations needed for performing OpenGL ES 2.0 rendering calls from native code.
These rendering calls provide the ability to use the GLSL language to define and use vertex and
fragment shaders.</p>
@@ -255,9 +255,9 @@
<p>Additionally, you must put a
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
+<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
application requires. For more information about the OpenGL ES settings for
-{@code <uses-feature>}, see
+{@code <uses-feature>}, see
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
<p>The hello-gl2 sample application provies a basic example of how to use OpenGL ES 2.0 with the
@@ -296,7 +296,7 @@
<li>Call {@code AndroidBitmap_unlockPixels()} to unlock the buffer.</li>
</ol>
-<p>To use {@code jnigraphics}, include the {@code <bitmap.h>} header in your source code, and
+<p>To use {@code jnigraphics}, include the {@code <bitmap.h>} header in your source code, and
link against {@code jnigraphics} by including the following line in your
<a href="{@docRoot}ndk/guides/android_mk.html">{@code Android.mk}</a> file:</p>
@@ -368,19 +368,19 @@
<p>This release provides the following native headers:</p>
<ul>
-<li>{@code <native_activity.h>}</li>
-<li>{@code <looper.h>}</li>
-<li>{@code <input.h>}</li>
-<li>{@code <keycodes.h>}</li>
-<li>{@code <sensor.h>}</li>
-<li>{@code <rect.h>}</li>
-<li>{@code <window.h>}</li>
-<li>{@code <native_window.h>}</li>
-<li>{@code <native_window_jni.h>}</li>
-<li>{@code <configuration.h>}</li>
-<li>{@code <asset_manager.h>}</li>
-<li>{@code <storage_manager.h>}</li>
-<li>{@code <obb.h>}</li>
+<li>{@code <native_activity.h>}</li>
+<li>{@code <looper.h>}</li>
+<li>{@code <input.h>}</li>
+<li>{@code <keycodes.h>}</li>
+<li>{@code <sensor.h>}</li>
+<li>{@code <rect.h>}</li>
+<li>{@code <window.h>}</li>
+<li>{@code <native_window.h>}</li>
+<li>{@code <native_window_jni.h>}</li>
+<li>{@code <configuration.h>}</li>
+<li>{@code <asset_manager.h>}</li>
+<li>{@code <storage_manager.h>}</li>
+<li>{@code <obb.h>}</li>
</ul>
<p>For more information about these headers, see the
@@ -403,8 +403,8 @@
<h4>OpenMAX AL</h4>
<p>Android native multimedia handling is based on Khronos Group OpenMAX AL 1.0.1 API.</p>
-<p>The standard OpenMAX AL headers {@code <OMXAL/OpenMAXAL.h>} and
-{@code <OMXAL/OpenMAXAL_Platform.h>} contain the declarations necessary for performing
+<p>The standard OpenMAX AL headers {@code <OMXAL/OpenMAXAL.h>} and
+{@code <OMXAL/OpenMAXAL_Platform.h>} contain the declarations necessary for performing
multimedia output from the native side of Android.</p>
<p>The NDK distribution of OpenMAX AL also provides Android-specific extensions. For information
@@ -448,9 +448,9 @@
<p>Additionally, you must put a
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
+<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
application requires. For more information about the OpenGL ES settings for
-{@code <uses-feature>}, see
+{@code <uses-feature>}, see
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
<p>The gles3jni sample application provides a basic example of how to use OpenGL ES 3.0 with the
@@ -487,9 +487,9 @@
<p>Additionally, you must put a
<a href="http://developer.android.com/guide/topics/manifest/uses-feature-element.html">{@code
-<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
+<uses-feature>}</a> tag in your manifest file to indicate which version of OpenGL ES your
application requires. For more information about the OpenGL ES settings for
-{@code <uses-feature>}, see
+{@code <uses-feature>}, see
<a href="http://developer.android.com/guide/topics/graphics/opengl.html#manifest">OpenGL ES</a>.</p>
<p>The gles3jni sample application provides a basic example of how to use OpenGL ES 3.1 with the
diff --git a/docs/html/ndk/guides/standalone_toolchain.jd b/docs/html/ndk/guides/standalone_toolchain.jd
index 3b6f7f1..aec7073 100644
--- a/docs/html/ndk/guides/standalone_toolchain.jd
+++ b/docs/html/ndk/guides/standalone_toolchain.jd
@@ -43,27 +43,27 @@
</tr>
<tr>
<td>ARM-based</td>
- <td>{@code arm-linux-androideabi-<gcc-version>}</td>
+ <td>{@code arm-linux-androideabi-<gcc-version>}</td>
</tr>
<tr>
<td>x86-based</td>
- <td>{@code x86-<gcc-version>}</td>
+ <td>{@code x86-<gcc-version>}</td>
</tr>
<tr>
<td>MIPS-based</td>
- <td>{@code mipsel-linux-android-<gcc-version>}</td>
+ <td>{@code mipsel-linux-android-<gcc-version>}</td>
</tr>
<tr>
<td>ARM64-based</td>
- <td>{@code aarch64-linux-android-<gcc-version>}</td>
+ <td>{@code aarch64-linux-android-<gcc-version>}</td>
</tr>
<tr>
<td>X86-64-based</td>
- <td>{@code x86_64-<gcc-version>}</td>
+ <td>{@code x86_64-<gcc-version>}</td>
</tr>
<tr>
<td>MIPS64-based</td>
- <td>{@code mips64el-linux-android--<gcc-version>}</td>
+ <td>{@code mips64el-linux-android--<gcc-version>}</td>
</tr>
</table>
@@ -184,7 +184,7 @@
you can install them in any location, or even move them if you need to.</p>
<p>By default, the build system uses the 32-bit, ARM-based GCC 4.8 toolchain. You can specify a
-different value, however, by specifying {@code --arch=<toolchain>} as an option.
+different value, however, by specifying {@code --arch=<toolchain>} as an option.
Table 3 shows the values to use for other toolchains:
<p class="table-caption" id="table3">
@@ -216,8 +216,8 @@
</tr>
</table>
-<p>Alternatively, you can use the {@code --toolchain=<toolchain>} option. Table 4 shows the
-values you can specify for {@code <toolchain>}:</p>
+<p>Alternatively, you can use the {@code --toolchain=<toolchain>} option. Table 4 shows the
+values you can specify for {@code <toolchain>}:</p>
<p class="table-caption" id="table4">
<strong>Table 4.</strong> Toolchains and corresponding values, using {@code --toolchain}.</p>
@@ -296,7 +296,7 @@
line.</p>
<p class="note"><strong>Note: </strong>Instead of specifying a specific version, you can also
-use {@code <version>}, which defaults
+use {@code <version>}, which defaults
to the highest available version of Clang.</p>
<p>By default, the build system builds for a 32-bit host toolchain. You can specify a 64-bit
@@ -344,7 +344,7 @@
</pre>
<p>Note that if you omit the {@code -install-dir} option, the {@code make-standalone-toolchain.sh}
-shell script creates a tarball in {@code tmp/ndk/<toolchain-name>.tar.bz2}. This tarball makes
+shell script creates a tarball in {@code tmp/ndk/<toolchain-name>.tar.bz2}. This tarball makes
it easy to archive, as well as to redistribute the binaries.</p>
<p>This standalone toolchain provides an additional benefit, as well, in that it contains a working
@@ -354,7 +354,7 @@
<h2 id="wwc">Working with Clang</h2>
<p>You can install Clang binaries in the standalone installation by using the
-{@code --llvm-version=<version>} option. {@code <version>} is a LLVM/Clang version
+{@code --llvm-version=<version>} option. {@code <version>} is a LLVM/Clang version
number, such as {@code 3.5} or {@code 3.6}. For example:
<pre class="no-pretty-print">
@@ -368,7 +368,7 @@
assembler, linker, headers, libraries, and C++ STL implementation.</p>
<p>This operation also installs two scripts, named {@code clang} and {@code clang++}, under
-{@code <install-dir>/bin/@}. These scripts invoke the real {@code clang} binary with default
+{@code <install-dir>/bin/@}. These scripts invoke the real {@code clang} binary with default
target architecture flags. In other words, they should work without any modification, and you should
be able to use them in your own builds by just setting the {@code CC} and {@code CXX} environment
variables to point to them.</p>
@@ -534,7 +534,7 @@
<h3>C++ STL support</h3>
<p>The standalone toolchain includes a copy of a C++ Standard Template Library implementation. This
implementation is either for GNU libstdc++, STLport, or libc++, depending on what you specify for the
-{@code --stl=<name>} option described previously. To use this implementation of STL, you need
+{@code --stl=<name>} option described previously. To use this implementation of STL, you need
to link your project with the proper library:</p>
<ul>
diff --git a/docs/html/ndk/samples/sample_na.jd b/docs/html/ndk/samples/sample_na.jd
index a706be5..0966dd8 100644
--- a/docs/html/ndk/samples/sample_na.jd
+++ b/docs/html/ndk/samples/sample_na.jd
@@ -92,7 +92,7 @@
{@code .so} extension. For example, the actual file name for the
{@code log} library is {@code liblog.so}.</li>
<li>The library resides in the following directory, NDK root:
-{@code <ndk>/platforms/android-<sdk_version>/arch-<abi>/usr/lib/}.</li>
+{@code <ndk>/platforms/android-<sdk_version>/arch-<abi>/usr/lib/}.</li>
</ul>
<pre class="no-pretty-print">
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
index 55829d3..599dc1e 100644
--- a/docs/html/preview/api-overview.jd
+++ b/docs/html/preview/api-overview.jd
@@ -149,8 +149,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>On Windows, you may have to run {@code telnet 127.0.0.1 <emulator-id>} followed by
- {@code finger touch <finger_id>}.
+<p>On Windows, you may have to run {@code telnet 127.0.0.1 <emulator-id>} followed by
+ {@code finger touch <finger_id>}.
</p>
</li>
</ol>
@@ -210,7 +210,7 @@
<p>For each activity that you want to expose to
{@link android.service.chooser.ChooserTargetService}, add a
-{@code <meta-data>} element with the name
+{@code <meta-data>} element with the name
{@code "android.service.chooser.chooser_target_service"} in your app manifest.
</p>
diff --git a/docs/html/tools/adk/adk2.jd b/docs/html/tools/adk/adk2.jd
index d69125a..052ec48 100644
--- a/docs/html/tools/adk/adk2.jd
+++ b/docs/html/tools/adk/adk2.jd
@@ -303,7 +303,7 @@
<li>Start the ADK 2012 IDE and choose <strong>File > Preferences</strong>.</li>
<li>In the <strong>Preferences</strong> dialog, make a note of the <strong>Sketchbook
location</strong> directory.</li>
- <li>Copy the {@code <adk-source-download>/adk2012/board/library/ADK2} directory and its
+ <li>Copy the {@code <adk-source-download>/adk2012/board/library/ADK2} directory and its
contents into your {@code sketchbook/libraries/} directory, so that you create a {@code
sketchbook/libraries/ADK2} directory.</li>
<li>Stop and restart the <strong>ADK 2012 IDE</strong>.</li>
@@ -339,7 +339,7 @@
<ol>
<li><a href="#src-download">Download</a> the ADK 2012 source code files.</li>
<li>In a terminal window, navigate to {@code
-<adk-source-download>/adk2012/board/MakefileBasedBuild}.</li>
+<adk-source-download>/adk2012/board/MakefileBasedBuild}.</li>
<li>Execute the following command and follow the instructions:
<pre>$> ./setup</pre>
</li>
diff --git a/docs/html/tools/devices/emulator.jd b/docs/html/tools/devices/emulator.jd
index 5bdd4e2..1e70562 100644
--- a/docs/html/tools/devices/emulator.jd
+++ b/docs/html/tools/devices/emulator.jd
@@ -393,7 +393,7 @@
<li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
Hardware Accelerated Execution Manager</strong>.</li>
<li>After the download completes, execute {@code
-<sdk>/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.exe}.</li>
+<sdk>/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.exe}.</li>
<li>Follow the on-screen instructions to complete installation.</li>
<li>After installation completes, confirm that the virtualization driver is operating correctly by
opening a command prompt window and running the following command:
@@ -449,7 +449,7 @@
<li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
Hardware Accelerated Execution Manager</strong>.
<li>After the download completes, execute
- {@code <sdk>/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmg}.</li>
+ {@code <sdk>/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmg}.</li>
<li>Double click the <strong>IntelHAXM.mpkg</strong> icon to begin installation.</li>
<li>Follow the on-screen instructions to complete installation.</li>
<li>After installation completes, confirm that the new kernel extension is operating correctly by
diff --git a/docs/html/tools/devices/managing-avds.jd b/docs/html/tools/devices/managing-avds.jd
index 4ca8588..fb680aa 100644
--- a/docs/html/tools/devices/managing-avds.jd
+++ b/docs/html/tools/devices/managing-avds.jd
@@ -56,7 +56,7 @@
you have designed your app to support. For instance, you should create an AVD for each
API level equal to and higher than the minimum version you've specified in your manifest
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html" style="white-space: nowrap;"
- >{@code <uses-sdk>}</a> tag.</p>
+ >{@code <uses-sdk>}</a> tag.</p>
<p>To create an AVD based on an existing device definition:</p>
diff --git a/docs/html/tools/extras/oem-usb.jd b/docs/html/tools/extras/oem-usb.jd
index 6d449ee..eed8a5e 100644
--- a/docs/html/tools/extras/oem-usb.jd
+++ b/docs/html/tools/extras/oem-usb.jd
@@ -86,7 +86,7 @@
<li>Select <strong>Browse my computer for driver software</strong> and click
<strong>Next</strong>.</li>
<li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code <sdk>\extras\google\usb_driver\}.)</li>
+Driver is located in {@code <sdk>\extras\google\usb_driver\}.)</li>
<li>Click <strong>Next</strong> to install the driver.</li>
</ol>
@@ -109,7 +109,7 @@
<strong>Search removable media</strong>; and check <strong>Include this location in the
search</strong>.</li>
<li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code <sdk>\extras\google\usb_driver\}.)</li>
+Driver is located in {@code <sdk>\extras\google\usb_driver\}.)</li>
<li>Click <strong>Next</strong> to upgrade the driver.</li>
</ol>
@@ -127,7 +127,7 @@
<li>Select <strong>I don't have the disk. Show me other options</strong>.</li>
<li>Select <strong>Browse my computer for driver software</strong>.</li>
<li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code <sdk>\extras\google\usb_driver\}.) As long as you specified the
+Driver is located in {@code <sdk>\extras\google\usb_driver\}.) As long as you specified the
exact location of the
installation package, you may leave <strong>Include subfolders</strong> checked or
unchecked—it doesn't matter.</li>
@@ -152,7 +152,7 @@
search for the driver
software. Select <strong>Browse my computer for driver software</strong>.</li>
<li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code <sdk>\extras\google\usb_driver\}.) As long as you specified the
+Driver is located in {@code <sdk>\extras\google\usb_driver\}.) As long as you specified the
exact location of the
installation package, you may leave <strong>Include subfolders</strong> checked or
unchecked—it doesn't matter.</li>
diff --git a/docs/html/tools/help/adb.jd b/docs/html/tools/help/adb.jd
index 2faff4f..bcd949a 100644
--- a/docs/html/tools/help/adb.jd
+++ b/docs/html/tools/help/adb.jd
@@ -36,7 +36,7 @@
<li>A daemon, which runs as a background process on each emulator or device instance. </li>
</ul>
-<p>You can find the {@code adb} tool in {@code <sdk>/platform-tools/}.</p>
+<p>You can find the {@code adb} tool in {@code <sdk>/platform-tools/}.</p>
<p>When you start an adb client, the client first checks whether there is an adb server
process already running. If there isn't, it starts the server process. When the server starts,
diff --git a/docs/html/tools/help/desktop-head-unit.jd b/docs/html/tools/help/desktop-head-unit.jd
index 981979c..a2b71e6 100644
--- a/docs/html/tools/help/desktop-head-unit.jd
+++ b/docs/html/tools/help/desktop-head-unit.jd
@@ -400,7 +400,7 @@
<ol>
<li>Install the Android Media Browser simulator
-({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on
+({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on
the test device. You can do this using
the <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li>
<li>Enable <a href="{@docRoot}tools/device.html#developer-device-options">
@@ -417,7 +417,7 @@
<ol>
<li>Install the Android Messaging simulator
- ({@code <sdk>/extras/google/simulators/messaging-simulator.apk})
+ ({@code <sdk>/extras/google/simulators/messaging-simulator.apk})
on the test device. You can do this using the
<a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li>
<li>Enable the simulator to read notifications posted on the system:
diff --git a/docs/html/tools/help/emulator.jd b/docs/html/tools/help/emulator.jd
index fa101e1..366b3bd 100644
--- a/docs/html/tools/help/emulator.jd
+++ b/docs/html/tools/help/emulator.jd
@@ -166,7 +166,7 @@
</td></tr>
<tr>
<td><code>-data <filepath></code></td>
- <td>Use {@code <filepath>} as the working user-data disk image. </td>
+ <td>Use {@code <filepath>} as the working user-data disk image. </td>
<td>Optionally, you can specify a path relative to the current working directory.
If <code>-data</code> is not used, the emulator looks for a file named {@code userdata-qemu.img}
in the storage area of the AVD being used (see <code>-avd</code>).
@@ -426,7 +426,7 @@
<td>Enable KVM acceleration of the emulator virtual machine.</td>
<td>This option is only effective when your system is set up to use
<a href="{@docRoot}tools/devices/emulator.html#vm-linux">KVM-based VM acceleration</a>.
- You can optionally specify a memory size ({@code -m <size>}) for the VM, which should match
+ You can optionally specify a memory size ({@code -m <size>}) for the VM, which should match
your emulator's memory size:</p>
{@code -qemu -m 512 -enable-kvm}<br>
{@code -qemu -m 1024 -enable-kvm}
diff --git a/docs/html/tools/help/jobb.jd b/docs/html/tools/help/jobb.jd
index 97f0942..ae60223 100644
--- a/docs/html/tools/help/jobb.jd
+++ b/docs/html/tools/help/jobb.jd
@@ -44,31 +44,31 @@
<th>Description</th>
</tr>
<tr>
- <td>{@code -d <directory>}</td>
+ <td>{@code -d <directory>}</td>
<td>Set the input directory for creating an OBB file, or the output directory when extracting
({@code -dump}) an existing file. When creating an OBB file, the contents of the specified
directory and all its sub-directories are included in the OBB file system.
</td>
</tr>
<tr>
- <td>{@code -o <filename>}</td>
+ <td>{@code -o <filename>}</td>
<td>Specify the filename for the OBB file. This parameter is required when
creating an OBB and extracting (dumping) its contents.</td>
</tr>
<tr>
- <td>{@code -pn <package>}</td>
+ <td>{@code -pn <package>}</td>
<td>Specify the package name for the application that mounts the OBB file, which corresponds
to the {@code package} value specified in your application's manifest. This parameter is
required when creating an OBB file.</td>
</tr>
<tr>
- <td>{@code -pv <version>}</td>
+ <td>{@code -pv <version>}</td>
<td>Set the minimum version for the application that can mount the OBB file, which corresponds
to the {@code android:versionCode} value in your application's manifest. This parameter is
required when creating an OBB file.</td>
</tr>
<tr>
- <td>{@code -k <key>}</td>
+ <td>{@code -k <key>}</td>
<td>Specify a password for encrypting a new OBB file or decrypting an existing, encypted
OBB file.</td>
</tr>
@@ -80,13 +80,13 @@
overlay OBB file replace files that have the same path.</td>
</tr>
<tr>
- <td style="white-space: nowrap">{@code -dump <filename>}</td>
+ <td style="white-space: nowrap">{@code -dump <filename>}</td>
<td><p>Extract the contents of the specified OBB file. When using this option, you must also
- specify the output directory for the contents using the {@code -d <directory>}
+ specify the output directory for the contents using the {@code -d <directory>}
parameter.</p>
<p class="note"><strong>Note:</strong> When dumping an existing OBB file, you can omit the
- {@code -d <directory>} parameter to get a listing of the directories inside the file,
+ {@code -d <directory>} parameter to get a listing of the directories inside the file,
without extracting the contents.</p>
</td>
</tr>
diff --git a/docs/html/tools/help/lint.jd b/docs/html/tools/help/lint.jd
index 0f52689..98a5652 100644
--- a/docs/html/tools/help/lint.jd
+++ b/docs/html/tools/help/lint.jd
@@ -154,7 +154,7 @@
<td rowspan="4">Help</td>
<td><nobr><code>--help</code></nobr></td>
<td>List the command-line arguments supported by the {@code lint} tool.</td>
-<td>Use {@code --help <topic>} to see help information for a specific topic, such as "suppress".</td>
+<td>Use {@code --help <topic>} to see help information for a specific topic, such as "suppress".</td>
</tr>
<tr>
@@ -166,7 +166,7 @@
<tr>
<td><nobr><code>--show</code></nobr></td>
<td>List the ID and verbose description for issues that can be checked by {@code lint}</td>
-<td>Use {@code --show <ids>} to see descriptions for a specific list of {@code lint} issue IDs.</td>
+<td>Use {@code --show <ids>} to see descriptions for a specific list of {@code lint} issue IDs.</td>
</tr>
<tr>
diff --git a/docs/html/tools/help/shell.jd b/docs/html/tools/help/shell.jd
index 417c871..41bef22 100644
--- a/docs/html/tools/help/shell.jd
+++ b/docs/html/tools/help/shell.jd
@@ -72,20 +72,20 @@
<td><code>
start [options] <INTENT>
</code></td>
-<td>Start an {@link android.app.Activity} specified by {@code <INTENT>}. <p>See the
+<td>Start an {@link android.app.Activity} specified by {@code <INTENT>}. <p>See the
<a href="#IntentSpec">Specification for <INTENT> arguments</a>.
<p>Options are:
<ul>
<li>{@code -D}: Enable debugging.
<li>{@code -W}: Wait for launch to complete.
- <li>{@code --start-profiler <FILE>}: Start profiler and send results to {@code <FILE>}.
- <li>{@code -P <FILE>}: Like <code>--start-profiler</code>,
+ <li>{@code --start-profiler <FILE>}: Start profiler and send results to {@code <FILE>}.
+ <li>{@code -P <FILE>}: Like <code>--start-profiler</code>,
but profiling stops when the app goes idle.
- <li>{@code -R}: Repeat the activity launch {@code <COUNT>} times. Prior to each repeat,
+ <li>{@code -R}: Repeat the activity launch {@code <COUNT>} times. Prior to each repeat,
the top activity will be finished.
<li>{@code -S}: Force stop the target app before starting the activity.
<li>{@code --opengl-trace}: Enable tracing of OpenGL functions.
- <li>{@code --user <USER_ID> | current}: Specify which user to run as; if not
+ <li>{@code --user <USER_ID> | current}: Specify which user to run as; if not
specified, then run as the current user.
</ul>
</td>
@@ -95,11 +95,11 @@
<td><code>
startservice [options] <INTENT>
</code></td>
-<td>Start the {@link android.app.Service} specified by {@code <INTENT>}. <p>See the
+<td>Start the {@link android.app.Service} specified by {@code <INTENT>}. <p>See the
<a href="#IntentSpec">Specification for <INTENT> arguments</a>.
<p>Options are:
<ul>
- <li>{@code --user <USER_ID> | current}: Specify which user to run as; if not
+ <li>{@code --user <USER_ID> | current}: Specify which user to run as; if not
specified, then run as the current user.
</ul>
</td>
@@ -109,7 +109,7 @@
<td><code>
force-stop <PACKAGE>
</code></td>
-<td>Force stop everything associated with {@code <PACKAGE>} (the app's package name).
+<td>Force stop everything associated with {@code <PACKAGE>} (the app's package name).
</td>
</tr>
@@ -117,13 +117,13 @@
<td><code>
kill [options] <PACKAGE>
</code></td>
-<td> Kill all processes associated with {@code <PACKAGE>}
+<td> Kill all processes associated with {@code <PACKAGE>}
(the app's package name). This command kills only
processes that are safe to kill and that will not impact the user
experience.
<p>Options are:
<ul>
- <li>{@code --user <USER_ID> | all | current}: Specify user whose processes to kill;
+ <li>{@code --user <USER_ID> | all | current}: Specify user whose processes to kill;
all users if not specified.
</ul>
</td>
@@ -145,7 +145,7 @@
<a href="#IntentSpec">Specification for <INTENT> arguments</a>.
<p>Options are:
<ul>
- <li>{@code [--user <USER_ID> | all | current]}: Specify which user to send to; if not
+ <li>{@code [--user <USER_ID> | all | current]}: Specify which user to send to; if not
specified then send to all users.
</ul>
</td>
@@ -156,24 +156,24 @@
instrument [options] <COMPONENT>
</code></td>
<td>Start monitoring with an {@link android.app.Instrumentation} instance.
- Typically the target {@code <COMPONENT>}
- is the form {@code <TEST_PACKAGE>/<RUNNER_CLASS>}. <p>Options are:
+ Typically the target {@code <COMPONENT>}
+ is the form {@code <TEST_PACKAGE>/<RUNNER_CLASS>}. <p>Options are:
<ul>
<li>{@code -r}: Print raw results (otherwise decode
- {@code <REPORT_KEY_STREAMRESULT>}). Use with
+ {@code <REPORT_KEY_STREAMRESULT>}). Use with
{@code [-e perf true]} to generate raw output for performance measurements.
- <li>{@code -e <NAME> <VALUE>}: Set argument {@code <NAME>} to {@code <VALUE>}.
+ <li>{@code -e <NAME> <VALUE>}: Set argument {@code <NAME>} to {@code <VALUE>}.
For test runners a common form is {@code
- -e <testrunner_flag> <value>[,<value>...]}.
+ -e <testrunner_flag> <value>[,<value>...]}.
- <li>{@code -p <FILE>}: Write profiling data to {@code <FILE>}.
+ <li>{@code -p <FILE>}: Write profiling data to {@code <FILE>}.
<li>{@code -w}: Wait for instrumentation to finish before returning. Required for
test runners.
<li>{@code --no-window-animation}: Turn off window animations while running.
- <li>{@code --user <USER_ID> | current}: Specify which user instrumentation runs in;
+ <li>{@code --user <USER_ID> | current}: Specify which user instrumentation runs in;
current user if not specified.
</ul>
@@ -184,7 +184,7 @@
<td><code>
profile start <PROCESS> <FILE>
</code></td>
-<td>Start profiler on {@code <PROCESS>}, write results to {@code <FILE>}.
+<td>Start profiler on {@code <PROCESS>}, write results to {@code <FILE>}.
</td>
</tr>
@@ -192,7 +192,7 @@
<td><code>
profile stop <PROCESS>
</code></td>
-<td>Stop profiler on {@code <PROCESS>}.
+<td>Stop profiler on {@code <PROCESS>}.
</td>
</tr>
@@ -200,9 +200,9 @@
<td style="white-space:nowrap"><code>
dumpheap [options] <PROCESS> <FILE>
</code></td>
-<td>Dump the heap of {@code <PROCESS>}, write to {@code <FILE>}. <p>Options are:
+<td>Dump the heap of {@code <PROCESS>}, write to {@code <FILE>}. <p>Options are:
<ul>
- <li>{@code --user [<USER_ID>|current]}: When supplying a process name,
+ <li>{@code --user [<USER_ID>|current]}: When supplying a process name,
specify user of process to dump; uses current user if not specified.
<li>{@code -n}: Dump native heap instead of managed heap.
</ul>
@@ -213,7 +213,7 @@
<td><code>
set-debug-app [options] <PACKAGE>
</code></td>
-<td>Set application {@code <PACKAGE>} to debug. <p>Options are:
+<td>Set application {@code <PACKAGE>} to debug. <p>Options are:
<ul>
<li>{@code -w}: Wait for debugger when application starts.
<li>{@code --persistent}: Retain this value.
@@ -245,7 +245,7 @@
screen-compat [on|off] <PACKAGE>
</code></td>
<td>Control <a href="{@docRoot}guide/practices/screen-compat-mode.html">screen
-compatibility</a> mode of {@code <PACKAGE>}.</p>
+compatibility</a> mode of {@code <PACKAGE>}.</p>
</td>
</tr>
@@ -300,65 +300,65 @@
<div class="intents" style="display:none">
-<p>For activity manager commands that take a {@code <INTENT>} argument, you can
+<p>For activity manager commands that take a {@code <INTENT>} argument, you can
specify the intent with the following options:</p>
<dl>
- <dt>{@code -a <ACTION>}</dt>
+ <dt>{@code -a <ACTION>}</dt>
<dd>Specify the intent action, such as "android.intent.action.VIEW".
You can declare this only once.
- <dt>{@code -d <DATA_URI>}</dt>
+ <dt>{@code -d <DATA_URI>}</dt>
<dd>Specify the intent data URI, such as "content://contacts/people/1".
You can declare this only once.
- <dt>{@code -t <MIME_TYPE>}</dt>
+ <dt>{@code -t <MIME_TYPE>}</dt>
<dd>Specify the intent MIME type, such as "image/png".
You can declare this only once.
- <dt>{@code -c <CATEGORY>}</dt>
+ <dt>{@code -c <CATEGORY>}</dt>
<dd>Specify an intent category, such as "android.intent.category.APP_CONTACTS".
- <dt>{@code -n <COMPONENT>}</dt>
+ <dt>{@code -n <COMPONENT>}</dt>
<dd>Specify the component name with package name prefix to create an explicit intent, such
as "com.example.app/.ExampleActivity".
- <dt>{@code -f <FLAGS>}</dt>
+ <dt>{@code -f <FLAGS>}</dt>
<dd>Add flags to the intent, as supported by {@link
android.content.Intent#setFlags setFlags()}.
- <dt>{@code --esn <EXTRA_KEY>}</dt>
+ <dt>{@code --esn <EXTRA_KEY>}</dt>
<dd>Add a null extra. This option is not supported for URI intents.
- <dt>{@code -e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>}</dt>
+ <dt>{@code -e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE>}</dt>
<dd>Add string data as a key-value pair.
- <dt>{@code --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>}</dt>
+ <dt>{@code --ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE>}</dt>
<dd>Add boolean data as a key-value pair.
- <dt>{@code --ei <EXTRA_KEY> <EXTRA_INT_VALUE>}</dt>
+ <dt>{@code --ei <EXTRA_KEY> <EXTRA_INT_VALUE>}</dt>
<dd>Add integer data as a key-value pair.
- <dt>{@code --el <EXTRA_KEY> <EXTRA_LONG_VALUE>}</dt>
+ <dt>{@code --el <EXTRA_KEY> <EXTRA_LONG_VALUE>}</dt>
<dd>Add long data as a key-value pair.
- <dt>{@code --ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>}</dt>
+ <dt>{@code --ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE>}</dt>
<dd>Add float data as a key-value pair.
- <dt>{@code --eu <EXTRA_KEY> <EXTRA_URI_VALUE>}</dt>
+ <dt>{@code --eu <EXTRA_KEY> <EXTRA_URI_VALUE>}</dt>
<dd>Add URI data as a key-value pair.
- <dt>{@code --ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>}</dt>
+ <dt>{@code --ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE>}</dt>
<dd>Add a component name, which is converted and passed as
a {@link android.content.ComponentName} object.
- <dt>{@code --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]}</dt>
+ <dt>{@code --eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]}</dt>
<dd>Add an array of integers.
- <dt>{@code --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]}</dt>
+ <dt>{@code --ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]}</dt>
<dd>Add an array of longs.
- <dt>{@code --efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]}</dt>
+ <dt>{@code --efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]}</dt>
<dd>Add an array of floats.
<dt>{@code --grant-read-uri-permission}</dt>
@@ -430,7 +430,7 @@
<dt>{@code --selector}</dt>
<dd>Requires the use of {@code -d} and {@code -t} options to set the intent data and type.
- <dt>{@code <URI> <COMPONENT> <PACKAGE>}</dt>
+ <dt>{@code <URI> <COMPONENT> <PACKAGE>}</dt>
<dd>You can directly specify a URI, package name, and component name when not qualified
by one of the above options. When an argument is unqualified, the tool assumes the argument
is a URI if it contains a ":" (colon); it assumes the argument is a component name if it
@@ -475,7 +475,7 @@
list packages [options] <FILTER>
</code></td>
<td>Prints all packages, optionally only
- those whose package name contains the text in {@code <FILTER>}. <p>Options:
+ those whose package name contains the text in {@code <FILTER>}. <p>Options:
<ul>
<li>{@code -f}: See their associated file.
<li>{@code -d}: Filter to only show disabled packages.
@@ -484,7 +484,7 @@
<li>{@code -3}: Filter to only show third party packages.
<li>{@code -i}: See the installer for the packages.
<li>{@code -u}: Also include uninstalled packages.
- <li>{@code --user <USER_ID>}: The user space to query.
+ <li>{@code --user <USER_ID>}: The user space to query.
</ul>
</td>
</tr>
@@ -502,7 +502,7 @@
list permissions [options] <GROUP>
</code></td>
<td>Prints all known permissions, optionally only
- those in {@code <GROUP>}. <p>Options:
+ those in {@code <GROUP>}. <p>Options:
<ul>
<li>{@code -g}: Organize by group.
<li>{@code -f}: Print all information.
@@ -520,7 +520,7 @@
<td>List all test packages. <p>Options:
<ul>
<li>{@code -f}: List the APK file for the test package.
- <li>{@code <TARGET_PACKAGE>}: List test packages for only this app.
+ <li>{@code <TARGET_PACKAGE>}: List test packages for only this app.
</ul>
</td>
</tr>
@@ -553,7 +553,7 @@
<td><code>
path <PACKAGE>
</code></td>
-<td>Print the path to the APK of the given {@code <PACKAGE>}.
+<td>Print the path to the APK of the given {@code <PACKAGE>}.
</td>
</tr>
@@ -561,12 +561,12 @@
<td><code>
install [options] <PATH>
</code></td>
-<td>Installs a package (specified by {@code <PATH>}) to the system. <p>Options:
+<td>Installs a package (specified by {@code <PATH>}) to the system. <p>Options:
<ul>
<li>{@code -l}: Install the package with forward lock.
<li>{@code -r}: Reinstall an exisiting app, keeping its data.
<li>{@code -t}: Allow test APKs to be installed.
- <li>{@code -i <INSTALLER_PACKAGE_NAME>}: Specify the installer package name.
+ <li>{@code -i <INSTALLER_PACKAGE_NAME>}: Specify the installer package name.
<li>{@code -s}: Install package on the shared mass storage (such as sdcard).
<li>{@code -f}: Install package on the internal system memory.
<li>{@code -d}: Allow version code downgrade.
@@ -615,7 +615,7 @@
</code></td>
<td><p>Options:
<ul>
- <li>{@code --user <USER_ID>}: The user to disable.
+ <li>{@code --user <USER_ID>}: The user to disable.
</ul>
</td>
</tr>
@@ -688,7 +688,7 @@
<td><code>
create-user <USER_NAME>
</code></td>
-<td>Create a new user with the given {@code <USER_NAME>},
+<td>Create a new user with the given {@code <USER_NAME>},
printing the new user identifier of the user.
</td>
</tr>
@@ -697,7 +697,7 @@
<td><code>
remove-user <USER_ID>
</code></td>
-<td>Remove the user with the given {@code <USER_IDENTIFIER>},
+<td>Remove the user with the given {@code <USER_IDENTIFIER>},
deleting all data associated with that user
</td>
</tr>
diff --git a/docs/html/tools/help/uiautomator/index.jd b/docs/html/tools/help/uiautomator/index.jd
index 4b3c255..5eda4a3 100644
--- a/docs/html/tools/help/uiautomator/index.jd
+++ b/docs/html/tools/help/uiautomator/index.jd
@@ -46,14 +46,14 @@
<tr>
<td rowspan="7"><code>runtest</code></td>
-<td><nobr>{@code <JARS>}</nobr></td>
-<td><strong>Required</strong>. The {@code <JARS>} argument is the name of one or more JAR files that you deployed to the target device which contain your uiautomator testcases. You can list more than one JAR file by using a space as a separator.</td>
+<td><nobr>{@code <JARS>}</nobr></td>
+<td><strong>Required</strong>. The {@code <JARS>} argument is the name of one or more JAR files that you deployed to the target device which contain your uiautomator testcases. You can list more than one JAR file by using a space as a separator.</td>
</tr>
<tr>
<td><nobr><code>-c <CLASSES> </code></nobr></td>
-<td><strong>Required (API 17 or lower)</strong>.The {@code <CLASSES>}
-argument is a list of test classes or test methods in {@code <JARS>} to run.
+<td><strong>Required (API 17 or lower)</strong>.The {@code <CLASSES>}
+argument is a list of test classes or test methods in {@code <JARS>} to run.
<p>Each class or method must be fully
qualified with the package name, in one of these formats:
<ul>
@@ -62,7 +62,7 @@
</ul>
You can list multiple classes or methods by using a space as a separator.</p>
<p class="note"><strong>Note:</strong>This argument is not required for API 18
-and higher. If not specified, all test cases in {@code <JARS>} will be run.
+and higher. If not specified, all test cases in {@code <JARS>} will be run.
</p>
</td>
</tr>
@@ -100,7 +100,7 @@
</table>
<h2 id="api">uiautomator API</h2>
-<p>The {@code uiautomator} API is bundled in the {@code uiautomator.jar} file under the {@code <android-sdk>/platforms/} directory. The API includes these key classes, interfaces, and exceptions that allow you to capture and manipulate UI components on the target app:</p>
+<p>The {@code uiautomator} API is bundled in the {@code uiautomator.jar} file under the {@code <android-sdk>/platforms/} directory. The API includes these key classes, interfaces, and exceptions that allow you to capture and manipulate UI components on the target app:</p>
<h3 id="classes">Classes</h3>
<table>
diff --git a/docs/html/tools/help/zipalign.jd b/docs/html/tools/help/zipalign.jd
index 184cdcb..a32a3658 100644
--- a/docs/html/tools/help/zipalign.jd
+++ b/docs/html/tools/help/zipalign.jd
@@ -51,7 +51,7 @@
<pre>zipalign -c -v <alignment> existing.apk</pre>
-<p>The {@code <alignment>} is an integer that defines the byte-alignment boundaries.
+<p>The {@code <alignment>} is an integer that defines the byte-alignment boundaries.
This must always be 4 (which provides 32-bit alignment) or else it effectively
does nothing.</p>
diff --git a/docs/html/tools/sdk/eclipse-adt.jd b/docs/html/tools/sdk/eclipse-adt.jd
index 3c12a64..5a9d9d0 100644
--- a/docs/html/tools/sdk/eclipse-adt.jd
+++ b/docs/html/tools/sdk/eclipse-adt.jd
@@ -748,7 +748,7 @@
> Rename</strong>.</li>
<li>Updated XML Editor to improve double click handling.</li>
<li>Added code completion improvements for custom views, theme references and class
- references. For example, code completion in a {@code <fragment android:name="" >} tag
+ references. For example, code completion in a {@code <fragment android:name="" >} tag
now suggests completion with a list of fragment classes. Similarly, code completion in the
manifest now offers implementations suitable for the given tag.</li>
<li>Updated the <strong>Project Import</strong> dialog so that it shows a table for all
@@ -1771,9 +1771,9 @@
opened files as well as on device size and orientation changes to
ensure that large layouts are always fully visible unless you
manually zoom in.</li>
- <li>You can drop in an {@code <include>} element from the palette, which will pop up
+ <li>You can drop in an {@code <include>} element from the palette, which will pop up
a layout chooser. When you select the layout to include, it is added with an {@code
-<include>}. Similarly, dropping images or image buttons will pop up image
+<include>}. Similarly, dropping images or image buttons will pop up image
resource choosers (<a
href="http://tools.android.com/recent/includetagdropsupport">more info</a>).</li>
<li>The configuration chooser now applies the "Render Target" and
@@ -1796,7 +1796,7 @@
<dd>
<ul>
<li>Code completion has been significantly improved. It now works
- with {@code <style>} elements, completes dimensional units,
+ with {@code <style>} elements, completes dimensional units,
sorts resource paths in values based on the attribute name, and more. There are also many fixes to
handle text replacement (<a
href="http://tools.android.com/recent/xmlcodecompletionimprovements">more info</a>).</li>
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
index da8d62cb..a43c969 100644
--- a/docs/html/tools/sdk/tools-notes.jd
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -791,7 +791,7 @@
<li>Updated build tools to allow use of RenderScript on older versions of Android
using new features in the
<a href="{@docRoot}tools/support-library/features.html#v8">Support Library</a>.</li>
- <li>Moved the Systrace tool to the {@code >sdk</platform-tools/} directory. </li>
+ <li>Moved the Systrace tool to the {@code <sdk>/platform-tools/} directory. </li>
<li>Modified <a href="{@docRoot}tools/help/gltracer.html">Tracer for OpenGL ES</a> to
support OpenGL ES 3.0.</li>
<li>Lint
diff --git a/docs/html/tools/support-library/features.jd b/docs/html/tools/support-library/features.jd
index 19f93e9..f03de77 100644
--- a/docs/html/tools/support-library/features.jd
+++ b/docs/html/tools/support-library/features.jd
@@ -140,7 +140,7 @@
</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v4/} directory. The library does not contain user
+{@code <sdk>/extras/android/support/v4/} directory. The library does not contain user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
resources</a>.</p>
@@ -167,7 +167,7 @@
<p>
After you download the Android Support Libraries, this library is located in the
- {@code <sdk>/extras/android/support/multidex/} directory. The library does not contain
+ {@code <sdk>/extras/android/support/multidex/} directory. The library does not contain
user interface resources. To include it in your application project, follow the instructions
for
<a href= "{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
@@ -228,7 +228,7 @@
</ul>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v7/appcompat/} directory. The library contains user
+{@code <sdk>/extras/android/support/v7/appcompat/} directory. The library contains user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries with
resources</a>.</p>
@@ -249,7 +249,7 @@
implementations, and are used extensively in layouts for TV apps.</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v7/cardview/} directory. The library contains user interface
+{@code <sdk>/extras/android/support/v7/cardview/} directory. The library contains user interface
resources. To include it in your application project, follow the instructions
for <a href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding
libraries with resources</a>.</p>
@@ -270,7 +270,7 @@
For detailed information about the v7 gridlayout library APIs, see the
{@link android.support.v7.widget android.support.v7.widget} package in the API reference.</p>
-<p>This library is located in the {@code <sdk>/extras/android/support/v7/gridlayout/}
+<p>This library is located in the {@code <sdk>/extras/android/support/v7/gridlayout/}
directory . The library contains user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries with
@@ -333,7 +333,7 @@
title card.</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v7/palette/} directory. The library does not contain
+{@code <sdk>/extras/android/support/v7/palette/} directory. The library does not contain
user interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
resources</a>.</p>
@@ -355,7 +355,7 @@
limited window of data items.</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v7/recyclerview/} directory. The library contains
+{@code <sdk>/extras/android/support/v7/recyclerview/} directory. The library contains
user interface resources. To include it in your application project, follow the instructions
for <a href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding
libraries with resources</a>.</p>
@@ -384,7 +384,7 @@
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v7/preference} directory. For more information
+{@code <sdk>/extras/android/support/v7/preference} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -448,7 +448,7 @@
</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v13/} directory. The library does not contain user
+{@code <sdk>/extras/android/support/v13/} directory. The library does not contain user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
resources</a>.</p>
@@ -480,7 +480,7 @@
</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v14/} directory. The library does not contain user
+{@code <sdk>/extras/android/support/v14/} directory. The library does not contain user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
resources</a>.</p>
@@ -509,7 +509,7 @@
</p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v17/} directory. The library does not contain user
+{@code <sdk>/extras/android/support/v17/} directory. The library does not contain user
interface resources. To include it in your application project, follow the instructions for
<a href="{@docRoot}tools/support-library/setup.html#libs-without-res">Adding libraries without
resources</a>.</p>
@@ -551,7 +551,7 @@
</ul>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/v17/leanback} directory. For more information
+{@code <sdk>/extras/android/support/v17/leanback} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -572,7 +572,7 @@
<p></p>
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/annotations} directory. For more information
+{@code <sdk>/extras/android/support/annotations} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -597,7 +597,7 @@
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/design} directory. For more information
+{@code <sdk>/extras/android/support/design} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -625,7 +625,7 @@
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/customtabs} directory. For more information
+{@code <sdk>/extras/android/support/customtabs} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -656,7 +656,7 @@
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/customtabs} directory. For more information
+{@code <sdk>/extras/android/support/customtabs} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
@@ -686,7 +686,7 @@
<p>After you download the Android Support Libraries, this library is located in the
-{@code <sdk>/extras/android/support/customtabs} directory. For more information
+{@code <sdk>/extras/android/support/customtabs} directory. For more information
on how to set up your project, follow the instructions in <a
href="{@docRoot}tools/support-library/setup.html#libs-with-res">Adding libraries
with resources</a>. </p>
diff --git a/docs/html/tools/support-library/index.jd b/docs/html/tools/support-library/index.jd
index 22ad0c9..60620e7 100644
--- a/docs/html/tools/support-library/index.jd
+++ b/docs/html/tools/support-library/index.jd
@@ -1323,7 +1323,7 @@
<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These
additions include a way to implement the action bar's <em>Up</em> button across versions.
For an example implementation of this pattern, see the AppNavigation sample in
-({@code <em><sdk></em>/samples/<em><platform></em>/AppNavigation}).</li>
+(<code><em><sdk></em>/samples/<em><platform></em>/AppNavigation</code>).</li>
<li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
for creating standardized system notifications.</li>
diff --git a/docs/html/tools/support-library/setup.jd b/docs/html/tools/support-library/setup.jd
index 8112071..a39e4b0 100644
--- a/docs/html/tools/support-library/setup.jd
+++ b/docs/html/tools/support-library/setup.jd
@@ -72,7 +72,7 @@
<p>After downloading, the tool installs the Support Library files to your existing Android SDK
directory. The library files are located in the following subdirectory of your SDK:
- {@code <sdk>/extras/android/support/} directory.</p>
+ {@code <sdk>/extras/android/support/} directory.</p>
<h2 id="choosing">Choosing Support Libraries</h2>
@@ -115,7 +115,7 @@
using the <a href="#download">SDK Manager</a>.</li>
<li>Create a {@code libs/} directory in the root of your application project.</li>
<li>Copy the JAR file from your Android SDK installation directory (e.g.,
- {@code <sdk>/extras/android/support/v4/android-support-v4.jar}) into your
+ {@code <sdk>/extras/android/support/v4/android-support-v4.jar}) into your
application's project {@code libs/} directory.
<li>Right click the JAR file and select <strong>Build Path > Add to Build Path</strong>.
</li>
@@ -333,9 +333,9 @@
SDK installation directory, as listed below:</p>
<ul>
- <li>4v Samples: {@code <sdk>/extras/android/support/samples/Support4Demos/}</li>
- <li>7v Samples: {@code <sdk>/extras/android/support/samples/Support7Demos/}</li>
- <li>13v Samples: {@code <sdk>/extras/android/support/samples/Support13Demos/}</li>
- <li>App Navigation: {@code <sdk>/extras/android/support/samples/SupportAppNavigation/}</li>
+ <li>4v Samples: {@code <sdk>/extras/android/support/samples/Support4Demos/}</li>
+ <li>7v Samples: {@code <sdk>/extras/android/support/samples/Support7Demos/}</li>
+ <li>13v Samples: {@code <sdk>/extras/android/support/samples/Support13Demos/}</li>
+ <li>App Navigation: {@code <sdk>/extras/android/support/samples/SupportAppNavigation/}</li>
</ul>
diff --git a/docs/html/tools/testing-support-library/index.jd b/docs/html/tools/testing-support-library/index.jd
index 44f5631..97c2dcf 100644
--- a/docs/html/tools/testing-support-library/index.jd
+++ b/docs/html/tools/testing-support-library/index.jd
@@ -127,7 +127,7 @@
4.10) tests. However, you should avoid mixing JUnit 3 and and JUnit 4 test code in the same
package, as this might cause unexpected results. If you are creating an instrumented JUnit 4
test class to run on a device or emulator, your test class must be prefixed with the
- {@code @RunWith(AndroidJUnit4.class)} annotation.
+ {@code @RunWith(AndroidJUnit4.class)} annotation.
</p>
<p>The following code snippet shows how you might write an instrumented JUnit 4 test to validate
@@ -193,14 +193,14 @@
</p>
<ul>
- <li><a href="{@docRoot}reference/android/support/test/filters/RequiresDevice.html">{@code @RequiresDevice}</a>:
+ <li><a href="{@docRoot}reference/android/support/test/filters/RequiresDevice.html">{@code @RequiresDevice}</a>:
Specifies that the test should run only on physical devices, not on emulators.
</li>
- <li><a href="{@docRoot}reference/android/support/test/filters/SdkSuppress.html">{@code @SdkSupress}</a>:
+ <li><a href="{@docRoot}reference/android/support/test/filters/SdkSuppress.html">{@code @SdkSupress}</a>:
Suppresses the test from running on a lower Android API level than the given level. For
example, to suppress tests on all API levels lower than 18 from running, use the annotation
- {@code @SDKSupress(minSdkVersion=18)}.
+ {@code @SDKSupress(minSdkVersion=18)}.
</li>
<li>{@link android.test.suitebuilder.annotation.SmallTest @SmallTest},
@@ -440,7 +440,7 @@
</p>
<p>
- The {@code uiautomatorviewer} tool is located in the {@code <android-sdk>/tools/}
+ The {@code uiautomatorviewer} tool is located in the {@code <android-sdk>/tools/}
directory.
</p>
@@ -570,7 +570,7 @@
<p>
After downloading, the tool installs the Support Repository files to your existing Android
SDK directory. The library files are located in the following subdirectory of your SDK:
- {@code <sdk>/extras/android/m2repository} directory.
+ {@code <sdk>/extras/android/m2repository} directory.
</p>
<p>
diff --git a/docs/html/tools/testing/testing_ui.jd b/docs/html/tools/testing/testing_ui.jd
index 4318a21..3f4bf7a 100644
--- a/docs/html/tools/testing/testing_ui.jd
+++ b/docs/html/tools/testing/testing_ui.jd
@@ -96,7 +96,7 @@
<p>To analyze the UI components of the application that you want to test:</p>
<ol>
<li>Connect your Android device to your development machine.</li>
-<li>Open a terminal window and navigate to {@code <android-sdk>/tools/}.</li>
+<li>Open a terminal window and navigate to {@code <android-sdk>/tools/}.</li>
<LI>Run the tool with this command:<pre>$ uiautomatorviewer</pre></LI>
<li><p>To capture a screen for analysis, click the <strong>Device Screenshot</strong> button in the GUI of the {@code uiautomatorviewer} tool.</p>
<p class="note"><strong>Note: </strong>If you have more than one device connected, specify the device for screen capture by setting the {@code ANDROID_SERIAL} environment variable:
@@ -158,7 +158,7 @@
</ol>
</li>
</ol>
-<p>If you did not configure Eclipse as your development environment, make sure that the {@code uiautomator.jar} and {@code android.jar} files from the {@code <android-sdk>/platforms/<sdk>} directory are in your Java class path.</p>
+<p>If you did not configure Eclipse as your development environment, make sure that the {@code uiautomator.jar} and {@code android.jar} files from the {@code <android-sdk>/platforms/<sdk>} directory are in your Java class path.</p>
<p>Once you have completed these prerequisite tasks, you're almost ready to start creating your {@code uiautomator} tests. </li>
<h2 id="creating">Creating uiautomator Tests</h2>
@@ -169,7 +169,7 @@
<p>The first thing your test case should do is access the device that contains the target app. It’s also good practice to start the test from the Home screen of the device. From the Home screen (or some other starting location you’ve chosen in the target app), you can use the classes provided by the {@code uiautomator} API to simulate user actions and to test specific UI components. For an example of how to put together a {@code uiautomator} test case, see the <a href="#sample">sample test case</a>.</p>
<h3 id="classes">uiautomator API</h3>
-<p>The {@code uiautomator} API is bundled in the {@code uiautomator.jar} file under the {@code <android-sdk>/platforms/} directory. The API includes these key classes that allow you to capture and manipulate UI components on the target app:</p>
+<p>The {@code uiautomator} API is bundled in the {@code uiautomator.jar} file under the {@code <android-sdk>/platforms/} directory. The API includes these key classes that allow you to capture and manipulate UI components on the target app:</p>
<dl>
<DT><a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a></DT>
<dd><p>Represents the device state. In your tests, you can call methods on the <a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a> instance to check for the state of various properties, such as current orientation or display size. Your tests also can use the <a href="{@docRoot}tools/help/uiautomator/UiDevice.html">{@code UiDevice}</a> instance to perform device level actions, such as forcing the device into a specific rotation, pressing the d-pad hardware button, or pressing the Home and Menu buttons.</p>
@@ -323,7 +323,7 @@
<ol>
<li>Create the required build configuration files to build the output JAR. To generate the build configuration files, open a terminal and run the following command:
<pre><android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path></pre>
-The {@code <name>} is the name of the project that contains your {@code uiautomator} test source files, and the {@code <path>} is the path to the corresponding project directory.
+The {@code <name>} is the name of the project that contains your {@code uiautomator} test source files, and the {@code <path>} is the path to the corresponding project directory.
</li>
<LI>From the command line, set the {@code ANDROID_HOME} variable:
<ul>
diff --git a/docs/html/training/activity-testing/activity-basic-testing.jd b/docs/html/training/activity-testing/activity-basic-testing.jd
index 016289d..6f39bcd 100644
--- a/docs/html/training/activity-testing/activity-basic-testing.jd
+++ b/docs/html/training/activity-testing/activity-basic-testing.jd
@@ -55,13 +55,13 @@
<li>In the Package Explorer, right-click on the {@code /src} directory for
your test project and select <strong>New > Package</strong>.</li>
<li>Set the <strong>Name</strong> field to
-{@code <your_app_package_name>.tests} (for example,
+{@code <your_app_package_name>.tests} (for example,
{@code com.example.android.testingfun.tests}) and click
<strong>Finish</strong>.</li>
<li>Right-click on the test package you created, and select
<strong>New > Class</strong>.</li>
<li>Set the <strong>Name</strong> field to
-{@code <your_app_activity_name>Test} (for example,
+{@code <your_app_activity_name>Test} (for example,
{@code MyFirstTestActivityTest}) and click <strong>Finish</strong>.</li>
</ol>
diff --git a/docs/html/training/activity-testing/activity-ui-testing.jd b/docs/html/training/activity-testing/activity-ui-testing.jd
index 644f3ca..a47ccf3 100644
--- a/docs/html/training/activity-testing/activity-ui-testing.jd
+++ b/docs/html/training/activity-testing/activity-ui-testing.jd
@@ -137,7 +137,7 @@
object, then call assertion methods to verify that the
{@link android.widget.Button} object's width and height attributes match the
expected values.</p>
-<p>The {@code @MediumTest} annotation specifies how the test is categorized,
+<p>The {@code @MediumTest} annotation specifies how the test is categorized,
relative to its absolute execution time. To learn more about using test size
annotations, see <a href="#annotations">Apply Test Annotations</a>.</p>
@@ -185,7 +185,7 @@
<p class="caution"><strong>Caution: </strong>The {@link android.test.TouchUtils}
methods are designed to send events to the UI thread safely from the test thread.
You should not run {@link android.test.TouchUtils} directly in the UI thread or
-any test method annotated with {@code @UIThread}. Doing so might
+any test method annotated with {@code @UIThread}. Doing so might
raise the {@code WrongThreadException}.</p>
<h2 id="annotations">Apply Test Annotations</h2>
@@ -202,8 +202,8 @@
<dd>Marks a test that should run as part of the large tests.</dd>
</dl>
<p>Typically, a short running test that take only a few milliseconds should be
-marked as a {@code @SmallTest}. Longer running tests (100 milliseconds or
-more) are usually marked as {@code @MediumTest}s or {@code @LargeTest}s,
+marked as a {@code @SmallTest}. Longer running tests (100 milliseconds or
+more) are usually marked as {@code @MediumTest}s or {@code @LargeTest}s,
depending on whether the test accesses resources on the local system only or
remote resources over a network. For guidance on using test size annotations,
see this <a href="https://plus.sandbox.google.com/+AndroidDevelopers/posts/TPy1EeSaSg8">Android Tools Protip</a>.</p>
diff --git a/docs/html/training/app-indexing/deep-linking.jd b/docs/html/training/app-indexing/deep-linking.jd
index 2679937..fc67b26 100644
--- a/docs/html/training/app-indexing/deep-linking.jd
+++ b/docs/html/training/app-indexing/deep-linking.jd
@@ -32,13 +32,13 @@
<p>To create a deep link to your app content, add an intent filter that
contains these elements and attribute values in your manifest:</p>
<dl>
-<dt><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a></dt>
+<dt><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a></dt>
<dd>Specify the {@link android.content.Intent#ACTION_VIEW} intent action so
that the intent filter can be reached from Google Search.</dd>
-<dt><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a></dt>
-<dd>Add one or more <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> tags, where each tag represents a URI format that resolves to the activity. At minimum, the <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> tag must include the <a href="{@docRoot}guide/topics/manifest/data-element.html#scheme">{@code android:scheme}</a> attribute.
+<dt><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a></dt>
+<dd>Add one or more <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> tags, where each tag represents a URI format that resolves to the activity. At minimum, the <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> tag must include the <a href="{@docRoot}guide/topics/manifest/data-element.html#scheme">{@code android:scheme}</a> attribute.
<p>You can add additional attributes to further refine the type of URI that the activity accepts. For example, you might have multiple activities that accept similar URIs, but which differ simply based on the path name. In this case, use the <a href="{@docRoot}guide/topics/manifest/data-element.html#path">{@code android:path}</a> attribute or its variants ({@code pathPattern} or {@code pathPrefix}) to differentiate which activity the system should open for different URI paths.</p></dd>
-<dt><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a></dt>
+<dt><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a></dt>
<dd>Include the {@link android.content.Intent#CATEGORY_BROWSABLE BROWSABLE}
category. The {@link android.content.Intent#CATEGORY_BROWSABLE BROWSABLE}
category is required in order for the intent filter to be accessible from a web
diff --git a/docs/html/training/app-indexing/enabling-app-indexing.jd b/docs/html/training/app-indexing/enabling-app-indexing.jd
index f0339d6..d483795 100644
--- a/docs/html/training/app-indexing/enabling-app-indexing.jd
+++ b/docs/html/training/app-indexing/enabling-app-indexing.jd
@@ -28,7 +28,7 @@
By opting in, you can allow Googlebot to crawl the content in the APK
through the Google Play Store to index the app content. To indicate which app
content you’d like Google to index, simply add link elements either to
-your existing <a href="https://support.google.com/webmasters/answer/156184?hl=en" class="external-link" target="_blank">Sitemap</a> file or in the {@code <head>} element of each web
+your existing <a href="https://support.google.com/webmasters/answer/156184?hl=en" class="external-link" target="_blank">Sitemap</a> file or in the {@code <head>} element of each web
page in your site, in the same way as you would for web pages.</p>
<p>The deep links that you share with Google Search must take this URI
@@ -49,10 +49,10 @@
<h2 id="sitemap">Add Deep Links in Your Sitemap</h2>
<p>To annotate the deep link for Google Search app indexing in your
<a href="https://support.google.com/webmasters/answer/156184?hl=en" class="external-link" target="_blank">Sitemap</a>, use the
-{@code <xhtml:link>} tag and specify the deep link as an alternate URI.</p>
+{@code <xhtml:link>} tag and specify the deep link as an alternate URI.</p>
<p>For example, the following XML snippet shows how you might specify a link to
-your web page by using the {@code <loc>} tag, and a corresponding deep
-link to your Android app by using the {@code <xhtml:link>} tag.</p>
+your web page by using the {@code <loc>} tag, and a corresponding deep
+link to your Android app by using the {@code <xhtml:link>} tag.</p>
<pre>
<?xml version="1.0" encoding="UTF-8" ?>
<urlset
@@ -70,8 +70,8 @@
<h2 id="webpages">Add Deep Links in Your Web Pages</h2>
<p>Instead of specifying the deep links for Google Search app indexing in your
Sitemap file, you can annotate the deep links in the HTML markup of your web
-pages. You can do this in the {@code <head>} section for each web
-page by adding a {@code <link>} tag and specifying the deep link as an
+pages. You can do this in the {@code <head>} section for each web
+page by adding a {@code <link>} tag and specifying the deep link as an
alternate URI.</p>
<p>For example, the following HTML snippet shows how you might specify the
corresponding deep link in a web page that has the URL
diff --git a/docs/html/training/articles/memory.jd b/docs/html/training/articles/memory.jd
index f15af68..de7af58 100644
--- a/docs/html/training/articles/memory.jd
+++ b/docs/html/training/articles/memory.jd
@@ -319,7 +319,7 @@
<p>In very special situations, you can request a larger heap size by setting the <a
href="{@docRoot}guide/topics/manifest/application-element.html#largeHeap">{@code largeHeap}</a>
attribute to "true" in the manifest <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
tag. If you do so, you can call {@link
android.app.ActivityManager#getLargeMemoryClass()} to get an estimate of the large heap size.</p>
diff --git a/docs/html/training/articles/security-tips.jd b/docs/html/training/articles/security-tips.jd
index 3215a0e..a3b7529 100644
--- a/docs/html/training/articles/security-tips.jd
+++ b/docs/html/training/articles/security-tips.jd
@@ -197,7 +197,7 @@
on the internal storage.</p>
<p>In addition to requesting permissions, your application can use the <a
-href="{@docRoot}guide/topics/manifest/permission-element.html">{@code <permissions>}</a>
+href="{@docRoot}guide/topics/manifest/permission-element.html">{@code <permissions>}</a>
to protect IPC that is security sensitive and will be exposed to other
applications, such as a {@link android.content.ContentProvider}.
In general, we recommend using access controls
@@ -537,7 +537,7 @@
If your IPC mechanism is not intended for use by other applications, set the
{@code android:exported} attribute to {@code "false"} in the component's manifest element,
such as for the <a
-href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code <service>}</a>
+href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code <service>}</a>
element. This is useful for applications that consist of multiple processes
within the same UID, or if you decide late in development that you do not
actually want to expose functionality as IPC but you don’t want to rewrite
@@ -545,7 +545,7 @@
<p>If your IPC is intended to be accessible to other applications, you can
apply a security policy by using the <a
-href="{@docRoot}guide/topics/manifest/permission-element.html">{@code <permission>}</a>
+href="{@docRoot}guide/topics/manifest/permission-element.html">{@code <permission>}</a>
element. If IPC is between your own separate apps that are signed with the same key,
it is preferable to use {@code "signature"} level permission in the <a
href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">{@code
diff --git a/docs/html/training/auto/start/index.jd b/docs/html/training/auto/start/index.jd
index 6c6f188..0fdcb2a 100644
--- a/docs/html/training/auto/start/index.jd
+++ b/docs/html/training/auto/start/index.jd
@@ -98,8 +98,8 @@
<uses name="media" />
</automotiveApp>
</pre>
-<p>The {@code <uses>} element declares the Auto capability your app
-intends to use. Multiple {@code <uses>} tags can be added if your
+<p>The {@code <uses>} element declares the Auto capability your app
+intends to use. Multiple {@code <uses>} tags can be added if your
application uses multiple car capabilities. The {@code name} attribute indicates
the specific capability your app uses. The values supported are:</p>
<ul>
@@ -115,7 +115,7 @@
<p>In your app’s manifest ({@code AndroidManifest.xml}), provide a reference to
the Auto XML configuration file you created in the previous section. Add a
{@code "com.google.android.gms.car.application"} metadata entry under the
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
element that references your Auto XML configuration file. Omit the {@code .xml}
file extension when specifying the configuration filename.</p>
<p>The following code snippet shows how to include this reference in your
diff --git a/docs/html/training/basics/actionbar/adding-buttons.jd b/docs/html/training/basics/actionbar/adding-buttons.jd
index 40d0bd1..caee729 100644
--- a/docs/html/training/basics/actionbar/adding-buttons.jd
+++ b/docs/html/training/basics/actionbar/adding-buttons.jd
@@ -45,7 +45,7 @@
actions to the action bar, create a new XML file in your project's
{@code res/menu/} directory.</p>
-<p>Add an {@code <item>} element for each item you want to include in the action bar.
+<p>Add an {@code <item>} element for each item you want to include in the action bar.
For example:</p>
<p class="code-caption">res/menu/main_activity_actions.xml</p>
@@ -77,9 +77,9 @@
overflow, but it's good practice to explicitly declare your design intentions for each action.)
<p>The {@code icon} attribute requires a resource ID for an
-image. The name that follows {@code @drawable/} must be the name of a bitmap image you've
+image. The name that follows {@code @drawable/} must be the name of a bitmap image you've
saved in your project's {@code res/drawable/} directory. For example,
-{@code "@drawable/ic_action_search"} refers to {@code ic_action_search.png}.
+{@code "@drawable/ic_action_search"} refers to {@code ic_action_search.png}.
Likewise, the {@code title} attribute uses a string resource that's defined by an XML
file in your project's {@code res/values/} directory, as discussed in <a
href="{@docRoot}training/basics/firstapp/building-ui.html#Strings">Building a Simple User
@@ -139,7 +139,7 @@
onOptionsItemSelected()} callback method. In your implementation of this method,
call {@link android.view.MenuItem#getItemId getItemId()} on the given {@link android.view.MenuItem} to
determine which item was pressed—the returned ID matches the value you declared in the
-corresponding {@code <item>} element's {@code android:id} attribute.</p>
+corresponding {@code <item>} element's {@code android:id} attribute.</p>
<pre>
@Override
diff --git a/docs/html/training/basics/actionbar/setting-up.jd b/docs/html/training/basics/actionbar/setting-up.jd
index bccbd04..2cd4140 100644
--- a/docs/html/training/basics/actionbar/setting-up.jd
+++ b/docs/html/training/basics/actionbar/setting-up.jd
@@ -90,8 +90,8 @@
</li>
<li>In your manifest file, update either the <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code
- <application>}</a> element or individual
- <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <activity>}</a>
+ <application>}</a> element or individual
+ <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <activity>}</a>
elements to use one of the {@link android.support.v7.appcompat.R.style#Theme_AppCompat
Theme.AppCompat} themes. For example:
<pre><activity android:theme="@style/Theme.AppCompat.Light" ... ></pre>
diff --git a/docs/html/training/basics/actionbar/styling.jd b/docs/html/training/basics/actionbar/styling.jd
index 7c63952..b658423 100644
--- a/docs/html/training/basics/actionbar/styling.jd
+++ b/docs/html/training/basics/actionbar/styling.jd
@@ -75,8 +75,8 @@
<p>You can apply these themes to your entire app or to individual activities by
declaring them in your manifest file with the {@code android:theme} attribute
for the <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-<application>}</a> element or individual
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <activity>}</a>
+<application>}</a> element or individual
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <activity>}</a>
elements.</p>
<p>For example:</p>
diff --git a/docs/html/training/basics/activity-lifecycle/starting.jd b/docs/html/training/basics/activity-lifecycle/starting.jd
index 2501f38..5b238b8 100644
--- a/docs/html/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html/training/basics/activity-lifecycle/starting.jd
@@ -152,7 +152,7 @@
<p>The main activity for your app must be declared in the manifest with an <a
href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a> that includes the {@link
+<intent-filter>}</a> that includes the {@link
android.content.Intent#ACTION_MAIN MAIN} action and
{@link android.content.Intent#CATEGORY_LAUNCHER LAUNCHER} category. For example:</p>
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index 7aad894..4f43ea0 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -383,7 +383,7 @@
<li>In your manifest file, <code>AndroidManifest.xml</code>, within the <code>Application</code>
element, add the
-<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element
for your {@code DisplayMessageActivity} class, as follows:
<pre>
@@ -412,7 +412,7 @@
older versions of Android by using the
<a href="{@docRoot}tools/support-library/index.html">Support Library</a> and adding
the <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code
-<meta-data>}</a> element as shown here.</p>
+<meta-data>}</a> element as shown here.</p>
<p class="note"><strong>Note:</strong> Your Android SDK should already include
the latest Android Support Library, which you installed during the
diff --git a/docs/html/training/basics/fragments/fragment-ui.jd b/docs/html/training/basics/fragments/fragment-ui.jd
index 1061c15..c0bd0a4 100644
--- a/docs/html/training/basics/fragments/fragment-ui.jd
+++ b/docs/html/training/basics/fragments/fragment-ui.jd
@@ -55,7 +55,7 @@
<h2 id="AddAtRuntime">Add a Fragment to an Activity at Runtime</h2>
<p>Rather than defining the fragments for an activity in the layout file—as shown in the
-<a href="creating.html">previous lesson</a> with the {@code <fragment>} element—you can add
+<a href="creating.html">previous lesson</a> with the {@code <fragment>} element—you can add
a fragment to the activity during the activity runtime. This is necessary
if you plan to change fragments during the life of the activity.</p>
@@ -140,7 +140,7 @@
</pre>
<p>Because the fragment has been added to the {@link android.widget.FrameLayout} container at
-runtime—instead of defining it in the activity's layout with a {@code <fragment>}
+runtime—instead of defining it in the activity's layout with a {@code <fragment>}
element—the activity can remove the fragment and replace it with a different one.</p>
diff --git a/docs/html/training/basics/intents/filters.jd b/docs/html/training/basics/intents/filters.jd
index 221e31b..0a6d401 100644
--- a/docs/html/training/basics/intents/filters.jd
+++ b/docs/html/training/basics/intents/filters.jd
@@ -32,9 +32,9 @@
"share" action from another app and launch your app to perform the action.</p>
<p>To allow other apps to start your activity, you need to add an <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
element in your manifest file for the corresponding <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.</p>
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> element.</p>
<p>When your app is installed on a device, the system identifies your intent
filters and adds the information to an internal catalog of intents supported by all installed apps.
@@ -59,14 +59,14 @@
<dd>A string naming the action to perform. Usually one of the platform-defined values such
as {@link android.content.Intent#ACTION_SEND} or {@link android.content.Intent#ACTION_VIEW}.
<p>Specify this in your intent filter with the <a
-href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> element.
+href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a> element.
The value you specify in this element must be the full string name for the action, instead of the
API constant (see the examples below).</p></dd>
<dt>Data</dt>
<dd>A description of the data associated with the intent.
<p>Specify this in your intent filter with the <a
-href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element. Using one
+href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a> element. Using one
or more attributes in this element, you can specify just the MIME type, just a URI prefix,
just a URI scheme, or a combination of these and others that indicate the data type
accepted.</p>
@@ -81,13 +81,13 @@
supported by the system, but most are rarely used. However, all implicit intents are defined with
{@link android.content.Intent#CATEGORY_DEFAULT} by default.
<p>Specify this in your intent filter with the <a
-href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
+href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>
element.</p></dd>
</dl>
<p>In your intent filter, you can declare which criteria your activity accepts
by declaring each of them with corresponding XML elements nested in the <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
element.</p>
<p>For example, here's an activity with an intent filter that handles the {@link
@@ -106,11 +106,11 @@
<p>Each incoming intent specifies only one action and one data type, but it's OK to declare multiple
instances of the <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-<category>}</a>, and <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-<data>}</a> elements in each
+<action>}</a>, <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a>, and <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a> elements in each
<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-<intent-filter>}</a>.</p>
+<intent-filter>}</a>.</p>
<p>If any two pairs of action and data are mutually exclusive in
their behaviors, you should create separate intent filters to specify which actions are acceptable
diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd
index 990b8cb..a645b3f 100644
--- a/docs/html/training/basics/network-ops/managing.jd
+++ b/docs/html/training/basics/network-ops/managing.jd
@@ -398,12 +398,12 @@
{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()},
and it unregisters it in
{@link android.app.Activity#onDestroy onDestroy()}. This is more lightweight
-than declaring a {@code <receiver>} in the manifest. When you declare a
-{@code <receiver>} in the manifest, it can wake up your app at any time,
+than declaring a {@code <receiver>} in the manifest. When you declare a
+{@code <receiver>} in the manifest, it can wake up your app at any time,
even if you haven't run it for weeks. By registering and unregistering
{@code NetworkReceiver} within the main activity, you ensure that the app won't
be woken up after the user leaves the app.
-If you do declare a {@code <receiver>} in the manifest and you know exactly
+If you do declare a {@code <receiver>} in the manifest and you know exactly
where you need it, you can use
{@link android.content.pm.PackageManager#setComponentEnabledSetting setComponentEnabledSetting()}
to enable and disable it as appropriate.</p>
diff --git a/docs/html/training/basics/supporting-devices/languages.jd b/docs/html/training/basics/supporting-devices/languages.jd
index 098b556..e1bf657 100644
--- a/docs/html/training/basics/supporting-devices/languages.jd
+++ b/docs/html/training/basics/supporting-devices/languages.jd
@@ -106,10 +106,10 @@
<h2 id="UseString">Use the String Resources</h2>
<p>You can reference your string resources in your source code and other XML files using the
-resource name defined by the {@code <string>} element's {@code name} attribute.</p>
+resource name defined by the {@code <string>} element's {@code name} attribute.</p>
<p>In your source code, you can refer to a string resource with the syntax {@code
-R.string.<string_name>}. There are a variety of methods that accept a string resource this
+R.string.<string_name>}. There are a variety of methods that accept a string resource this
way.</p>
<p>For example:</p>
@@ -123,8 +123,8 @@
textView.setText(R.string.hello_world);
</pre>
-<p>In other XML files, you can refer to a string resource with the syntax {@code
-@string/<string_name>} whenever the XML attribute accepts a string value.</p>
+<p>In other XML files, you can refer to a string resource with the syntax
+<code>@string/<string_name></code> whenever the XML attribute accepts a string value.</p>
<p>For example:</p>
diff --git a/docs/html/training/basics/supporting-devices/platforms.jd b/docs/html/training/basics/supporting-devices/platforms.jd
index 9890c98..eecb356 100644
--- a/docs/html/training/basics/supporting-devices/platforms.jd
+++ b/docs/html/training/basics/supporting-devices/platforms.jd
@@ -52,7 +52,7 @@
describes details about your app and
identifies which versions of Android it supports. Specifically, the <code>minSdkVersion</code>
and <code>targetSdkVersion</code> attributes for the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk}</a> element
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element
identify the lowest API level with which your app is compatible and the highest API level against
which you’ve designed and tested your app.</p>
@@ -128,7 +128,7 @@
<p>To apply a theme to your entire app (all activities), add the <code>android:theme</code>
attribute
to the <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-<application>}</a> element:</p>
+<application>}</a> element:</p>
<pre><application android:theme="@style/CustomTheme"></pre>
diff --git a/docs/html/training/camera/photobasics.jd b/docs/html/training/camera/photobasics.jd
index 188b5cc..efac5483 100644
--- a/docs/html/training/camera/photobasics.jd
+++ b/docs/html/training/camera/photobasics.jd
@@ -58,7 +58,7 @@
its visibility on Google Play to devices that have a camera. To advertise
that your application depends on having a camera, put a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html"> {@code
-<uses-feature>}</a> tag in your manifest file:</p>
+<uses-feature>}</a> tag in your manifest file:</p>
<pre style="clear:right">
<manifest ... >
diff --git a/docs/html/training/camera/videobasics.jd b/docs/html/training/camera/videobasics.jd
index 135d4a1..6da239a 100644
--- a/docs/html/training/camera/videobasics.jd
+++ b/docs/html/training/camera/videobasics.jd
@@ -52,7 +52,7 @@
<h2 id="TaskManifest">Request Camera Permission</h2>
<p>To advertise that your application depends on having a camera, put a
-{@code <uses-feature>} tag in the manifest file:</p>
+{@code <uses-feature>} tag in the manifest file:</p>
<pre style="clear:right">
<manifest ... >
diff --git a/docs/html/training/custom-views/create-view.jd b/docs/html/training/custom-views/create-view.jd
index 11be85f..a476bbe 100644
--- a/docs/html/training/custom-views/create-view.jd
+++ b/docs/html/training/custom-views/create-view.jd
@@ -84,7 +84,7 @@
<ul>
<li>Define custom attributes for your view in a {@code
- <declare-styleable>
+ <declare-styleable>
} resource element
</li>
<li>Specify values for the attributes in your XML layout</li>
@@ -97,7 +97,7 @@
retrieving and applying the values at runtime.</p>
<p>To define custom attributes, add {@code
- <declare-styleable>
+ <declare-styleable>
} resources to your project. It's customary to put these resources into a {@code
res/values/attrs.xml} file. Here's
an example of an {@code attrs.xml} file:
@@ -179,7 +179,7 @@
<p>The Android resource compiler does a lot of work for you to make calling {@link
android.content.res.Resources.Theme#obtainStyledAttributes obtainStyledAttributes()}
- easier. For each {@code <declare-styleable>}
+ easier. For each {@code <declare-styleable>}
resource in the res directory, the generated R.java defines both an array of attribute
ids and a set of
constants that define the index for each attribute in the array. You use the predefined
diff --git a/docs/html/training/displaying-bitmaps/manage-memory.jd b/docs/html/training/displaying-bitmaps/manage-memory.jd
index 5a5c2cd..b7c72bc 100644
--- a/docs/html/training/displaying-bitmaps/manage-memory.jd
+++ b/docs/html/training/displaying-bitmaps/manage-memory.jd
@@ -78,7 +78,7 @@
{@link android.graphics.Bitmap#recycle recycle()} only when you are sure that the
bitmap is no longer being used. If you call {@link android.graphics.Bitmap#recycle recycle()}
and later attempt to draw the bitmap, you will get the error:
-{@code "Canvas: trying to use a recycled bitmap"}.</p>
+<code>"Canvas: trying to use a recycled bitmap"</code>.</p>
<p>The following code snippet gives an example of calling
{@link android.graphics.Bitmap#recycle recycle()}. It uses reference counting
diff --git a/docs/html/training/gestures/detector.jd b/docs/html/training/gestures/detector.jd
index a8e0fdb..97f039c 100644
--- a/docs/html/training/gestures/detector.jd
+++ b/docs/html/training/gestures/detector.jd
@@ -186,7 +186,7 @@
<p>In the following snippet, a return value of {@code true} from the individual
-{@code on<em><TouchEvent></em>} methods indicates that you
+<code>on<em><TouchEvent></em></code> methods indicates that you
have handled the touch event. A return value of {@code false} passes events down
through the view stack until the touch has been successfully handled.</p>
@@ -286,7 +286,7 @@
<p>
{@link
android.view.GestureDetector.SimpleOnGestureListener} provides an implementation
-for all of the {@code on<em><TouchEvent></em>} methods by returning {@code false}
+for all of the <code>on<em><TouchEvent></em></code> methods by returning {@code false}
for all of them. Thus you can override only the methods you care about.
For
example, the snippet below creates a class that extends {@link
diff --git a/docs/html/training/gestures/movement.jd b/docs/html/training/gestures/movement.jd
index 136b37a..ed4928e 100644
--- a/docs/html/training/gestures/movement.jd
+++ b/docs/html/training/gestures/movement.jd
@@ -73,8 +73,8 @@
<li>History. You can find the size of a gesture's history by calling the {@link
android.view.MotionEvent} method {@link android.view.MotionEvent#getHistorySize
getHistorySize()}. You can then obtain the positions, sizes, time, and pressures
-of each of the historical events by using the motion event's {@code
-getHistorical<em><Value></em>} methods. History is useful when rendering a trail of the user's finger,
+of each of the historical events by using the motion event's
+<code>getHistorical<em><Value></em></code> methods. History is useful when rendering a trail of the user's finger,
such as for touch drawing. See the {@link android.view.MotionEvent} reference for
details.</li>
diff --git a/docs/html/training/id-auth/custom_auth.jd b/docs/html/training/id-auth/custom_auth.jd
index 0509c6e..def9b51 100644
--- a/docs/html/training/id-auth/custom_auth.jd
+++ b/docs/html/training/id-auth/custom_auth.jd
@@ -148,7 +148,7 @@
href="http://developer.android.com/resources/samples/SampleSyncAdapter/index.html">
SampleSyncAdapter</a> contains a good example of an authenticator service.</p>
-<p>Don't forget to add a {@code <service>} tag to your manifest file
+<p>Don't forget to add a {@code <service>} tag to your manifest file
and add an intent filter for the AccountAuthenticator intent and declare the account
authenticator:</p>
diff --git a/docs/html/training/id-auth/identify.jd b/docs/html/training/id-auth/identify.jd
index 2b31bdd..db9ab3a 100644
--- a/docs/html/training/id-auth/identify.jd
+++ b/docs/html/training/id-auth/identify.jd
@@ -83,7 +83,7 @@
<p>In order to get a list of accounts on the device, your app needs the {@link
android.Manifest.permission#GET_ACCOUNTS}
permission. Add a <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code
-<uses-permission>}</a> tag in your manifest file to request
+<uses-permission>}</a> tag in your manifest file to request
this permission:</p>
<pre>
diff --git a/docs/html/training/implementing-navigation/ancestral.jd b/docs/html/training/implementing-navigation/ancestral.jd
index 8aa0fd6..29e1710 100644
--- a/docs/html/training/implementing-navigation/ancestral.jd
+++ b/docs/html/training/implementing-navigation/ancestral.jd
@@ -65,14 +65,14 @@
activity by specifying the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute
-in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
element.</p>
<p>If your app supports Android 4.0 and lower, include the
<a href="{@docRoot}tools/support-library/index.html">Support Library</a> with your app and
-add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element inside the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a>. Then specify the parent activity as the value
+<activity>}</a>. Then specify the parent activity as the value
for {@code android.support.PARENT_ACTIVITY}, matching the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute.</p>
@@ -140,14 +140,14 @@
<ul>
<li>If the parent activity has launch mode <a
href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
- <singleTop>}</a>, or the <code>up</code> intent contains {@link
+ <singleTop>}</a>, or the <code>up</code> intent contains {@link
android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}, the parent activity is
brought to the top of the stack, and receives the intent through its
{@link android.app.Activity#onNewIntent onNewIntent()} method.</li>
<li>If the parent activity has launch mode <a
href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
- <standard>}</a>, and the <code>up</code> intent does not contain
+ <standard>}</a>, and the <code>up</code> intent does not contain
{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}, the parent activity
is popped off the stack, and a new instance of that activity is created on
top of the stack to receive the intent.</li>
@@ -226,5 +226,5 @@
you must declare the logical parent of each activity in your manifest file, using the
<a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute (and corresponding <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a> element)
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a> element)
as described above.</p>
diff --git a/docs/html/training/implementing-navigation/lateral.jd b/docs/html/training/implementing-navigation/lateral.jd
index 9c83479..01ef599 100644
--- a/docs/html/training/implementing-navigation/lateral.jd
+++ b/docs/html/training/implementing-navigation/lateral.jd
@@ -62,7 +62,7 @@
a separate page (a separate tab) in the layout.</p>
<p>To set up your layout with {@link android.support.v4.view.ViewPager}, add a
-{@code <ViewPager>} element to your XML layout. For example, if each page in the swipe view
+{@code <ViewPager>} element to your XML layout. For example, if each page in the swipe view
should consume the entire layout, then your layout looks like this:</p>
<pre>
diff --git a/docs/html/training/implementing-navigation/temporal.jd b/docs/html/training/implementing-navigation/temporal.jd
index e736648..cbe1333 100644
--- a/docs/html/training/implementing-navigation/temporal.jd
+++ b/docs/html/training/implementing-navigation/temporal.jd
@@ -80,15 +80,15 @@
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute
in the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a> element. This allows the system to facilitate navigation patterns
+<activity>}</a> element. This allows the system to facilitate navigation patterns
because it can determine the logical <em>Back</em> or <em>Up</em> navigation path with this
information.</p>
<p>If your app supports Android 4.0 and lower, include the
<a href="{@docRoot}tools/support-library/index.html">Support Library</a> with your app and
-add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
+add a <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a>
element inside the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-<activity>}</a>. Then specify the parent activity as the value
+<activity>}</a>. Then specify the parent activity as the value
for {@code android.support.PARENT_ACTIVITY}, matching the <a
href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute.</p>
@@ -165,7 +165,7 @@
you must declare the logical parent of each activity in your manifest file, using the
<a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">{@code
android:parentActivityName}</a> attribute (and corresponding <a
-href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a> element)
+href="{@docRoot}guide/topics/manifest/meta-data-element.html">{@code <meta-data>}</a> element)
as described above.</p>
diff --git a/docs/html/training/improving-layouts/loading-ondemand.jd b/docs/html/training/improving-layouts/loading-ondemand.jd
index 9abd8fa..770157f 100644
--- a/docs/html/training/improving-layouts/loading-ondemand.jd
+++ b/docs/html/training/improving-layouts/loading-ondemand.jd
@@ -81,7 +81,7 @@
android.view.ViewStub} layout is visible/inflated.)</p>
<p class="note"><strong>Note:</strong> One drawback of {@link android.view.ViewStub} is that it
-doesn’t currently support the {@code <merge/>} tag in the layouts to be inflated.</p>
+doesn’t currently support the {@code <merge>} tag in the layouts to be inflated.</p>
diff --git a/docs/html/training/improving-layouts/optimizing-layout.jd b/docs/html/training/improving-layouts/optimizing-layout.jd
index 003e7a2..e0baedf 100644
--- a/docs/html/training/improving-layouts/optimizing-layout.jd
+++ b/docs/html/training/improving-layouts/optimizing-layout.jd
@@ -71,7 +71,7 @@
<p class="img-caption"><strong>Figure 1.</strong> Conceptual layout for an item in a {@link
android.widget.ListView}.</p>
-<p>The {@code hierarchyviewer} tool is available in {@code <sdk>/tools/}. When opened,
+<p>The {@code hierarchyviewer} tool is available in {@code <sdk>/tools/}. When opened,
the Hierarchy Viewer shows a list of available devices and its running components. Click
<strong>Load View Hierarchy</strong> to view the layout hierarchy of the selected component. For
example, figure 2 shows the layout for the list item illustrated by figure 1.</p>
diff --git a/docs/html/training/improving-layouts/reusing-layouts.jd b/docs/html/training/improving-layouts/reusing-layouts.jd
index 87431d3..7b0185d 100644
--- a/docs/html/training/improving-layouts/reusing-layouts.jd
+++ b/docs/html/training/improving-layouts/reusing-layouts.jd
@@ -37,7 +37,7 @@
<p>Although Android offers a variety of widgets to provide small and re-usable interactive elements,
you might also need to re-use larger components that require a special layout. To efficiently
-re-use complete layouts, you can use the {@code <include/>} and {@code <merge/>} tags
+re-use complete layouts, you can use the {@code <include/>} and {@code <merge/>} tags
to embed another layout inside the current layout.</p>
<p>Reusing layouts is particularly powerful as it allows you create reusable complex layouts. For
@@ -73,7 +73,7 @@
<h2 id="Include">Use the <include> Tag</h2>
<p>Inside the layout to which you want to add the re-usable component, add the {@code
-<include/>} tag. For example, here's a layout from the
+<include/>} tag. For example, here's a layout from the
G-Kenya codelab that includes the title bar from above:</p>
<p>Here's the layout file:</p>
@@ -99,7 +99,7 @@
</pre>
<p>You can also override all the layout parameters (any {@code android:layout_*} attributes) of the
-included layout's root view by specifying them in the {@code <include/>} tag. For
+included layout's root view by specifying them in the {@code <include/>} tag. For
example:</p>
<pre>
@@ -117,7 +117,7 @@
<h2 id="Merge">Use the <merge> Tag</h2>
-<p>The {@code <merge />} tag helps eliminate redundant view groups in your view hierarchy
+<p>The {@code <merge />} tag helps eliminate redundant view groups in your view hierarchy
when including one layout within another. For example, if your main layout is a vertical {@link
android.widget.LinearLayout} in which two consecutive views can be
re-used in multiple layouts, then the re-usable layout in which you place the two views requires its
@@ -127,7 +127,7 @@
serves no real purpose other than to slow down your UI performance.</p>
<p>To avoid including such a redundant view group, you can instead use the
-{@code <merge>} element as the root view for the re-usable layout. For example:</p>
+{@code <merge>} element as the root view for the re-usable layout. For example:</p>
<pre>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
@@ -145,7 +145,7 @@
</merge>
</pre>
-<p>Now, when you include this layout in another layout (using the {@code <include/>} tag), the
-system ignores the {@code <merge>} element and places the two buttons directly in the
-layout, in place of the {@code <include/>} tag.</p>
+<p>Now, when you include this layout in another layout (using the {@code <include/>} tag), the
+system ignores the {@code <merge>} element and places the two buttons directly in the
+layout, in place of the {@code <include/>} tag.</p>
diff --git a/docs/html/training/in-app-billing/preparing-iab-app.jd b/docs/html/training/in-app-billing/preparing-iab-app.jd
index 17cd0d51..42bc947 100644
--- a/docs/html/training/in-app-billing/preparing-iab-app.jd
+++ b/docs/html/training/in-app-billing/preparing-iab-app.jd
@@ -41,7 +41,7 @@
<li>Select <strong>Google Play Billing Library</strong>.</li>
<li>Click <strong>Install packages</strong> to complete the download.</li>
</ol>
-<p>The sample files will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
+<p>The sample files will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
<h2 id="AddToDevConsole">Add Your Application to the Developer Console</h2>
<p>The Google Play Developer Console is where you publish your In-app Billing application and manage the various digital goods that are available for purchase from your application. When you create a new application entry in the Developer Console, it automatically generates a public license key for your application. You will need this key to establish a trusted connection from your application to the Google Play servers. You only need to generate this key once per application, and don’t need to repeat these steps when you update the APK file for your application.</p>
diff --git a/docs/html/training/keyboard-input/visibility.jd b/docs/html/training/keyboard-input/visibility.jd
index 5dc6fc260..258884a 100644
--- a/docs/html/training/keyboard-input/visibility.jd
+++ b/docs/html/training/keyboard-input/visibility.jd
Binary files differ
diff --git a/docs/html/training/location/display-address.jd b/docs/html/training/location/display-address.jd
index 516f14f..8606629 100644
--- a/docs/html/training/location/display-address.jd
+++ b/docs/html/training/location/display-address.jd
@@ -131,7 +131,7 @@
</manifest>
</pre>
-<p class="note"><strong>Note:</strong> The {@code <service>} element in
+<p class="note"><strong>Note:</strong> The {@code <service>} element in
the manifest doesn't need to include an intent filter, because your main
activity creates an explicit intent by specifying the name of the class to use
for the intent.</p>
diff --git a/docs/html/training/scheduling/alarms.jd b/docs/html/training/scheduling/alarms.jd
index 8373d95..b332cb7 100644
--- a/docs/html/training/scheduling/alarms.jd
+++ b/docs/html/training/scheduling/alarms.jd
@@ -348,7 +348,7 @@
<p>Notice that in the manifest, the boot receiver is set to
-{@code android:enabled="false"}. This means that the receiver will not be called
+<code>android:enabled="false"</code>. This means that the receiver will not be called
unless the application explicitly enables it. This prevents the boot receiver from being
called unnecessarily. You can enable a receiver (for example, if the user sets an alarm)
as follows:</p>
diff --git a/docs/html/training/testing/ui-testing/uiautomator-testing.jd b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
index a0050a8..d0defd8 100644
--- a/docs/html/training/testing/ui-testing/uiautomator-testing.jd
+++ b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
@@ -119,7 +119,7 @@
<ol>
<li>Launch the target app on a physical device.</li>
<li>Connect the device to your development machine.</li>
- <li>Open a terminal window and navigate to the {@code <android-sdk>/tools/} directory.</li>
+ <li>Open a terminal window and navigate to the {@code <android-sdk>/tools/} directory.</li>
<li>Run the tool with this command:
<pre>$ uiautomatorviewer</pre>
</li>
diff --git a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
index 81921f8..9906d8c 100644
--- a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
@@ -91,7 +91,7 @@
creating JUnit 4 test classes and using JUnit 4 assertions and annotations, see
<a href="local-unit-tests.html#build">Create a Local Unit Test Class</a>.
</p>
-<p>To create an instrumented JUnit 4 test class, add the {@code @RunWith(AndroidJUnit4.class)}
+<p>To create an instrumented JUnit 4 test class, add the {@code @RunWith(AndroidJUnit4.class)}
annotation at the beginning of your test class definition. You also need to specify the
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
{@code AndroidJUnitRunner}</a> class
@@ -168,8 +168,8 @@
class="external-link">{@code RunWith}</a> and
<a href="http://junit.sourceforge.net/javadoc/org/junit/runners/Suite.html"
class="external-link">{@code Suite}</a> classes. In your test suite, add the
-{@code @RunWith(Suite.class)} and the {@code @Suite.SuitClasses()} annotations. In
-the {@code @Suite.SuiteClasses()} annotation, list the individual test classes or test
+{@code @RunWith(Suite.class)} and the {@code @Suite.SuitClasses()} annotations. In
+the {@code @Suite.SuiteClasses()} annotation, list the individual test classes or test
suites as arguments.
</p>
@@ -245,6 +245,6 @@
</pre>
<p>You can find the generated HTML test result reports in the
-{@code <path_to_your_project>/app/build/outputs/reports/androidTests/connected/} directory,
+{@code <path_to_your_project>/app/build/outputs/reports/androidTests/connected/} directory,
and the corresponding XML files in the
-{@code <path_to_your_project>/app/build/outputs/androidTest-results/connected/} directory.</p>
\ No newline at end of file
+{@code <path_to_your_project>/app/build/outputs/androidTest-results/connected/} directory.</p>
\ No newline at end of file
diff --git a/docs/html/training/testing/unit-testing/local-unit-tests.jd b/docs/html/training/testing/unit-testing/local-unit-tests.jd
index 421709b..8221a6d 100644
--- a/docs/html/training/testing/unit-testing/local-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/local-unit-tests.jd
@@ -89,7 +89,7 @@
{@code junit.extensions} package.</p>
<p>To create a basic JUnit 4 test class, create a Java class that contains one or more test methods.
-A test method begins with the {@code @Test} annotation and contains the code to exercise
+A test method begins with the {@code @Test} annotation and contains the code to exercise
and verify a single functionality in the component that you want to test.</p>
<p>The following example shows how you might implement a local unit test class. The test method
@@ -125,32 +125,32 @@
<ul>
<li>
-{@code @Before}: Use this annotation to specify a block of code with test setup operations. This
-code block will be invoked before each test. You can have multiple {@code @Before} methods but
+{@code @Before}: Use this annotation to specify a block of code with test setup operations. This
+code block will be invoked before each test. You can have multiple {@code @Before} methods but
the order which these methods are called is not fixed.
</li>
<li>
-{@code @After}: This annotation specifies a block of code with test tear-down operations. This
-code block will be called after every test method. You can define multiple {@code @After}
+{@code @After}: This annotation specifies a block of code with test tear-down operations. This
+code block will be called after every test method. You can define multiple {@code @After}
operations in your test code. Use this annotation to release any resources from memory.
</li>
<li>
-{@code @Test}: Use this annotation to mark a test method. A single test class can contain
+{@code @Test}: Use this annotation to mark a test method. A single test class can contain
multiple test methods, each prefixed with this annotation.
</li>
<li>
-{@code @BeforeClass}: Use this annotation to specify static methods to be invoked only once per
+{@code @BeforeClass}: Use this annotation to specify static methods to be invoked only once per
test class. This testing step is useful for expensive operations such as connecting to a database.
</li>
<li>
-{@code @AfterClass}: Use this annotation to specify static methods to be invoked only after all
+{@code @AfterClass}: Use this annotation to specify static methods to be invoked only after all
tests in the class have been run. This testing step is useful for releasing any resources allocated
-in the {@code @BeforeClass} block.
+in the {@code @BeforeClass} block.
</li>
<li>
-{@code @Test(timeout=<milliseconds>)}: Specifies a timeout period for the test. If the
+{@code @Test(timeout=<milliseconds>)}: Specifies a timeout period for the test. If the
test starts but does not complete within the given timeout period, it automatically fails. You must
-specify the timeout period in milliseconds, for example: {@code @Test(timeout=5000)}.
+specify the timeout period in milliseconds, for example: {@code @Test(timeout=5000)}.
</li>
</ul>
@@ -179,11 +179,11 @@
<a href="#setup">Set Up Your Testing Environment</a>.
</li>
<li>At the beginning of your unit test class definition, add the
-{@code @RunWith(MockitoJUnitRunner.class)} annotation. This annotation tells the Mockito test
+{@code @RunWith(MockitoJUnitRunner.class)} annotation. This annotation tells the Mockito test
runner to validate that your usage of the framework is correct and simplifies the initialization of
your mock objects.
</li>
-<li>To create a mock object for an Android dependency, add the {@code @Mock} annotation before
+<li>To create a mock object for an Android dependency, add the {@code @Mock} annotation before
the field declaration.</li>
<li>To stub the behavior of the dependency, you can specify a condition and return
value when the condition is met by using the {@code when()} and {@code thenReturn()} methods.
@@ -298,5 +298,5 @@
<p>If there are failing tests, the command will display links to HTML reports (one per build
variant). You can find the generated HTML test result reports in the
-{@code <path_to_your_project>/app/build/reports/tests/} directory, and the corresponding XML
-files in the {@code <path_to_your_project>/app/build/test-results/} directory.</p>
\ No newline at end of file
+{@code <path_to_your_project>/app/build/reports/tests/} directory, and the corresponding XML
+files in the {@code <path_to_your_project>/app/build/test-results/} directory.</p>
\ No newline at end of file
diff --git a/docs/html/training/tv/discovery/searchable.jd b/docs/html/training/tv/discovery/searchable.jd
index 4ca7abb..bbcb56e 100644
--- a/docs/html/training/tv/discovery/searchable.jd
+++ b/docs/html/training/tv/discovery/searchable.jd
@@ -238,7 +238,7 @@
<p>In your manifest file, the content provider receives special treatment. Rather than getting
tagged as an activity, it is described as a
-<a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}</a>. The
+<a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}</a>. The
provider includes the {@code android:searchSuggestAuthority} attribute to tell the system the
namespace of your content provider. Also, you must set its {@code android:exported} attribute to
{@code "true"} so that the Android global search can use the results returned from it.</p>
@@ -257,7 +257,7 @@
{@code android:searchSuggestAuthority}</a> attribute to tell the system the namespace of your
content provider. This must match the string value you specify in the
<a href="{@docRoot}guide/topics/manifest/provider-element.html#auth">{@code android:authorities}</a>
-attribute of the <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}
+attribute of the <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}
</a> element in your {@code AndroidManifest.xml} file.</p>
The <a href="{@docRoot}guide/topics/search/searchable-config.html">{@code searchable.xml}</a> file
@@ -339,7 +339,7 @@
<a href="{@docRoot}guide/topics/search/searchable-config.html">{@code searchable.xml}</a> file.
To <a href="{@docRoot}guide/topics/search/search-dialog.html">use the global search dialog</a>,
the manifest must describe which activity should receive search queries. The manifest must also
-describe the <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}
+describe the <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code <provider>}
</a>element, exactly as it is described in the <a href="{@docRoot}guide/topics/search/searchable-config.html">
{@code searchable.xml}</a> file.</p>
diff --git a/docs/html/training/tv/start/start.jd b/docs/html/training/tv/start/start.jd
index e55e202..4d04ad6 100644
--- a/docs/html/training/tv/start/start.jd
+++ b/docs/html/training/tv/start/start.jd
@@ -233,7 +233,7 @@
<p>
The Android SDK includes support libraries that are intended for use with TV apps. These
libraries provide APIs and user interface widgets for use on TV devices. The libraries are
- located in the {@code <sdk>/extras/android/support/} directory. Here is a list of the
+ located in the {@code <sdk>/extras/android/support/} directory. Here is a list of the
libraries and their general purpose:
</p>
diff --git a/docs/html/training/volley/request-custom.jd b/docs/html/training/volley/request-custom.jd
index 7b669b9..c62c254 100644
--- a/docs/html/training/volley/request-custom.jd
+++ b/docs/html/training/volley/request-custom.jd
@@ -36,12 +36,12 @@
<ul>
-<li>Extend the {@code Request<T>} class, where
-{@code <T>} represents the type of parsed response
+<li>Extend the {@code Request<T>} class, where
+{@code <T>} represents the type of parsed response
the request expects. So if your parsed response is a string, for example,
-create your custom request by extending {@code Request<String>}. See the Volley
+create your custom request by extending {@code Request<String>}. See the Volley
toolbox classes {@code StringRequest} and {@code ImageRequest} for examples of
-extending {@code Request<T>}.</li>
+extending {@code Request<T>}.</li>
<li>Implement the abstract methods {@code parseNetworkResponse()}
and {@code deliverResponse()}, described in more detail below.</li>
@@ -74,7 +74,7 @@
<ul>
<li>{@code parseNetworkResponse()} takes as its parameter a {@code NetworkResponse}, which
contains the response payload as a byte[], HTTP status code, and response headers.</li>
-<li>Your implementation must return a {@code Response<T>}, which contains your typed
+<li>Your implementation must return a {@code Response<T>}, which contains your typed
response object and cache metadata or an error, such as in the case of a parse failure.</li>
</ul>
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index 7aa0aef..a226e85 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -361,6 +361,17 @@
public static final int RAW_SENSOR = 0x20;
/**
+ * <p>Private raw camera sensor image format, a single channel image with
+ * implementation depedent pixel layout.</p>
+ *
+ * <p>RAW_PRIVATE is a format for unprocessed raw image buffers coming from an
+ * image sensor. The actual structure of buffers of this format is
+ * implementation-dependent.</p>
+ *
+ */
+ public static final int RAW_PRIVATE = 0x24;
+
+ /**
* <p>
* Android 10-bit raw format
* </p>
@@ -748,6 +759,7 @@
case FLEX_RGB_888:
case FLEX_RGBA_8888:
case RAW_SENSOR:
+ case RAW_PRIVATE:
case RAW10:
case RAW12:
case DEPTH16:
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 35182f9..90522f7 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -25,6 +25,9 @@
import android.text.TextUtils;
import android.util.LocaleList;
+import com.android.internal.annotations.GuardedBy;
+
+import java.util.HashMap;
import java.util.Locale;
/**
@@ -56,6 +59,16 @@
private LocaleList mLocales;
private String mFontFeatureSettings;
+ private static final Object sCacheLock = new Object();
+
+ /**
+ * Cache for the Minikin language list ID.
+ *
+ * A map from a string representation of the LocaleList to Minikin's language list ID.
+ */
+ @GuardedBy("sCacheLock")
+ private static final HashMap<String, Integer> sMinikinLangListIdCache = new HashMap<>();
+
/**
* @hide
*/
@@ -1335,7 +1348,7 @@
return;
}
mLocales = new LocaleList(locale);
- nSetTextLocales(mNativePaint, locale.toString());
+ syncTextLocalesWithMinikin();
}
/**
@@ -1372,7 +1385,21 @@
}
if (locales.equals(mLocales)) return;
mLocales = locales;
- nSetTextLocales(mNativePaint, locales.toLanguageTags());
+ syncTextLocalesWithMinikin();
+ }
+
+ private void syncTextLocalesWithMinikin() {
+ final String languageTags = mLocales.toLanguageTags();
+ final Integer minikinLangListId;
+ synchronized (sCacheLock) {
+ minikinLangListId = sMinikinLangListIdCache.get(languageTags);
+ if (minikinLangListId == null) {
+ final int newID = nSetTextLocales(mNativePaint, languageTags);
+ sMinikinLangListIdCache.put(languageTags, newID);
+ return;
+ }
+ }
+ nSetTextLocalesByMinikinLangListId(mNativePaint, minikinLangListId.intValue());
}
/**
@@ -2714,8 +2741,9 @@
private static native void nSetTextAlign(long paintPtr,
int align);
- private static native void nSetTextLocales(long paintPtr,
- String locales);
+ private static native int nSetTextLocales(long paintPtr, String locales);
+ private static native void nSetTextLocalesByMinikinLangListId(long paintPtr,
+ int mMinikinLangListId);
private static native float nGetTextAdvances(long paintPtr, long typefacePtr,
char[] text, int index, int count, int contextIndex, int contextCount,
diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
index 971a3a2..d714ca8 100644
--- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
@@ -153,7 +153,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index 6bf3afd..0fd1741 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -40,8 +40,8 @@
* animation.
* <p>
* An AnimationDrawable defined in XML consists of a single
- * {@code <animation-list>} element and a series of nested
- * {@code <item>} tags. Each item defines a frame of the animation. See
+ * {@code <animation-list>} element and a series of nested
+ * {@code <item>} tags. Each item defines a frame of the animation. See
* the example below.
* <p>
* spin_animation.xml file in res/drawable/ folder:
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 4d2037b..daf2581 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -829,7 +829,7 @@
try {
updateStateFromTypedArray(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java
index cdd336d..d925b6b 100644
--- a/graphics/java/android/graphics/drawable/ClipDrawable.java
+++ b/graphics/java/android/graphics/drawable/ClipDrawable.java
@@ -111,7 +111,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 0ee877e..3d8437d 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -1430,6 +1430,20 @@
}
/**
+ * Re-throws an exception as a {@link RuntimeException} with an empty stack
+ * trace to avoid cluttering the log. The original exception's stack trace
+ * will still be included.
+ *
+ * @param cause the exception to re-throw
+ * @throws RuntimeException
+ */
+ static void rethrowAsRuntimeException(Exception cause) throws RuntimeException {
+ final RuntimeException e = new RuntimeException(cause);
+ e.setStackTrace(new StackTraceElement[0]);
+ throw e;
+ }
+
+ /**
* Parses a {@link android.graphics.PorterDuff.Mode} from a tintMode
* attribute's enum value.
*
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 4be86ef..f9208cd 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -23,7 +23,6 @@
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
-import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
@@ -1268,7 +1267,7 @@
try {
updateGradientDrawableGradient(t.getResources(), a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
@@ -1636,8 +1635,14 @@
public void getOutline(Outline outline) {
final GradientState st = mGradientState;
final Rect bounds = getBounds();
- // only report non-zero alpha if shape being drawn is opaque
- outline.setAlpha(st.mOpaqueOverShape && isOpaqueForState() ? (mAlpha / 255.0f) : 0.0f);
+ // only report non-zero alpha if shape being drawn has consistent opacity over shape. Must
+ // either not have a stroke, or have same stroke/fill opacity
+ boolean useFillOpacity = st.mOpaqueOverShape && (mGradientState.mStrokeWidth <= 0
+ || mStrokePaint == null
+ || mStrokePaint.getAlpha() == mFillPaint.getAlpha());
+ outline.setAlpha(useFillOpacity
+ ? modulateAlpha(mFillPaint.getAlpha()) / 255.0f
+ : 0.0f);
switch (st.mShape) {
case RECTANGLE:
diff --git a/graphics/java/android/graphics/drawable/Icon.java b/graphics/java/android/graphics/drawable/Icon.java
index d800acb..0de4c2c 100644
--- a/graphics/java/android/graphics/drawable/Icon.java
+++ b/graphics/java/android/graphics/drawable/Icon.java
@@ -44,6 +44,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Objects;
/**
* An umbrella container for several serializable graphics representations, including Bitmaps,
@@ -459,6 +460,37 @@
}
/**
+ * Compares if this icon is constructed from the same resources as another icon.
+ * Note that this is an inexpensive operation and doesn't do deep Bitmap equality comparisons.
+ *
+ * @param otherIcon the other icon
+ * @return whether this icon is the same as the another one
+ * @hide
+ */
+ public boolean sameAs(Icon otherIcon) {
+ if (otherIcon == this) {
+ return true;
+ }
+ if (mType != otherIcon.getType()) {
+ return false;
+ }
+ switch (mType) {
+ case TYPE_BITMAP:
+ return getBitmap() == otherIcon.getBitmap();
+ case TYPE_DATA:
+ return getDataLength() == otherIcon.getDataLength()
+ && getDataOffset() == otherIcon.getDataOffset()
+ && getDataBytes() == otherIcon.getDataBytes();
+ case TYPE_RESOURCE:
+ return getResId() == otherIcon.getResId()
+ && Objects.equals(getResPackage(), otherIcon.getResPackage());
+ case TYPE_URI:
+ return Objects.equals(getUriString(), otherIcon.getUriString());
+ }
+ return false;
+ }
+
+ /**
* Create an Icon pointing to a drawable resource.
* @param context The context for the application whose resources should be used to resolve the
* given resource ID.
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 36d4272..d47cb56 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -124,7 +124,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 4d51d63..bfbdfa5 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -510,7 +510,7 @@
try {
updateStateFromTypedArray(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index aaab529..5213e10 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -40,7 +40,6 @@
import android.graphics.Rect;
import android.graphics.Shader;
import android.util.AttributeSet;
-import android.util.DisplayMetrics;
import java.io.IOException;
import java.util.Arrays;
@@ -505,7 +504,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java
index 1531ba2..78424e3 100644
--- a/graphics/java/android/graphics/drawable/RotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/RotateDrawable.java
@@ -92,7 +92,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java
index f87c19a..51e143b 100644
--- a/graphics/java/android/graphics/drawable/ScaleDrawable.java
+++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java
@@ -50,7 +50,7 @@
* {@code android.R.styleable#ScaleDrawable_scaleHeight scaleHeight}. At run
* time, the level may be set via {@link #setLevel(int)}.
* <p>
- * A scale drawable may be defined in an XML file with the {@code <scale>}
+ * A scale drawable may be defined in an XML file with the {@code <scale>}
* element. For more information, see the guide to
* <a href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable
* Resources</a>.
@@ -125,7 +125,7 @@
updateStateFromTypedArray(a);
verifyRequiredAttributes(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index f630055e..3761a99 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -511,7 +511,7 @@
state.mCacheDirty = true;
updateStateFromTypedArray(a);
} catch (XmlPullParserException e) {
- throw new RuntimeException(e);
+ rethrowAsRuntimeException(e);
} finally {
a.recycle();
}
diff --git a/include/android_runtime/android_view_Surface.h b/include/android_runtime/android_view_Surface.h
index ed83314..b1e552a 100644
--- a/include/android_runtime/android_view_Surface.h
+++ b/include/android_runtime/android_view_Surface.h
@@ -45,7 +45,9 @@
RAW_SENSOR = 0x20,
PRIVATE = 0x22,
YUV_420_888 = 0x23,
+ RAW_PRIVATE = 0x24,
RAW10 = 0x25,
+ RAW12 = 0x26,
JPEG = 0x100,
DEPTH_POINT_CLOUD = 0x101,
YV12 = 0x32315659,
diff --git a/keystore/java/android/security/IKeyChainService.aidl b/keystore/java/android/security/IKeyChainService.aidl
index 20c94c5..cfcb4e0 100644
--- a/keystore/java/android/security/IKeyChainService.aidl
+++ b/keystore/java/android/security/IKeyChainService.aidl
@@ -33,6 +33,7 @@
// APIs used by DevicePolicyManager
boolean installKeyPair(in byte[] privateKey, in byte[] userCert, String alias);
+ boolean removeKeyPair(String alias);
// APIs used by Settings
boolean deleteCaCertificate(String alias);
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index 5b2594d..40fb0d3 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -457,9 +457,9 @@
* KeyFactory keyFactory =
* KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
* KeyInfo keyInfo = keyFactory.getKeySpec(key, KeyInfo.class);
- * if (keyInfo.isInsideSecureHardware()) {
+ * if (keyInfo.isInsideSecureHardware()) {
* // The key is bound to the secure hardware of this Android
- * }}</pre>
+ * }}</pre>
*/
@Deprecated
public static boolean isBoundKeyAlgorithm(
diff --git a/keystore/java/android/security/keystore/KeyInfo.java b/keystore/java/android/security/keystore/KeyInfo.java
index 785ec15..7cf4b04 100644
--- a/keystore/java/android/security/keystore/KeyInfo.java
+++ b/keystore/java/android/security/keystore/KeyInfo.java
@@ -38,32 +38,30 @@
* <p><h3>Example: Symmetric Key</h3>
* The following example illustrates how to obtain a {@code KeyInfo} describing the provided Android
* Keystore {@link SecretKey}.
- * <pre> {@code
+ * <pre>{@code
* SecretKey key = ...; // Android Keystore key
*
* SecretKeyFactory factory = SecretKeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
* KeyInfo keyInfo;
- * try {
+ * try {
* keyInfo = (KeyInfo) factory.getKeySpec(key, KeyInfo.class);
- * } catch (InvalidKeySpecException e) {
+ * } catch (InvalidKeySpecException e) {
* // Not an Android KeyStore key.
- * }
- * }</pre>
+ * }}</pre>
*
* <p><h3>Example: Private Key</h3>
* The following example illustrates how to obtain a {@code KeyInfo} describing the provided
* Android KeyStore {@link PrivateKey}.
- * <pre> {@code
+ * <pre>{@code
* PrivateKey key = ...; // Android KeyStore key
*
* KeyFactory factory = KeyFactory.getInstance(key.getAlgorithm(), "AndroidKeyStore");
* KeyInfo keyInfo;
- * try {
+ * try {
* keyInfo = factory.getKeySpec(key, KeyInfo.class);
- * } catch (InvalidKeySpecException e) {
+ * } catch (InvalidKeySpecException e) {
* // Not an Android KeyStore key.
- * }
- * }</pre>
+ * }}</pre>
*/
public class KeyInfo implements KeySpec {
private final String mKeystoreAlias;
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index fc4916c..0d1ee46 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -30,7 +30,6 @@
utils/StringUtils.cpp \
utils/TestWindowContext.cpp \
utils/VectorDrawableUtils.cpp \
- utils/TestUtils.cpp \
AmbientShadow.cpp \
AnimationContext.cpp \
Animator.cpp \
@@ -90,6 +89,12 @@
VectorDrawablePath.cpp \
protos/hwui.proto
+hwui_test_common_src_files := \
+ $(call all-cpp-files-under, tests/common/scenes) \
+ tests/common/TestContext.cpp \
+ tests/common/TestScene.cpp \
+ tests/common/TestUtils.cpp
+
hwui_cflags := \
-DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES \
-DATRACE_TAG=ATRACE_TAG_VIEW -DLOG_TAG=\"OpenGLRenderer\" \
@@ -180,8 +185,8 @@
-DHWUI_NULL_GPU
LOCAL_SRC_FILES := \
$(hwui_src_files) \
- tests/nullegl.cpp \
- tests/nullgles.cpp
+ tests/common/nullegl.cpp \
+ tests/common/nullgles.cpp
LOCAL_C_INCLUDES := $(hwui_c_includes) $(call hwui_proto_include)
LOCAL_EXPORT_C_INCLUDE_DIRS := $(hwui_c_includes) $(call hwui_proto_include)
@@ -215,28 +220,29 @@
-DHWUI_NULL_GPU
LOCAL_SRC_FILES += \
- unit_tests/CanvasStateTests.cpp \
- unit_tests/ClipAreaTests.cpp \
- unit_tests/DamageAccumulatorTests.cpp \
- unit_tests/DeviceInfoTests.cpp \
- unit_tests/FatVectorTests.cpp \
- unit_tests/LayerUpdateQueueTests.cpp \
- unit_tests/LinearAllocatorTests.cpp \
- unit_tests/VectorDrawableTests.cpp \
- unit_tests/OffscreenBufferPoolTests.cpp \
- unit_tests/StringUtilsTests.cpp
+ $(hwui_test_common_src_files) \
+ tests/unit/CanvasStateTests.cpp \
+ tests/unit/ClipAreaTests.cpp \
+ tests/unit/DamageAccumulatorTests.cpp \
+ tests/unit/DeviceInfoTests.cpp \
+ tests/unit/FatVectorTests.cpp \
+ tests/unit/LayerUpdateQueueTests.cpp \
+ tests/unit/LinearAllocatorTests.cpp \
+ tests/unit/VectorDrawableTests.cpp \
+ tests/unit/OffscreenBufferPoolTests.cpp \
+ tests/unit/StringUtilsTests.cpp
ifeq (true, $(HWUI_NEW_OPS))
LOCAL_SRC_FILES += \
- unit_tests/BakedOpStateTests.cpp \
- unit_tests/RecordingCanvasTests.cpp \
- unit_tests/OpReordererTests.cpp
+ tests/unit/BakedOpStateTests.cpp \
+ tests/unit/RecordingCanvasTests.cpp \
+ tests/unit/OpReordererTests.cpp
endif
include $(BUILD_NATIVE_TEST)
# ------------------------
-# test app
+# Macro-bench app
# ------------------------
include $(CLEAR_VARS)
@@ -255,11 +261,9 @@
LOCAL_WHOLE_STATIC_LIBRARIES := libhwui_static
LOCAL_SRC_FILES += \
- tests/TestContext.cpp \
- tests/TestSceneRunner.cpp \
- tests/main.cpp
-
-LOCAL_SRC_FILES += $(call all-cpp-files-under, tests/scenes)
+ $(hwui_test_common_src_files) \
+ tests/macrobench/TestSceneRunner.cpp \
+ tests/macrobench/main.cpp
include $(BUILD_EXECUTABLE)
@@ -285,14 +289,15 @@
LOCAL_STATIC_LIBRARIES := libbenchmark libbase
LOCAL_SRC_FILES += \
- microbench/DisplayListCanvasBench.cpp \
- microbench/LinearAllocatorBench.cpp \
- microbench/PathParserBench.cpp \
- microbench/ShadowBench.cpp
+ $(hwui_test_common_src_files) \
+ tests/microbench/DisplayListCanvasBench.cpp \
+ tests/microbench/LinearAllocatorBench.cpp \
+ tests/microbench/PathParserBench.cpp \
+ tests/microbench/ShadowBench.cpp
ifeq (true, $(HWUI_NEW_OPS))
LOCAL_SRC_FILES += \
- microbench/OpReordererBench.cpp
+ tests/microbench/OpReordererBench.cpp
endif
include $(BUILD_EXECUTABLE)
diff --git a/libs/hwui/AssetAtlas.cpp b/libs/hwui/AssetAtlas.cpp
index 7e09699..41411a9 100644
--- a/libs/hwui/AssetAtlas.cpp
+++ b/libs/hwui/AssetAtlas.cpp
@@ -79,13 +79,13 @@
// Entries
///////////////////////////////////////////////////////////////////////////////
-AssetAtlas::Entry* AssetAtlas::getEntry(const SkBitmap* bitmap) const {
- ssize_t index = mEntries.indexOfKey(bitmap->pixelRef());
+AssetAtlas::Entry* AssetAtlas::getEntry(const SkPixelRef* pixelRef) const {
+ ssize_t index = mEntries.indexOfKey(pixelRef);
return index >= 0 ? mEntries.valueAt(index) : nullptr;
}
-Texture* AssetAtlas::getEntryTexture(const SkBitmap* bitmap) const {
- ssize_t index = mEntries.indexOfKey(bitmap->pixelRef());
+Texture* AssetAtlas::getEntryTexture(const SkPixelRef* pixelRef) const {
+ ssize_t index = mEntries.indexOfKey(pixelRef);
return index >= 0 ? mEntries.valueAt(index)->texture : nullptr;
}
diff --git a/libs/hwui/AssetAtlas.h b/libs/hwui/AssetAtlas.h
index f1cd0b4..a037725 100644
--- a/libs/hwui/AssetAtlas.h
+++ b/libs/hwui/AssetAtlas.h
@@ -148,15 +148,15 @@
/**
* Returns the entry in the atlas associated with the specified
- * bitmap. If the bitmap is not in the atlas, return NULL.
+ * pixelRef. If the pixelRef is not in the atlas, return NULL.
*/
- Entry* getEntry(const SkBitmap* bitmap) const;
+ Entry* getEntry(const SkPixelRef* pixelRef) const;
/**
* Returns the texture for the atlas entry associated with the
- * specified bitmap. If the bitmap is not in the atlas, return NULL.
+ * specified pixelRef. If the pixelRef is not in the atlas, return NULL.
*/
- Texture* getEntryTexture(const SkBitmap* bitmap) const;
+ Texture* getEntryTexture(const SkPixelRef* pixelRef) const;
private:
void createEntries(Caches& caches, int64_t* map, int count);
diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp
index b56b1e4..f1c89b8 100644
--- a/libs/hwui/BakedOpDispatcher.cpp
+++ b/libs/hwui/BakedOpDispatcher.cpp
@@ -20,6 +20,8 @@
#include "Caches.h"
#include "Glop.h"
#include "GlopBuilder.h"
+#include "Patch.h"
+#include "PathTessellator.h"
#include "renderstate/OffscreenBufferPool.h"
#include "renderstate/RenderState.h"
#include "utils/GLUtils.h"
@@ -27,24 +29,371 @@
#include <algorithm>
#include <math.h>
+#include <SkPaintDefaults.h>
namespace android {
namespace uirenderer {
+static void storeTexturedRect(TextureVertex* vertices, const Rect& bounds, const Rect& texCoord) {
+ vertices[0] = { bounds.left, bounds.top, texCoord.left, texCoord.top };
+ vertices[1] = { bounds.right, bounds.top, texCoord.right, texCoord.top };
+ vertices[2] = { bounds.left, bounds.bottom, texCoord.left, texCoord.bottom };
+ vertices[3] = { bounds.right, bounds.bottom, texCoord.right, texCoord.bottom };
+}
+
+void BakedOpDispatcher::onMergedBitmapOps(BakedOpRenderer& renderer,
+ const MergedBakedOpList& opList) {
+
+ const BakedOpState& firstState = *(opList.states[0]);
+ const SkBitmap* bitmap = (static_cast<const BitmapOp*>(opList.states[0]->op))->bitmap;
+
+ AssetAtlas::Entry* entry = renderer.renderState().assetAtlas().getEntry(bitmap->pixelRef());
+ Texture* texture = entry ? entry->texture : renderer.caches().textureCache.get(bitmap);
+ if (!texture) return;
+ const AutoTexture autoCleanup(texture);
+
+ TextureVertex vertices[opList.count * 4];
+ Rect texCoords(0, 0, 1, 1);
+ if (entry) {
+ entry->uvMapper.map(texCoords);
+ }
+ for (size_t i = 0; i < opList.count; i++) {
+ const BakedOpState& state = *(opList.states[i]);
+ TextureVertex* rectVerts = &vertices[i * 4];
+ Rect opBounds = state.computedState.clippedBounds;
+ if (CC_LIKELY(state.computedState.transform.isPureTranslate())) {
+ // pure translate, so snap (same behavior as onBitmapOp)
+ opBounds.snapToPixelBoundaries();
+ }
+ storeTexturedRect(rectVerts, opBounds, texCoords);
+ renderer.dirtyRenderTarget(opBounds);
+ }
+
+ const int textureFillFlags = (bitmap->colorType() == kAlpha_8_SkColorType)
+ ? TextureFillFlags::IsAlphaMaskTexture : TextureFillFlags::None;
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(firstState.roundRectClipState)
+ .setMeshTexturedIndexedQuads(vertices, opList.count * 6)
+ .setFillTexturePaint(*texture, textureFillFlags, firstState.op->paint, firstState.alpha)
+ .setTransform(Matrix4::identity(), TransformFlags::None)
+ .setModelViewIdentityEmptyBounds()
+ .build();
+ renderer.renderGlop(nullptr, opList.clipSideFlags ? &opList.clip : nullptr, glop);
+}
+
+void BakedOpDispatcher::onMergedPatchOps(BakedOpRenderer& renderer,
+ const MergedBakedOpList& opList) {
+ const PatchOp& firstOp = *(static_cast<const PatchOp*>(opList.states[0]->op));
+ const BakedOpState& firstState = *(opList.states[0]);
+ AssetAtlas::Entry* entry = renderer.renderState().assetAtlas().getEntry(
+ firstOp.bitmap->pixelRef());
+
+ // Batches will usually contain a small number of items so it's
+ // worth performing a first iteration to count the exact number
+ // of vertices we need in the new mesh
+ uint32_t totalVertices = 0;
+
+ for (size_t i = 0; i < opList.count; i++) {
+ const PatchOp& op = *(static_cast<const PatchOp*>(opList.states[i]->op));
+
+ // TODO: cache mesh lookups
+ const Patch* opMesh = renderer.caches().patchCache.get(
+ entry, op.bitmap->width(), op.bitmap->height(),
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.patch);
+ totalVertices += opMesh->verticesCount;
+ }
+
+ const bool dirtyRenderTarget = renderer.offscreenRenderTarget();
+
+ uint32_t indexCount = 0;
+
+ TextureVertex vertices[totalVertices];
+ TextureVertex* vertex = &vertices[0];
+ // Create a mesh that contains the transformed vertices for all the
+ // 9-patch objects that are part of the batch. Note that onDefer()
+ // enforces ops drawn by this function to have a pure translate or
+ // identity matrix
+ for (size_t i = 0; i < opList.count; i++) {
+ const PatchOp& op = *(static_cast<const PatchOp*>(opList.states[i]->op));
+ const BakedOpState& state = *opList.states[i];
+
+ // TODO: cache mesh lookups
+ const Patch* opMesh = renderer.caches().patchCache.get(
+ entry, op.bitmap->width(), op.bitmap->height(),
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.patch);
+
+
+ uint32_t vertexCount = opMesh->verticesCount;
+ if (vertexCount == 0) continue;
+
+ // We use the bounds to know where to translate our vertices
+ // Using patchOp->state.mBounds wouldn't work because these
+ // bounds are clipped
+ const float tx = floorf(state.computedState.transform.getTranslateX()
+ + op.unmappedBounds.left + 0.5f);
+ const float ty = floorf(state.computedState.transform.getTranslateY()
+ + op.unmappedBounds.top + 0.5f);
+
+ // Copy & transform all the vertices for the current operation
+ TextureVertex* opVertices = opMesh->vertices.get();
+ for (uint32_t j = 0; j < vertexCount; j++, opVertices++) {
+ TextureVertex::set(vertex++,
+ opVertices->x + tx, opVertices->y + ty,
+ opVertices->u, opVertices->v);
+ }
+
+ // Dirty the current layer if possible. When the 9-patch does not
+ // contain empty quads we can take a shortcut and simply set the
+ // dirty rect to the object's bounds.
+ if (dirtyRenderTarget) {
+ if (!opMesh->hasEmptyQuads) {
+ renderer.dirtyRenderTarget(Rect(tx, ty,
+ tx + op.unmappedBounds.getWidth(), ty + op.unmappedBounds.getHeight()));
+ } else {
+ const size_t count = opMesh->quads.size();
+ for (size_t i = 0; i < count; i++) {
+ const Rect& quadBounds = opMesh->quads[i];
+ const float x = tx + quadBounds.left;
+ const float y = ty + quadBounds.top;
+ renderer.dirtyRenderTarget(Rect(x, y,
+ x + quadBounds.getWidth(), y + quadBounds.getHeight()));
+ }
+ }
+ }
+
+ indexCount += opMesh->indexCount;
+ }
+
+
+ Texture* texture = entry ? entry->texture : renderer.caches().textureCache.get(firstOp.bitmap);
+ if (!texture) return;
+ const AutoTexture autoCleanup(texture);
+
+ // 9 patches are built for stretching - always filter
+ int textureFillFlags = TextureFillFlags::ForceFilter;
+ if (firstOp.bitmap->colorType() == kAlpha_8_SkColorType) {
+ textureFillFlags |= TextureFillFlags::IsAlphaMaskTexture;
+ }
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(firstState.roundRectClipState)
+ .setMeshTexturedIndexedQuads(vertices, indexCount)
+ .setFillTexturePaint(*texture, textureFillFlags, firstOp.paint, firstState.alpha)
+ .setTransform(Matrix4::identity(), TransformFlags::None)
+ .setModelViewIdentityEmptyBounds()
+ .build();
+ renderer.renderGlop(nullptr, opList.clipSideFlags ? &opList.clip : nullptr, glop);
+}
+
+static void renderTextShadow(BakedOpRenderer& renderer, FontRenderer& fontRenderer,
+ const TextOp& op, const BakedOpState& state) {
+ renderer.caches().textureState().activateTexture(0);
+
+ PaintUtils::TextShadow textShadow;
+ if (!PaintUtils::getTextShadow(op.paint, &textShadow)) {
+ LOG_ALWAYS_FATAL("failed to query shadow attributes");
+ }
+
+ renderer.caches().dropShadowCache.setFontRenderer(fontRenderer);
+ ShadowTexture* texture = renderer.caches().dropShadowCache.get(
+ op.paint, (const char*) op.glyphs,
+ op.glyphCount, textShadow.radius, op.positions);
+ // If the drop shadow exceeds the max texture size or couldn't be
+ // allocated, skip drawing
+ if (!texture) return;
+ const AutoTexture autoCleanup(texture);
+
+ const float sx = op.x - texture->left + textShadow.dx;
+ const float sy = op.y - texture->top + textShadow.dy;
+
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshTexturedUnitQuad(nullptr)
+ .setFillShadowTexturePaint(*texture, textShadow.color, *op.paint, state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewMapUnitToRect(Rect(sx, sy, sx + texture->width, sy + texture->height))
+ .build();
+ renderer.renderGlop(state, glop);
+}
+
+enum class TextRenderType {
+ Defer,
+ Flush
+};
+
+static void renderTextOp(BakedOpRenderer& renderer, const TextOp& op, const BakedOpState& state,
+ const Rect* renderClip, TextRenderType renderType) {
+ FontRenderer& fontRenderer = renderer.caches().fontRenderer.getFontRenderer();
+
+ if (CC_UNLIKELY(PaintUtils::hasTextShadow(op.paint))) {
+ fontRenderer.setFont(op.paint, SkMatrix::I());
+ renderTextShadow(renderer, fontRenderer, op, state);
+ }
+
+ float x = op.x;
+ float y = op.y;
+ const Matrix4& transform = state.computedState.transform;
+ const bool pureTranslate = transform.isPureTranslate();
+ if (CC_LIKELY(pureTranslate)) {
+ x = floorf(x + transform.getTranslateX() + 0.5f);
+ y = floorf(y + transform.getTranslateY() + 0.5f);
+ fontRenderer.setFont(op.paint, SkMatrix::I());
+ fontRenderer.setTextureFiltering(false);
+ } else if (CC_UNLIKELY(transform.isPerspective())) {
+ fontRenderer.setFont(op.paint, SkMatrix::I());
+ fontRenderer.setTextureFiltering(true);
+ } else {
+ // We only pass a partial transform to the font renderer. That partial
+ // matrix defines how glyphs are rasterized. Typically we want glyphs
+ // to be rasterized at their final size on screen, which means the partial
+ // matrix needs to take the scale factor into account.
+ // When a partial matrix is used to transform glyphs during rasterization,
+ // the mesh is generated with the inverse transform (in the case of scale,
+ // the mesh is generated at 1.0 / scale for instance.) This allows us to
+ // apply the full transform matrix at draw time in the vertex shader.
+ // Applying the full matrix in the shader is the easiest way to handle
+ // rotation and perspective and allows us to always generated quads in the
+ // font renderer which greatly simplifies the code, clipping in particular.
+ float sx, sy;
+ transform.decomposeScale(sx, sy);
+ fontRenderer.setFont(op.paint, SkMatrix::MakeScale(
+ roundf(std::max(1.0f, sx)),
+ roundf(std::max(1.0f, sy))));
+ fontRenderer.setTextureFiltering(true);
+ }
+ Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
+
+ int alpha = PaintUtils::getAlphaDirect(op.paint) * state.alpha;
+ SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(op.paint);
+ TextDrawFunctor functor(&renderer, &state, renderClip,
+ x, y, pureTranslate, alpha, mode, op.paint);
+
+ bool forceFinish = (renderType == TextRenderType::Flush);
+ bool mustDirtyRenderTarget = renderer.offscreenRenderTarget();
+ const Rect* localOpClip = pureTranslate ? &state.computedState.clipRect : nullptr;
+ fontRenderer.renderPosText(op.paint, localOpClip,
+ (const char*) op.glyphs, op.glyphCount, x, y,
+ op.positions, mustDirtyRenderTarget ? &layerBounds : nullptr, &functor, forceFinish);
+
+ if (mustDirtyRenderTarget) {
+ if (!pureTranslate) {
+ transform.mapRect(layerBounds);
+ }
+ renderer.dirtyRenderTarget(layerBounds);
+ }
+}
+
+void BakedOpDispatcher::onMergedTextOps(BakedOpRenderer& renderer,
+ const MergedBakedOpList& opList) {
+ const Rect* clip = opList.clipSideFlags ? &opList.clip : nullptr;
+ for (size_t i = 0; i < opList.count; i++) {
+ const BakedOpState& state = *(opList.states[i]);
+ const TextOp& op = *(static_cast<const TextOp*>(state.op));
+ TextRenderType renderType = (i + 1 == opList.count)
+ ? TextRenderType::Flush : TextRenderType::Defer;
+ renderTextOp(renderer, op, state, clip, renderType);
+ }
+}
+
void BakedOpDispatcher::onRenderNodeOp(BakedOpRenderer&, const RenderNodeOp&, const BakedOpState&) {
LOG_ALWAYS_FATAL("unsupported operation");
}
-void BakedOpDispatcher::onBeginLayerOp(BakedOpRenderer& renderer, const BeginLayerOp& op, const BakedOpState& state) {
+void BakedOpDispatcher::onBeginLayerOp(BakedOpRenderer&, const BeginLayerOp&, const BakedOpState&) {
LOG_ALWAYS_FATAL("unsupported operation");
}
-void BakedOpDispatcher::onEndLayerOp(BakedOpRenderer& renderer, const EndLayerOp& op, const BakedOpState& state) {
+void BakedOpDispatcher::onEndLayerOp(BakedOpRenderer&, const EndLayerOp&, const BakedOpState&) {
LOG_ALWAYS_FATAL("unsupported operation");
}
+namespace VertexBufferRenderFlags {
+ enum {
+ Offset = 0x1,
+ ShadowInterp = 0x2,
+ };
+}
+
+static void renderVertexBuffer(BakedOpRenderer& renderer, const BakedOpState& state,
+ const VertexBuffer& vertexBuffer, float translateX, float translateY,
+ const SkPaint& paint, int vertexBufferRenderFlags) {
+ if (CC_LIKELY(vertexBuffer.getVertexCount())) {
+ bool shadowInterp = vertexBufferRenderFlags & VertexBufferRenderFlags::ShadowInterp;
+ const int transformFlags = TransformFlags::OffsetByFudgeFactor;
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshVertexBuffer(vertexBuffer, shadowInterp)
+ .setFillPaint(paint, state.alpha)
+ .setTransform(state.computedState.transform, transformFlags)
+ .setModelViewOffsetRect(translateX, translateY, vertexBuffer.getBounds())
+ .build();
+ renderer.renderGlop(state, glop);
+ }
+}
+
+static void renderConvexPath(BakedOpRenderer& renderer, const BakedOpState& state,
+ const SkPath& path, const SkPaint& paint) {
+ VertexBuffer vertexBuffer;
+ // TODO: try clipping large paths to viewport
+ PathTessellator::tessellatePath(path, &paint, state.computedState.transform, vertexBuffer);
+ renderVertexBuffer(renderer, state, vertexBuffer, 0.0f, 0.0f, paint, 0);
+}
+
+static void renderPathTexture(BakedOpRenderer& renderer, const BakedOpState& state,
+ PathTexture& texture, const RecordedOp& op) {
+ Rect dest(texture.width, texture.height);
+ dest.translate(texture.left + op.unmappedBounds.left - texture.offset,
+ texture.top + op.unmappedBounds.top - texture.offset);
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshTexturedUnitQuad(nullptr)
+ .setFillPathTexturePaint(texture, *(op.paint), state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewMapUnitToRect(dest)
+ .build();
+ renderer.renderGlop(state, glop);
+}
+
+SkRect getBoundsOfFill(const RecordedOp& op) {
+ SkRect bounds = op.unmappedBounds.toSkRect();
+ if (op.paint->getStyle() == SkPaint::kStrokeAndFill_Style) {
+ float outsetDistance = op.paint->getStrokeWidth() / 2;
+ bounds.outset(outsetDistance, outsetDistance);
+ }
+ return bounds;
+}
+
+void BakedOpDispatcher::onArcOp(BakedOpRenderer& renderer, const ArcOp& op, const BakedOpState& state) {
+ // TODO: support fills (accounting for concavity if useCenter && sweepAngle > 180)
+ if (op.paint->getStyle() != SkPaint::kStroke_Style
+ || op.paint->getPathEffect() != nullptr
+ || op.useCenter) {
+ PathTexture* texture = renderer.caches().pathCache.getArc(
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(),
+ op.startAngle, op.sweepAngle, op.useCenter, op.paint);
+ const AutoTexture holder(texture);
+ if (CC_LIKELY(holder.texture)) {
+ renderPathTexture(renderer, state, *texture, op);
+ }
+ } else {
+ SkRect rect = getBoundsOfFill(op);
+ SkPath path;
+ if (op.useCenter) {
+ path.moveTo(rect.centerX(), rect.centerY());
+ }
+ path.arcTo(rect, op.startAngle, op.sweepAngle, !op.useCenter);
+ if (op.useCenter) {
+ path.close();
+ }
+ renderConvexPath(renderer, state, path, *(op.paint));
+ }
+}
+
void BakedOpDispatcher::onBitmapOp(BakedOpRenderer& renderer, const BitmapOp& op, const BakedOpState& state) {
- renderer.caches().textureState().activateTexture(0); // TODO: should this be automatic, and/or elsewhere?
Texture* texture = renderer.getTexture(op.bitmap);
if (!texture) return;
const AutoTexture autoCleanup(texture);
@@ -62,44 +411,230 @@
renderer.renderGlop(state, glop);
}
-void BakedOpDispatcher::onLinesOp(BakedOpRenderer& renderer, const LinesOp& op, const BakedOpState& state) {
- LOG_ALWAYS_FATAL("todo");
-}
+void BakedOpDispatcher::onBitmapMeshOp(BakedOpRenderer& renderer, const BitmapMeshOp& op, const BakedOpState& state) {
+ const static UvMapper defaultUvMapper;
+ const uint32_t elementCount = op.meshWidth * op.meshHeight * 6;
-void BakedOpDispatcher::onRectOp(BakedOpRenderer& renderer, const RectOp& op, const BakedOpState& state) {
+ std::unique_ptr<ColorTextureVertex[]> mesh(new ColorTextureVertex[elementCount]);
+ ColorTextureVertex* vertex = &mesh[0];
+
+ const int* colors = op.colors;
+ std::unique_ptr<int[]> tempColors;
+ if (!colors) {
+ uint32_t colorsCount = (op.meshWidth + 1) * (op.meshHeight + 1);
+ tempColors.reset(new int[colorsCount]);
+ memset(tempColors.get(), 0xff, colorsCount * sizeof(int));
+ colors = tempColors.get();
+ }
+
+ Texture* texture = renderer.renderState().assetAtlas().getEntryTexture(op.bitmap->pixelRef());
+ const UvMapper& mapper(texture && texture->uvMapper ? *texture->uvMapper : defaultUvMapper);
+
+ for (int32_t y = 0; y < op.meshHeight; y++) {
+ for (int32_t x = 0; x < op.meshWidth; x++) {
+ uint32_t i = (y * (op.meshWidth + 1) + x) * 2;
+
+ float u1 = float(x) / op.meshWidth;
+ float u2 = float(x + 1) / op.meshWidth;
+ float v1 = float(y) / op.meshHeight;
+ float v2 = float(y + 1) / op.meshHeight;
+
+ mapper.map(u1, v1, u2, v2);
+
+ int ax = i + (op.meshWidth + 1) * 2;
+ int ay = ax + 1;
+ int bx = i;
+ int by = bx + 1;
+ int cx = i + 2;
+ int cy = cx + 1;
+ int dx = i + (op.meshWidth + 1) * 2 + 2;
+ int dy = dx + 1;
+
+ const float* vertices = op.vertices;
+ ColorTextureVertex::set(vertex++, vertices[dx], vertices[dy], u2, v2, colors[dx / 2]);
+ ColorTextureVertex::set(vertex++, vertices[ax], vertices[ay], u1, v2, colors[ax / 2]);
+ ColorTextureVertex::set(vertex++, vertices[bx], vertices[by], u1, v1, colors[bx / 2]);
+
+ ColorTextureVertex::set(vertex++, vertices[dx], vertices[dy], u2, v2, colors[dx / 2]);
+ ColorTextureVertex::set(vertex++, vertices[bx], vertices[by], u1, v1, colors[bx / 2]);
+ ColorTextureVertex::set(vertex++, vertices[cx], vertices[cy], u2, v1, colors[cx / 2]);
+ }
+ }
+
+ if (!texture) {
+ texture = renderer.caches().textureCache.get(op.bitmap);
+ if (!texture) {
+ return;
+ }
+ }
+ const AutoTexture autoCleanup(texture);
+
+ /*
+ * TODO: handle alpha_8 textures correctly by applying paint color, but *not*
+ * shader in that case to mimic the behavior in SkiaCanvas::drawBitmapMesh.
+ */
+ const int textureFillFlags = TextureFillFlags::None;
Glop glop;
GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
.setRoundRectClipState(state.roundRectClipState)
- .setMeshUnitQuad()
- .setFillPaint(*op.paint, state.alpha)
- .setTransform(state.computedState.transform, TransformFlags::None)
- .setModelViewMapUnitToRect(op.unmappedBounds)
+ .setMeshColoredTexturedMesh(mesh.get(), elementCount)
+ .setFillTexturePaint(*texture, textureFillFlags, op.paint, state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewOffsetRect(0, 0, op.unmappedBounds)
.build();
renderer.renderGlop(state, glop);
}
-namespace VertexBufferRenderFlags {
- enum {
- Offset = 0x1,
- ShadowInterp = 0x2,
- };
+void BakedOpDispatcher::onBitmapRectOp(BakedOpRenderer& renderer, const BitmapRectOp& op, const BakedOpState& state) {
+ Texture* texture = renderer.getTexture(op.bitmap);
+ if (!texture) return;
+ const AutoTexture autoCleanup(texture);
+
+ Rect uv(std::max(0.0f, op.src.left / texture->width),
+ std::max(0.0f, op.src.top / texture->height),
+ std::min(1.0f, op.src.right / texture->width),
+ std::min(1.0f, op.src.bottom / texture->height));
+
+ const int textureFillFlags = (op.bitmap->colorType() == kAlpha_8_SkColorType)
+ ? TextureFillFlags::IsAlphaMaskTexture : TextureFillFlags::None;
+ const bool tryToSnap = MathUtils::areEqual(op.src.getWidth(), op.unmappedBounds.getWidth())
+ && MathUtils::areEqual(op.src.getHeight(), op.unmappedBounds.getHeight());
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshTexturedUvQuad(texture->uvMapper, uv)
+ .setFillTexturePaint(*texture, textureFillFlags, op.paint, state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewMapUnitToRectOptionalSnap(tryToSnap, op.unmappedBounds)
+ .build();
+ renderer.renderGlop(state, glop);
}
-static void renderVertexBuffer(BakedOpRenderer& renderer, const BakedOpState& state,
- const VertexBuffer& vertexBuffer, float translateX, float translateY,
- SkPaint& paint, int vertexBufferRenderFlags) {
- if (CC_LIKELY(vertexBuffer.getVertexCount())) {
- bool shadowInterp = vertexBufferRenderFlags & VertexBufferRenderFlags::ShadowInterp;
- const int transformFlags = TransformFlags::OffsetByFudgeFactor;
- Glop glop;
- GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
- .setRoundRectClipState(state.roundRectClipState)
- .setMeshVertexBuffer(vertexBuffer, shadowInterp)
- .setFillPaint(paint, state.alpha)
- .setTransform(state.computedState.transform, transformFlags)
- .setModelViewOffsetRect(translateX, translateY, vertexBuffer.getBounds())
- .build();
- renderer.renderGlop(state, glop);
+void BakedOpDispatcher::onLinesOp(BakedOpRenderer& renderer, const LinesOp& op, const BakedOpState& state) {
+ VertexBuffer buffer;
+ PathTessellator::tessellateLines(op.points, op.floatCount, op.paint,
+ state.computedState.transform, buffer);
+ int displayFlags = op.paint->isAntiAlias() ? 0 : VertexBufferRenderFlags::Offset;
+ renderVertexBuffer(renderer, state, buffer, 0, 0, *(op.paint), displayFlags);
+}
+
+void BakedOpDispatcher::onOvalOp(BakedOpRenderer& renderer, const OvalOp& op, const BakedOpState& state) {
+ if (op.paint->getPathEffect() != nullptr) {
+ PathTexture* texture = renderer.caches().pathCache.getOval(
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.paint);
+ const AutoTexture holder(texture);
+ if (CC_LIKELY(holder.texture)) {
+ renderPathTexture(renderer, state, *texture, op);
+ }
+ } else {
+ SkPath path;
+ SkRect rect = getBoundsOfFill(op);
+ path.addOval(rect);
+ renderConvexPath(renderer, state, path, *(op.paint));
+ }
+}
+
+void BakedOpDispatcher::onPatchOp(BakedOpRenderer& renderer, const PatchOp& op, const BakedOpState& state) {
+ // 9 patches are built for stretching - always filter
+ int textureFillFlags = TextureFillFlags::ForceFilter;
+ if (op.bitmap->colorType() == kAlpha_8_SkColorType) {
+ textureFillFlags |= TextureFillFlags::IsAlphaMaskTexture;
+ }
+
+ // TODO: avoid redoing the below work each frame:
+ AssetAtlas::Entry* entry = renderer.renderState().assetAtlas().getEntry(op.bitmap->pixelRef());
+ const Patch* mesh = renderer.caches().patchCache.get(
+ entry, op.bitmap->width(), op.bitmap->height(),
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.patch);
+
+ Texture* texture = entry ? entry->texture : renderer.caches().textureCache.get(op.bitmap);
+ if (!texture) return;
+ const AutoTexture autoCleanup(texture);
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshPatchQuads(*mesh)
+ .setMeshTexturedUnitQuad(texture->uvMapper)
+ .setFillTexturePaint(*texture, textureFillFlags, op.paint, state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewOffsetRectSnap(op.unmappedBounds.left, op.unmappedBounds.top,
+ Rect(op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight()))
+ .build();
+ renderer.renderGlop(state, glop);
+}
+
+void BakedOpDispatcher::onPathOp(BakedOpRenderer& renderer, const PathOp& op, const BakedOpState& state) {
+ PathTexture* texture = renderer.caches().pathCache.get(op.path, op.paint);
+ const AutoTexture holder(texture);
+ if (CC_LIKELY(holder.texture)) {
+ renderPathTexture(renderer, state, *texture, op);
+ }
+}
+
+void BakedOpDispatcher::onPointsOp(BakedOpRenderer& renderer, const PointsOp& op, const BakedOpState& state) {
+ VertexBuffer buffer;
+ PathTessellator::tessellatePoints(op.points, op.floatCount, op.paint,
+ state.computedState.transform, buffer);
+ int displayFlags = op.paint->isAntiAlias() ? 0 : VertexBufferRenderFlags::Offset;
+ renderVertexBuffer(renderer, state, buffer, 0, 0, *(op.paint), displayFlags);
+}
+
+// See SkPaintDefaults.h
+#define SkPaintDefaults_MiterLimit SkIntToScalar(4)
+
+void BakedOpDispatcher::onRectOp(BakedOpRenderer& renderer, const RectOp& op, const BakedOpState& state) {
+ if (op.paint->getStyle() != SkPaint::kFill_Style) {
+ // only fill + default miter is supported by drawConvexPath, since others must handle joins
+ static_assert(SkPaintDefaults_MiterLimit == 4.0f, "Miter limit has changed");
+ if (CC_UNLIKELY(op.paint->getPathEffect() != nullptr
+ || op.paint->getStrokeJoin() != SkPaint::kMiter_Join
+ || op.paint->getStrokeMiter() != SkPaintDefaults_MiterLimit)) {
+ PathTexture* texture = renderer.caches().pathCache.getRect(
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.paint);
+ const AutoTexture holder(texture);
+ if (CC_LIKELY(holder.texture)) {
+ renderPathTexture(renderer, state, *texture, op);
+ }
+ } else {
+ SkPath path;
+ path.addRect(getBoundsOfFill(op));
+ renderConvexPath(renderer, state, path, *(op.paint));
+ }
+ } else {
+ if (op.paint->isAntiAlias() && !state.computedState.transform.isSimple()) {
+ SkPath path;
+ path.addRect(op.unmappedBounds.toSkRect());
+ renderConvexPath(renderer, state, path, *(op.paint));
+ } else {
+ // render simple unit quad, no tessellation required
+ Glop glop;
+ GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
+ .setRoundRectClipState(state.roundRectClipState)
+ .setMeshUnitQuad()
+ .setFillPaint(*op.paint, state.alpha)
+ .setTransform(state.computedState.transform, TransformFlags::None)
+ .setModelViewMapUnitToRect(op.unmappedBounds)
+ .build();
+ renderer.renderGlop(state, glop);
+ }
+ }
+}
+
+void BakedOpDispatcher::onRoundRectOp(BakedOpRenderer& renderer, const RoundRectOp& op, const BakedOpState& state) {
+ if (op.paint->getPathEffect() != nullptr) {
+ PathTexture* texture = renderer.caches().pathCache.getRoundRect(
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(),
+ op.rx, op.ry, op.paint);
+ const AutoTexture holder(texture);
+ if (CC_LIKELY(holder.texture)) {
+ renderPathTexture(renderer, state, *texture, op);
+ }
+ } else {
+ const VertexBuffer* buffer = renderer.caches().tessellationCache.getRoundRect(
+ state.computedState.transform, *(op.paint),
+ op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.rx, op.ry);
+ renderVertexBuffer(renderer, state, *buffer,
+ op.unmappedBounds.left, op.unmappedBounds.top, *(op.paint), 0);
}
}
@@ -153,96 +688,14 @@
renderer.renderGlop(state, glop);
}
-static void renderTextShadow(BakedOpRenderer& renderer, FontRenderer& fontRenderer,
- const TextOp& op, const BakedOpState& state) {
- renderer.caches().textureState().activateTexture(0);
-
- PaintUtils::TextShadow textShadow;
- if (!PaintUtils::getTextShadow(op.paint, &textShadow)) {
- LOG_ALWAYS_FATAL("failed to query shadow attributes");
- }
-
- renderer.caches().dropShadowCache.setFontRenderer(fontRenderer);
- ShadowTexture* texture = renderer.caches().dropShadowCache.get(
- op.paint, (const char*) op.glyphs,
- op.glyphCount, textShadow.radius, op.positions);
- // If the drop shadow exceeds the max texture size or couldn't be
- // allocated, skip drawing
- if (!texture) return;
- const AutoTexture autoCleanup(texture);
-
- const float sx = op.x - texture->left + textShadow.dx;
- const float sy = op.y - texture->top + textShadow.dy;
-
- Glop glop;
- GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
- .setRoundRectClipState(state.roundRectClipState)
- .setMeshTexturedUnitQuad(nullptr)
- .setFillShadowTexturePaint(*texture, textShadow.color, *op.paint, state.alpha)
- .setTransform(state.computedState.transform, TransformFlags::None)
- .setModelViewMapUnitToRect(Rect(sx, sy, sx + texture->width, sy + texture->height))
- .build();
- renderer.renderGlop(state, glop);
-}
-
void BakedOpDispatcher::onTextOp(BakedOpRenderer& renderer, const TextOp& op, const BakedOpState& state) {
- FontRenderer& fontRenderer = renderer.caches().fontRenderer.getFontRenderer();
-
- if (CC_UNLIKELY(PaintUtils::hasTextShadow(op.paint))) {
- fontRenderer.setFont(op.paint, SkMatrix::I());
- renderTextShadow(renderer, fontRenderer, op, state);
- }
-
- float x = op.x;
- float y = op.y;
- const Matrix4& transform = state.computedState.transform;
- const bool pureTranslate = transform.isPureTranslate();
- if (CC_LIKELY(pureTranslate)) {
- x = floorf(x + transform.getTranslateX() + 0.5f);
- y = floorf(y + transform.getTranslateY() + 0.5f);
- fontRenderer.setFont(op.paint, SkMatrix::I());
- fontRenderer.setTextureFiltering(false);
- } else if (CC_UNLIKELY(transform.isPerspective())) {
- fontRenderer.setFont(op.paint, SkMatrix::I());
- fontRenderer.setTextureFiltering(true);
- } else {
- // We only pass a partial transform to the font renderer. That partial
- // matrix defines how glyphs are rasterized. Typically we want glyphs
- // to be rasterized at their final size on screen, which means the partial
- // matrix needs to take the scale factor into account.
- // When a partial matrix is used to transform glyphs during rasterization,
- // the mesh is generated with the inverse transform (in the case of scale,
- // the mesh is generated at 1.0 / scale for instance.) This allows us to
- // apply the full transform matrix at draw time in the vertex shader.
- // Applying the full matrix in the shader is the easiest way to handle
- // rotation and perspective and allows us to always generated quads in the
- // font renderer which greatly simplifies the code, clipping in particular.
- float sx, sy;
- transform.decomposeScale(sx, sy);
- fontRenderer.setFont(op.paint, SkMatrix::MakeScale(
- roundf(std::max(1.0f, sx)),
- roundf(std::max(1.0f, sy))));
- fontRenderer.setTextureFiltering(true);
- }
-
- // TODO: Implement better clipping for scaled/rotated text
- const Rect* clip = !pureTranslate ? nullptr : &state.computedState.clipRect;
- Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
-
- int alpha = PaintUtils::getAlphaDirect(op.paint) * state.alpha;
- SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(op.paint);
- TextDrawFunctor functor(&renderer, &state, x, y, pureTranslate, alpha, mode, op.paint);
-
- bool hasActiveLayer = false; // TODO
- fontRenderer.renderPosText(op.paint, clip, (const char*) op.glyphs, op.glyphCount, x, y,
- op.positions, hasActiveLayer ? &layerBounds : nullptr, &functor, true); // TODO: merging
+ const Rect* clip = state.computedState.clipSideFlags ? &state.computedState.clipRect : nullptr;
+ renderTextOp(renderer, op, state, clip, TextRenderType::Flush);
}
void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) {
OffscreenBuffer* buffer = *op.layerHandle;
- // TODO: extend this to handle HW layers & paint properties which
- // reside in node.properties().layerProperties()
float layerAlpha = op.alpha * state.alpha;
Glop glop;
GlopBuilder(renderer.renderState(), renderer.caches(), &glop)
diff --git a/libs/hwui/BakedOpDispatcher.h b/libs/hwui/BakedOpDispatcher.h
index caf14bf..ed34ada 100644
--- a/libs/hwui/BakedOpDispatcher.h
+++ b/libs/hwui/BakedOpDispatcher.h
@@ -27,15 +27,24 @@
* Provides all "onBitmapOp(...)" style static methods for every op type, which convert the
* RecordedOps and their state to Glops, and renders them with the provided BakedOpRenderer.
*
- * This dispatcher is separate from the renderer so that the dispatcher / renderer interaction is
- * minimal through public BakedOpRenderer APIs.
+ * onXXXOp methods must either render directly with the renderer, or call a static renderYYY
+ * method to render content. There should never be draw content rejection in BakedOpDispatcher -
+ * it must happen at a higher level (except in error-ish cases, like texture-too-big).
*/
class BakedOpDispatcher {
public:
+ // Declares all "onMergedBitmapOps(...)" style methods for mergeable op types
+#define X(Type) \
+ static void onMerged##Type##s(BakedOpRenderer& renderer, const MergedBakedOpList& opList);
+ MAP_MERGED_OPS(X)
+#undef X
+
// Declares all "onBitmapOp(...)" style methods for every op type
-#define DISPATCH_METHOD(Type) \
+#define X(Type) \
static void on##Type(BakedOpRenderer& renderer, const Type& op, const BakedOpState& state);
- MAP_OPS(DISPATCH_METHOD);
+ MAP_OPS(X)
+#undef X
+
};
}; // namespace uirenderer
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index 6cdc320..93a9406 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -121,30 +121,35 @@
}
Texture* BakedOpRenderer::getTexture(const SkBitmap* bitmap) {
- Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap);
+ Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap->pixelRef());
if (!texture) {
return mCaches.textureCache.get(bitmap);
}
return texture;
}
-void BakedOpRenderer::renderGlop(const BakedOpState& state, const Glop& glop) {
- bool useScissor = state.computedState.clipSideFlags != OpClipSideFlags::None;
- mRenderState.scissor().setEnabled(useScissor);
- if (useScissor) {
- const Rect& clip = state.computedState.clipRect;
- mRenderState.scissor().set(clip.left, mRenderTarget.viewportHeight - clip.bottom,
- clip.getWidth(), clip.getHeight());
+void BakedOpRenderer::renderGlop(const Rect* dirtyBounds, const Rect* clip, const Glop& glop) {
+ mRenderState.scissor().setEnabled(clip != nullptr);
+ if (clip) {
+ mRenderState.scissor().set(clip->left, mRenderTarget.viewportHeight - clip->bottom,
+ clip->getWidth(), clip->getHeight());
}
- if (mRenderTarget.offscreenBuffer) { // TODO: not with multi-draw
+ if (dirtyBounds && mRenderTarget.offscreenBuffer) {
// register layer damage to draw-back region
- const Rect& uiDirty = state.computedState.clippedBounds;
- android::Rect dirty(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom);
+ android::Rect dirty(dirtyBounds->left, dirtyBounds->top,
+ dirtyBounds->right, dirtyBounds->bottom);
mRenderTarget.offscreenBuffer->region.orSelf(dirty);
}
mRenderState.render(glop, mRenderTarget.orthoMatrix);
if (!mRenderTarget.frameBufferId) mHasDrawn = true;
}
+void BakedOpRenderer::dirtyRenderTarget(const Rect& uiDirty) {
+ if (mRenderTarget.offscreenBuffer) {
+ android::Rect dirty(uiDirty.left, uiDirty.top, uiDirty.right, uiDirty.bottom);
+ mRenderTarget.offscreenBuffer->region.orSelf(dirty);
+ }
+}
+
} // namespace uirenderer
} // namespace android
diff --git a/libs/hwui/BakedOpRenderer.h b/libs/hwui/BakedOpRenderer.h
index 62d1838..d7600db 100644
--- a/libs/hwui/BakedOpRenderer.h
+++ b/libs/hwui/BakedOpRenderer.h
@@ -67,7 +67,16 @@
Texture* getTexture(const SkBitmap* bitmap);
const LightInfo& getLightInfo() { return mLightInfo; }
- void renderGlop(const BakedOpState& state, const Glop& glop);
+ void renderGlop(const BakedOpState& state, const Glop& glop) {
+ bool useScissor = state.computedState.clipSideFlags != OpClipSideFlags::None;
+ renderGlop(&state.computedState.clippedBounds,
+ useScissor ? &state.computedState.clipRect : nullptr,
+ glop);
+ }
+
+ void renderGlop(const Rect* dirtyBounds, const Rect* clip, const Glop& glop);
+ bool offscreenRenderTarget() { return mRenderTarget.offscreenBuffer != nullptr; }
+ void dirtyRenderTarget(const Rect& dirtyRect);
bool didDraw() { return mHasDrawn; }
private:
void setViewport(uint32_t width, uint32_t height);
diff --git a/libs/hwui/BakedOpState.h b/libs/hwui/BakedOpState.h
index 9a40c3b..9c836a0 100644
--- a/libs/hwui/BakedOpState.h
+++ b/libs/hwui/BakedOpState.h
@@ -38,12 +38,22 @@
}
/**
+ * Holds a list of BakedOpStates of ops that can be drawn together
+ */
+struct MergedBakedOpList {
+ const BakedOpState*const* states;
+ size_t count;
+ int clipSideFlags;
+ Rect clip;
+};
+
+/**
* Holds the resolved clip, transform, and bounds of a recordedOp, when replayed with a snapshot
*/
class ResolvedRenderState {
public:
// TODO: remove the mapRects/matrix multiply when snapshot & recorded transforms are translates
- ResolvedRenderState(const Snapshot& snapshot, const RecordedOp& recordedOp) {
+ ResolvedRenderState(const Snapshot& snapshot, const RecordedOp& recordedOp, bool expandForStroke) {
/* TODO: benchmark a fast path for translate-only matrices, such as:
if (CC_LIKELY(snapshot.transform->getType() == Matrix4::kTypeTranslate
&& recordedOp.localMatrix.getType() == Matrix4::kTypeTranslate)) {
@@ -73,7 +83,17 @@
// resolvedClippedBounds = intersect(resolvedMatrix * opBounds, resolvedClipRect)
clippedBounds = recordedOp.unmappedBounds;
+ if (CC_UNLIKELY(expandForStroke)) {
+ // account for non-hairline stroke
+ clippedBounds.outset(recordedOp.paint->getStrokeWidth() * 0.5f);
+ }
transform.mapRect(clippedBounds);
+ if (CC_UNLIKELY(expandForStroke
+ && (!transform.isPureTranslate() || recordedOp.paint->getStrokeWidth() < 1.0f))) {
+ // account for hairline stroke when stroke may be < 1 scaled pixel
+ // Non translate || strokeWidth < 1 is conservative, but will cover all cases
+ clippedBounds.outset(0.5f);
+ }
if (clipRect.left > clippedBounds.left) clipSideFlags |= OpClipSideFlags::Left;
if (clipRect.top > clippedBounds.top) clipSideFlags |= OpClipSideFlags::Top;
@@ -119,13 +139,36 @@
public:
static BakedOpState* tryConstruct(LinearAllocator& allocator,
const Snapshot& snapshot, const RecordedOp& recordedOp) {
- BakedOpState* bakedOp = new (allocator) BakedOpState(snapshot, recordedOp);
- if (bakedOp->computedState.clippedBounds.isEmpty()) {
+ BakedOpState* bakedState = new (allocator) BakedOpState(snapshot, recordedOp, false);
+ if (bakedState->computedState.clippedBounds.isEmpty()) {
// bounds are empty, so op is rejected
- allocator.rewindIfLastAlloc(bakedOp);
+ allocator.rewindIfLastAlloc(bakedState);
return nullptr;
}
- return bakedOp;
+ return bakedState;
+ }
+
+ enum class StrokeBehavior {
+ // stroking is forced, regardless of style on paint
+ Forced,
+ // stroking is defined by style on paint
+ StyleDefined,
+ };
+
+ static BakedOpState* tryStrokeableOpConstruct(LinearAllocator& allocator,
+ const Snapshot& snapshot, const RecordedOp& recordedOp, StrokeBehavior strokeBehavior) {
+ bool expandForStroke = (strokeBehavior == StrokeBehavior::StyleDefined)
+ ? (recordedOp.paint && recordedOp.paint->getStyle() != SkPaint::kFill_Style)
+ : true;
+
+ BakedOpState* bakedState = new (allocator) BakedOpState(
+ snapshot, recordedOp, expandForStroke);
+ if (bakedState->computedState.clippedBounds.isEmpty()) {
+ // bounds are empty, so op is rejected
+ allocator.rewindIfLastAlloc(bakedState);
+ return nullptr;
+ }
+ return bakedState;
}
static BakedOpState* tryShadowOpConstruct(LinearAllocator& allocator,
@@ -150,8 +193,8 @@
const RecordedOp* op;
private:
- BakedOpState(const Snapshot& snapshot, const RecordedOp& recordedOp)
- : computedState(snapshot, recordedOp)
+ BakedOpState(const Snapshot& snapshot, const RecordedOp& recordedOp, bool expandForStroke)
+ : computedState(snapshot, recordedOp, expandForStroke)
, alpha(snapshot.alpha)
, roundRectClipState(snapshot.roundRectClipState)
, projectionPathMask(snapshot.projectionPathMask)
diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h
index b585a27..0643a54 100644
--- a/libs/hwui/Canvas.h
+++ b/libs/hwui/Canvas.h
@@ -113,10 +113,10 @@
// Geometry
virtual void drawPoint(float x, float y, const SkPaint& paint) = 0;
- virtual void drawPoints(const float* points, int count, const SkPaint& paint) = 0;
+ virtual void drawPoints(const float* points, int floatCount, const SkPaint& paint) = 0;
virtual void drawLine(float startX, float startY, float stopX, float stopY,
const SkPaint& paint) = 0;
- virtual void drawLines(const float* points, int count, const SkPaint& paint) = 0;
+ virtual void drawLines(const float* points, int floatCount, const SkPaint& paint) = 0;
virtual void drawRect(float left, float top, float right, float bottom,
const SkPaint& paint) = 0;
virtual void drawRegion(const SkRegion& region, const SkPaint& paint) = 0;
diff --git a/libs/hwui/ClipArea.cpp b/libs/hwui/ClipArea.cpp
index a9d1e42..fd6f0b5 100644
--- a/libs/hwui/ClipArea.cpp
+++ b/libs/hwui/ClipArea.cpp
@@ -26,7 +26,7 @@
static void handlePoint(Rect& transformedBounds, const Matrix4& transform, float x, float y) {
Vertex v = {x, y};
transform.mapPoint(v.x, v.y);
- transformedBounds.expandToCoverVertex(v.x, v.y);
+ transformedBounds.expandToCover(v.x, v.y);
}
Rect transformAndCalculateBounds(const Rect& r, const Matrix4& transform) {
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index bd11d0a..92217edc 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -612,7 +612,7 @@
AssetAtlas::Entry* getAtlasEntry(OpenGLRenderer& renderer) {
if (!mEntryValid) {
mEntryValid = true;
- mEntry = renderer.renderState().assetAtlas().getEntry(mBitmap);
+ mEntry = renderer.renderState().assetAtlas().getEntry(mBitmap->pixelRef());
}
return mEntry;
}
@@ -777,7 +777,7 @@
AssetAtlas::Entry* getAtlasEntry(OpenGLRenderer& renderer) {
if (!mEntryValid) {
mEntryValid = true;
- mEntry = renderer.renderState().assetAtlas().getEntry(mBitmap);
+ mEntry = renderer.renderState().assetAtlas().getEntry(mBitmap->pixelRef());
}
return mEntry;
}
@@ -1383,7 +1383,10 @@
friend class TestUtils;
public:
DrawRenderNodeOp(RenderNode* renderNode, const mat4& transformFromParent, bool clipIsSimple)
- : DrawBoundedOp(0, 0, renderNode->getWidth(), renderNode->getHeight(), nullptr)
+ : DrawBoundedOp(0, 0,
+ renderNode->stagingProperties().getWidth(),
+ renderNode->stagingProperties().getHeight(),
+ nullptr)
, renderNode(renderNode)
, mRecordedWithPotentialStencilClip(!clipIsSimple || !transformFromParent.isSimple())
, localMatrix(transformFromParent)
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 47654f4..8acdb62 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -73,9 +73,10 @@
.setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount())
.setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, bakedState->alpha)
.setTransform(bakedState->computedState.transform, transformFlags)
- .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0))
+ .setModelViewIdentityEmptyBounds()
.build();
- renderer->renderGlop(*bakedState, glop);
+ // Note: don't pass dirty bounds here, so user must manage passing dirty bounds to renderer
+ renderer->renderGlop(nullptr, clip, glop);
#else
GlopBuilder(renderer->mRenderState, renderer->mCaches, &glop)
.setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState)
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index 87cfe7f..ff4dc4a 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -57,6 +57,7 @@
#if HWUI_NEW_OPS
BakedOpRenderer* renderer,
const BakedOpState* bakedState,
+ const Rect* clip,
#else
OpenGLRenderer* renderer,
#endif
@@ -65,6 +66,7 @@
: renderer(renderer)
#if HWUI_NEW_OPS
, bakedState(bakedState)
+ , clip(clip)
#endif
, x(x)
, y(y)
@@ -79,6 +81,7 @@
#if HWUI_NEW_OPS
BakedOpRenderer* renderer;
const BakedOpState* bakedState;
+ const Rect* clip;
#else
OpenGLRenderer* renderer;
#endif
diff --git a/libs/hwui/FrameInfoVisualizer.cpp b/libs/hwui/FrameInfoVisualizer.cpp
index b416615..b7dd3b7 100644
--- a/libs/hwui/FrameInfoVisualizer.cpp
+++ b/libs/hwui/FrameInfoVisualizer.cpp
@@ -16,6 +16,7 @@
#include "FrameInfoVisualizer.h"
#include "OpenGLRenderer.h"
+#include "utils/Color.h"
#include <cutils/compiler.h>
#include <array>
@@ -27,19 +28,19 @@
#define PROFILE_DRAW_THRESHOLD_STROKE_WIDTH 2
#define PROFILE_DRAW_DP_PER_MS 7
+namespace android {
+namespace uirenderer {
+
// Must be NUM_ELEMENTS in size
-static const SkColor THRESHOLD_COLOR = 0xff5faa4d;
-static const SkColor BAR_FAST_ALPHA = 0x8F000000;
-static const SkColor BAR_JANKY_ALPHA = 0xDF000000;
+static const SkColor THRESHOLD_COLOR = Color::Green_500;
+static const SkColor BAR_FAST_MASK = 0x8FFFFFFF;
+static const SkColor BAR_JANKY_MASK = 0xDFFFFFFF;
// We could get this from TimeLord and use the actual frame interval, but
// this is good enough
#define FRAME_THRESHOLD 16
#define FRAME_THRESHOLD_NS 16000000
-namespace android {
-namespace uirenderer {
-
struct BarSegment {
FrameInfoIndex start;
FrameInfoIndex end;
@@ -47,13 +48,13 @@
};
static const std::array<BarSegment,7> Bar {{
- { FrameInfoIndex::IntendedVsync, FrameInfoIndex::HandleInputStart, 0x00796B },
- { FrameInfoIndex::HandleInputStart, FrameInfoIndex::PerformTraversalsStart, 0x388E3C },
- { FrameInfoIndex::PerformTraversalsStart, FrameInfoIndex::DrawStart, 0x689F38},
- { FrameInfoIndex::DrawStart, FrameInfoIndex::SyncStart, 0x2196F3},
- { FrameInfoIndex::SyncStart, FrameInfoIndex::IssueDrawCommandsStart, 0x4FC3F7},
- { FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers, 0xF44336},
- { FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted, 0xFF9800},
+ { FrameInfoIndex::IntendedVsync, FrameInfoIndex::HandleInputStart, Color::Teal_700 },
+ { FrameInfoIndex::HandleInputStart, FrameInfoIndex::PerformTraversalsStart, Color::Green_700 },
+ { FrameInfoIndex::PerformTraversalsStart, FrameInfoIndex::DrawStart, Color::LightGreen_700 },
+ { FrameInfoIndex::DrawStart, FrameInfoIndex::SyncStart, Color::Blue_500 },
+ { FrameInfoIndex::SyncStart, FrameInfoIndex::IssueDrawCommandsStart, Color::LightBlue_300 },
+ { FrameInfoIndex::IssueDrawCommandsStart, FrameInfoIndex::SwapBuffers, Color::Red_500},
+ { FrameInfoIndex::SwapBuffers, FrameInfoIndex::FrameCompleted, Color::Orange_500},
}};
static int dpToPx(int dp, float density) {
@@ -197,9 +198,9 @@
SkPaint paint;
for (size_t i = 0; i < Bar.size(); i++) {
nextBarSegment(Bar[i].start, Bar[i].end);
- paint.setColor(Bar[i].color | BAR_FAST_ALPHA);
+ paint.setColor(Bar[i].color & BAR_FAST_MASK);
canvas->drawRects(mFastRects.get(), mNumFastRects * 4, &paint);
- paint.setColor(Bar[i].color | BAR_JANKY_ALPHA);
+ paint.setColor(Bar[i].color & BAR_JANKY_MASK);
canvas->drawRects(mJankyRects.get(), mNumJankyRects * 4, &paint);
}
}
diff --git a/libs/hwui/Glop.h b/libs/hwui/Glop.h
index 4785ea4..bcf819e 100644
--- a/libs/hwui/Glop.h
+++ b/libs/hwui/Glop.h
@@ -64,7 +64,7 @@
// Canvas transform isn't applied to the mesh at draw time,
//since it's already built in.
- MeshIgnoresCanvasTransform = 1 << 1,
+ MeshIgnoresCanvasTransform = 1 << 1, // TODO: remove
};
};
diff --git a/libs/hwui/GlopBuilder.h b/libs/hwui/GlopBuilder.h
index 6270dcb..6e5797d 100644
--- a/libs/hwui/GlopBuilder.h
+++ b/libs/hwui/GlopBuilder.h
@@ -53,7 +53,7 @@
GlopBuilder& setMeshTexturedUvQuad(const UvMapper* uvMapper, const Rect uvs);
GlopBuilder& setMeshVertexBuffer(const VertexBuffer& vertexBuffer, bool shadowInterp);
GlopBuilder& setMeshIndexedQuads(Vertex* vertexData, int quadCount);
- GlopBuilder& setMeshTexturedMesh(TextureVertex* vertexData, int elementCount); // TODO: use indexed quads
+ GlopBuilder& setMeshTexturedMesh(TextureVertex* vertexData, int elementCount); // TODO: delete
GlopBuilder& setMeshColoredTexturedMesh(ColorTextureVertex* vertexData, int elementCount); // TODO: use indexed quads
GlopBuilder& setMeshTexturedIndexedQuads(TextureVertex* vertexData, int elementCount); // TODO: take quadCount
GlopBuilder& setMeshPatchQuads(const Patch& patch);
@@ -95,6 +95,10 @@
return setModelViewOffsetRect(offsetX, offsetY, source);
}
}
+ GlopBuilder& setModelViewIdentityEmptyBounds() {
+ // pass empty rect since not needed for damage / snap
+ return setModelViewOffsetRect(0, 0, Rect());
+ }
GlopBuilder& setRoundRectClipState(const RoundRectClipState* roundRectClipState);
diff --git a/libs/hwui/OpReorderer.cpp b/libs/hwui/OpReorderer.cpp
index 9cbd9c2d..b936e6d5 100644
--- a/libs/hwui/OpReorderer.cpp
+++ b/libs/hwui/OpReorderer.cpp
@@ -202,6 +202,9 @@
if (newClipSideFlags & OpClipSideFlags::Bottom) mClipRect.bottom = opClip.bottom;
}
+ bool getClipSideFlags() const { return mClipSideFlags; }
+ const Rect& getClipRect() const { return mClipRect; }
+
private:
int mClipSideFlags = 0;
Rect mClipRect;
@@ -291,12 +294,31 @@
}
}
-void OpReorderer::LayerReorderer::replayBakedOpsImpl(void* arg, BakedOpDispatcher* receivers) const {
+void OpReorderer::LayerReorderer::replayBakedOpsImpl(void* arg,
+ BakedOpReceiver* unmergedReceivers, MergedOpReceiver* mergedReceivers) const {
ATRACE_NAME("flush drawing commands");
for (const BatchBase* batch : mBatches) {
- // TODO: different behavior based on batch->isMerging()
- for (const BakedOpState* op : batch->getOps()) {
- receivers[op->op->opId](arg, *op->op, *op);
+ size_t size = batch->getOps().size();
+ if (size > 1 && batch->isMerging()) {
+ int opId = batch->getOps()[0]->op->opId;
+ const MergingOpBatch* mergingBatch = static_cast<const MergingOpBatch*>(batch);
+ MergedBakedOpList data = {
+ batch->getOps().data(),
+ size,
+ mergingBatch->getClipSideFlags(),
+ mergingBatch->getClipRect()
+ };
+ if (data.clipSideFlags) {
+ // if right or bottom sides aren't used to clip, init them to viewport bounds
+ // in the clip rect, so it can be used to scissor
+ if (!(data.clipSideFlags & OpClipSideFlags::Right)) data.clip.right = width;
+ if (!(data.clipSideFlags & OpClipSideFlags::Bottom)) data.clip.bottom = height;
+ }
+ mergedReceivers[opId](arg, data);
+ } else {
+ for (const BakedOpState* op : batch->getOps()) {
+ unmergedReceivers[op->op->opId](arg, *op);
+ }
}
}
}
@@ -639,7 +661,8 @@
#define OP_RECEIVER(Type) \
[](OpReorderer& reorderer, const RecordedOp& op) { reorderer.on##Type(static_cast<const Type&>(op)); },
void OpReorderer::deferNodeOps(const RenderNode& renderNode) {
- static std::function<void(OpReorderer& reorderer, const RecordedOp&)> receivers[] = {
+ typedef void (*OpDispatcher) (OpReorderer& reorderer, const RecordedOp& op);
+ static OpDispatcher receivers[] = {
MAP_OPS(OP_RECEIVER)
};
@@ -685,49 +708,131 @@
}
}
-static batchid_t tessellatedBatchId(const SkPaint& paint) {
+/**
+ * Defers an unmergeable, strokeable op, accounting correctly
+ * for paint's style on the bounds being computed.
+ */
+void OpReorderer::onStrokeableOp(const RecordedOp& op, batchid_t batchId,
+ BakedOpState::StrokeBehavior strokeBehavior) {
+ // Note: here we account for stroke when baking the op
+ BakedOpState* bakedState = BakedOpState::tryStrokeableOpConstruct(
+ mAllocator, *mCanvasState.currentSnapshot(), op, strokeBehavior);
+ if (!bakedState) return; // quick rejected
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, batchId);
+}
+
+/**
+ * Returns batch id for tessellatable shapes, based on paint. Checks to see if path effect/AA will
+ * be used, since they trigger significantly different rendering paths.
+ *
+ * Note: not used for lines/points, since they don't currently support path effects.
+ */
+static batchid_t tessBatchId(const RecordedOp& op) {
+ const SkPaint& paint = *(op.paint);
return paint.getPathEffect()
? OpBatchType::AlphaMaskTexture
: (paint.isAntiAlias() ? OpBatchType::AlphaVertices : OpBatchType::Vertices);
}
-void OpReorderer::onBitmapOp(const BitmapOp& op) {
- BakedOpState* bakedStateOp = tryBakeOpState(op);
- if (!bakedStateOp) return; // quick rejected
+void OpReorderer::onArcOp(const ArcOp& op) {
+ onStrokeableOp(op, tessBatchId(op));
+}
- mergeid_t mergeId = (mergeid_t) op.bitmap->getGenerationID();
- // TODO: AssetAtlas
- currentLayer().deferMergeableOp(mAllocator, bakedStateOp, OpBatchType::Bitmap, mergeId);
+void OpReorderer::onBitmapOp(const BitmapOp& op) {
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
+
+ // Don't merge non-simply transformed or neg scale ops, SET_TEXTURE doesn't handle rotation
+ // Don't merge A8 bitmaps - the paint's color isn't compared by mergeId, or in
+ // MergingDrawBatch::canMergeWith()
+ if (bakedState->computedState.transform.isSimple()
+ && bakedState->computedState.transform.positiveScale()
+ && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode
+ && op.bitmap->colorType() != kAlpha_8_SkColorType) {
+ mergeid_t mergeId = (mergeid_t) op.bitmap->getGenerationID();
+ // TODO: AssetAtlas in mergeId
+ currentLayer().deferMergeableOp(mAllocator, bakedState, OpBatchType::Bitmap, mergeId);
+ } else {
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::Bitmap);
+ }
+}
+
+void OpReorderer::onBitmapMeshOp(const BitmapMeshOp& op) {
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::Bitmap);
+}
+
+void OpReorderer::onBitmapRectOp(const BitmapRectOp& op) {
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::Bitmap);
}
void OpReorderer::onLinesOp(const LinesOp& op) {
- BakedOpState* bakedStateOp = tryBakeOpState(op);
- if (!bakedStateOp) return; // quick rejected
- currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices);
+ batchid_t batch = op.paint->isAntiAlias() ? OpBatchType::AlphaVertices : OpBatchType::Vertices;
+ onStrokeableOp(op, batch, BakedOpState::StrokeBehavior::Forced);
+}
+void OpReorderer::onOvalOp(const OvalOp& op) {
+ onStrokeableOp(op, tessBatchId(op));
+}
+
+void OpReorderer::onPatchOp(const PatchOp& op) {
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
+
+ if (bakedState->computedState.transform.isPureTranslate()
+ && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode) {
+ mergeid_t mergeId = (mergeid_t) op.bitmap->getGenerationID();
+ // TODO: AssetAtlas in mergeId
+
+ // Only use the MergedPatch batchId when merged, so Bitmap+Patch don't try to merge together
+ currentLayer().deferMergeableOp(mAllocator, bakedState, OpBatchType::MergedPatch, mergeId);
+ } else {
+ // Use Bitmap batchId since Bitmap+Patch use same shader
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::Bitmap);
+ }
+}
+
+void OpReorderer::onPathOp(const PathOp& op) {
+ onStrokeableOp(op, OpBatchType::Bitmap);
+}
+
+void OpReorderer::onPointsOp(const PointsOp& op) {
+ batchid_t batch = op.paint->isAntiAlias() ? OpBatchType::AlphaVertices : OpBatchType::Vertices;
+ onStrokeableOp(op, batch, BakedOpState::StrokeBehavior::Forced);
}
void OpReorderer::onRectOp(const RectOp& op) {
- BakedOpState* bakedStateOp = tryBakeOpState(op);
- if (!bakedStateOp) return; // quick rejected
- currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, tessellatedBatchId(*op.paint));
+ onStrokeableOp(op, tessBatchId(op));
+}
+
+void OpReorderer::onRoundRectOp(const RoundRectOp& op) {
+ onStrokeableOp(op, tessBatchId(op));
}
void OpReorderer::onSimpleRectsOp(const SimpleRectsOp& op) {
- BakedOpState* bakedStateOp = tryBakeOpState(op);
- if (!bakedStateOp) return; // quick rejected
- currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices);
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::Vertices);
}
void OpReorderer::onTextOp(const TextOp& op) {
- BakedOpState* bakedStateOp = tryBakeOpState(op);
- if (!bakedStateOp) return; // quick rejected
+ BakedOpState* bakedState = tryBakeOpState(op);
+ if (!bakedState) return; // quick rejected
// TODO: better handling of shader (since we won't care about color then)
batchid_t batchId = op.paint->getColor() == SK_ColorBLACK
? OpBatchType::Text : OpBatchType::ColorText;
- mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.paint->getColor());
- currentLayer().deferMergeableOp(mAllocator, bakedStateOp, batchId, mergeId);
+
+ if (bakedState->computedState.transform.isPureTranslate()
+ && PaintUtils::getXfermodeDirect(op.paint) == SkXfermode::kSrcOver_Mode) {
+ mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.paint->getColor());
+ currentLayer().deferMergeableOp(mAllocator, bakedState, batchId, mergeId);
+ } else {
+ currentLayer().deferUnmergeableOp(mAllocator, bakedState, batchId);
+ }
}
void OpReorderer::saveForLayer(uint32_t layerWidth, uint32_t layerHeight,
diff --git a/libs/hwui/OpReorderer.h b/libs/hwui/OpReorderer.h
index 00df8b0..0b88f04 100644
--- a/libs/hwui/OpReorderer.h
+++ b/libs/hwui/OpReorderer.h
@@ -45,7 +45,7 @@
enum {
None = 0, // Don't batch
Bitmap,
- Patch,
+ MergedPatch,
AlphaVertices,
Vertices,
AlphaMaskTexture,
@@ -58,7 +58,8 @@
}
class OpReorderer : public CanvasStateClient {
- typedef std::function<void(void*, const RecordedOp&, const BakedOpState&)> BakedOpDispatcher;
+ typedef void (*BakedOpReceiver)(void*, const BakedOpState&);
+ typedef void (*MergedOpReceiver)(void*, const MergedBakedOpList& opList);
/**
* Stores the deferred render operations and state used to compute ordering
@@ -87,7 +88,7 @@
void deferMergeableOp(LinearAllocator& allocator,
BakedOpState* op, batchid_t batchId, mergeid_t mergeId);
- void replayBakedOpsImpl(void* arg, BakedOpDispatcher* receivers) const;
+ void replayBakedOpsImpl(void* arg, BakedOpReceiver* receivers, MergedOpReceiver*) const;
bool empty() const {
return mBatches.empty();
@@ -132,19 +133,44 @@
* It constructs a lookup array of lambdas, which allows a recorded BakeOpState to use
* state->op->opId to lookup a receiver that will be called when the op is replayed.
*
- * For example a BitmapOp would resolve, via the lambda lookup, to calling:
- *
- * StaticDispatcher::onBitmapOp(Renderer& renderer, const BitmapOp& op, const BakedOpState& state);
*/
-#define BAKED_OP_RECEIVER(Type) \
- [](void* internalRenderer, const RecordedOp& op, const BakedOpState& state) { \
- StaticDispatcher::on##Type(*(static_cast<Renderer*>(internalRenderer)), static_cast<const Type&>(op), state); \
- },
template <typename StaticDispatcher, typename Renderer>
void replayBakedOps(Renderer& renderer) {
- static BakedOpDispatcher receivers[] = {
- MAP_OPS(BAKED_OP_RECEIVER)
+ /**
+ * defines a LUT of lambdas which allow a recorded BakedOpState to use state->op->opId to
+ * dispatch the op via a method on a static dispatcher when the op is replayed.
+ *
+ * For example a BitmapOp would resolve, via the lambda lookup, to calling:
+ *
+ * StaticDispatcher::onBitmapOp(Renderer& renderer, const BitmapOp& op, const BakedOpState& state);
+ */
+ #define X(Type) \
+ [](void* renderer, const BakedOpState& state) { \
+ StaticDispatcher::on##Type(*(static_cast<Renderer*>(renderer)), static_cast<const Type&>(*(state.op)), state); \
+ },
+ static BakedOpReceiver unmergedReceivers[] = {
+ MAP_OPS(X)
};
+ #undef X
+
+ /**
+ * defines a LUT of lambdas which allow merged arrays of BakedOpState* to be passed to a
+ * static dispatcher when the group of merged ops is replayed. Unmergeable ops trigger
+ * a LOG_ALWAYS_FATAL().
+ */
+ #define X(Type) \
+ [](void* renderer, const MergedBakedOpList& opList) { \
+ LOG_ALWAYS_FATAL("op type %d does not support merging", opList.states[0]->op->opId); \
+ },
+ #define Y(Type) \
+ [](void* renderer, const MergedBakedOpList& opList) { \
+ StaticDispatcher::onMerged##Type##s(*(static_cast<Renderer*>(renderer)), opList); \
+ },
+ static MergedOpReceiver mergedReceivers[] = {
+ MAP_OPS_BASED_ON_MERGEABILITY(X, Y)
+ };
+ #undef X
+ #undef Y
// Relay through layers in reverse order, since layers
// later in the list will be drawn by earlier ones
@@ -153,18 +179,18 @@
if (layer.renderNode) {
// cached HW layer - can't skip layer if empty
renderer.startRepaintLayer(layer.offscreenBuffer, layer.repaintRect);
- layer.replayBakedOpsImpl((void*)&renderer, receivers);
+ layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
renderer.endLayer();
} else if (!layer.empty()) { // save layer - skip entire layer if empty
layer.offscreenBuffer = renderer.startTemporaryLayer(layer.width, layer.height);
- layer.replayBakedOpsImpl((void*)&renderer, receivers);
+ layer.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
renderer.endLayer();
}
}
const LayerReorderer& fbo0 = mLayerReorderers[0];
renderer.startFrame(fbo0.width, fbo0.height, fbo0.repaintRect);
- fbo0.replayBakedOpsImpl((void*)&renderer, receivers);
+ fbo0.replayBakedOpsImpl((void*)&renderer, unmergedReceivers, mergedReceivers);
renderer.endFrame();
}
@@ -213,12 +239,16 @@
void deferRenderNodeOp(const RenderNodeOp& op);
- void replayBakedOpsImpl(void* arg, BakedOpDispatcher* receivers);
+ void replayBakedOpsImpl(void* arg, BakedOpReceiver* receivers);
SkPath* createFrameAllocatedPath() {
mFrameAllocatedPaths.emplace_back(new SkPath);
return mFrameAllocatedPaths.back().get();
}
+
+ void onStrokeableOp(const RecordedOp& op, batchid_t batchId,
+ BakedOpState::StrokeBehavior strokeBehavior = BakedOpState::StrokeBehavior::StyleDefined);
+
/**
* Declares all OpReorderer::onXXXXOp() methods for every RecordedOp type.
*
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index e386b1c..f49237c 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -40,6 +40,7 @@
#include <SkCanvas.h>
#include <SkColor.h>
+#include <SkPaintDefaults.h>
#include <SkPathOps.h>
#include <SkShader.h>
#include <SkTypeface.h>
@@ -1525,7 +1526,7 @@
colors = tempColors.get();
}
- Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap);
+ Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap->pixelRef());
const UvMapper& mapper(getMapper(texture));
for (int32_t y = 0; y < meshHeight; y++) {
@@ -1908,9 +1909,6 @@
drawConvexPath(path, p);
}
-// See SkPaintDefaults.h
-#define SkPaintDefaults_MiterLimit SkIntToScalar(4)
-
void OpenGLRenderer::drawRect(float left, float top, float right, float bottom,
const SkPaint* p) {
if (mState.currentlyIgnored()
@@ -1921,6 +1919,7 @@
if (p->getStyle() != SkPaint::kFill_Style) {
// only fill style is supported by drawConvexPath, since others have to handle joins
+ static_assert(SkPaintDefaults_MiterLimit == 4.0f, "Miter limit has changed");
if (p->getPathEffect() != nullptr || p->getStrokeJoin() != SkPaint::kMiter_Join ||
p->getStrokeMiter() != SkPaintDefaults_MiterLimit) {
mCaches.textureState().activateTexture(0);
@@ -2146,7 +2145,7 @@
bool status;
#if HWUI_NEW_OPS
LOG_ALWAYS_FATAL("unsupported");
- TextDrawFunctor functor(nullptr, nullptr, x, y, pureTranslate, alpha, mode, paint);
+ TextDrawFunctor functor(nullptr, nullptr, nullptr, x, y, pureTranslate, alpha, mode, paint);
#else
TextDrawFunctor functor(this, x, y, pureTranslate, alpha, mode, paint);
#endif
@@ -2190,7 +2189,7 @@
SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint);
#if HWUI_NEW_OPS
LOG_ALWAYS_FATAL("unsupported");
- TextDrawFunctor functor(nullptr, nullptr, 0.0f, 0.0f, false, alpha, mode, paint);
+ TextDrawFunctor functor(nullptr, nullptr, nullptr, 0.0f, 0.0f, false, alpha, mode, paint);
#else
TextDrawFunctor functor(this, 0.0f, 0.0f, false, alpha, mode, paint);
#endif
@@ -2308,7 +2307,7 @@
///////////////////////////////////////////////////////////////////////////////
Texture* OpenGLRenderer::getTexture(const SkBitmap* bitmap) {
- Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap);
+ Texture* texture = mRenderState.assetAtlas().getEntryTexture(bitmap->pixelRef());
if (!texture) {
return mCaches.textureCache.get(bitmap);
}
diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp
index b57b8f0..9246237 100644
--- a/libs/hwui/PathTessellator.cpp
+++ b/libs/hwui/PathTessellator.cpp
@@ -799,7 +799,7 @@
dstBuffer.alloc<TYPE>(numPoints * verticesPerPoint + (numPoints - 1) * 2);
for (int i = 0; i < count; i += 2) {
- bounds.expandToCoverVertex(points[i + 0], points[i + 1]);
+ bounds.expandToCover(points[i + 0], points[i + 1]);
dstBuffer.copyInto<TYPE>(srcBuffer, points[i + 0], points[i + 1]);
}
dstBuffer.createDegenerateSeparators<TYPE>(verticesPerPoint);
@@ -878,8 +878,8 @@
}
// calculate bounds
- bounds.expandToCoverVertex(tempVerticesData[0].x, tempVerticesData[0].y);
- bounds.expandToCoverVertex(tempVerticesData[1].x, tempVerticesData[1].y);
+ bounds.expandToCover(tempVerticesData[0].x, tempVerticesData[0].y);
+ bounds.expandToCover(tempVerticesData[1].x, tempVerticesData[1].y);
}
// since multiple objects tessellated into buffer, separate them with degen tris
diff --git a/libs/hwui/RecordedOp.h b/libs/hwui/RecordedOp.h
index b4a201e..75ecdae 100644
--- a/libs/hwui/RecordedOp.h
+++ b/libs/hwui/RecordedOp.h
@@ -24,7 +24,8 @@
#include "utils/LinearAllocator.h"
#include "Vector.h"
-#include "SkXfermode.h"
+#include <androidfw/ResourceTypes.h>
+#include <SkXfermode.h>
class SkBitmap;
class SkPaint;
@@ -37,21 +38,42 @@
struct Vertex;
/**
- * The provided macro is executed for each op type in order, with the results separated by commas.
+ * On of the provided macros is executed for each op type in order. The first will be used for ops
+ * that cannot merge, and the second for those that can.
*
* This serves as the authoritative list of ops, used for generating ID enum, and ID based LUTs.
*/
+#define MAP_OPS_BASED_ON_MERGEABILITY(U_OP_FN, M_OP_FN) \
+ U_OP_FN(ArcOp) \
+ M_OP_FN(BitmapOp) \
+ U_OP_FN(BitmapMeshOp) \
+ U_OP_FN(BitmapRectOp) \
+ U_OP_FN(LinesOp) \
+ U_OP_FN(OvalOp) \
+ M_OP_FN(PatchOp) \
+ U_OP_FN(PathOp) \
+ U_OP_FN(PointsOp) \
+ U_OP_FN(RectOp) \
+ U_OP_FN(RenderNodeOp) \
+ U_OP_FN(RoundRectOp) \
+ U_OP_FN(ShadowOp) \
+ U_OP_FN(SimpleRectsOp) \
+ M_OP_FN(TextOp) \
+ U_OP_FN(BeginLayerOp) \
+ U_OP_FN(EndLayerOp) \
+ U_OP_FN(LayerOp)
+
+/**
+ * The provided macro is executed for each op type in order. This is used in cases where
+ * merge-ability of ops doesn't matter.
+ */
#define MAP_OPS(OP_FN) \
- OP_FN(BitmapOp) \
- OP_FN(LinesOp) \
- OP_FN(RectOp) \
- OP_FN(RenderNodeOp) \
- OP_FN(ShadowOp) \
- OP_FN(SimpleRectsOp) \
- OP_FN(TextOp) \
- OP_FN(BeginLayerOp) \
- OP_FN(EndLayerOp) \
- OP_FN(LayerOp)
+ MAP_OPS_BASED_ON_MERGEABILITY(OP_FN, OP_FN)
+
+#define NULL_OP_FN(Type)
+
+#define MAP_MERGED_OPS(OP_FN) \
+ MAP_OPS_BASED_ON_MERGEABILITY(NULL_OP_FN, OP_FN)
// Generate OpId enum
#define IDENTITY_FN(Type) Type,
@@ -61,7 +83,7 @@
Count,
};
}
-static_assert(RecordedOpId::BitmapOp == 0,
+static_assert(RecordedOpId::ArcOp == 0,
"First index must be zero for LUTs to work");
#define BASE_PARAMS const Rect& unmappedBounds, const Matrix4& localMatrix, const Rect& localClipRect, const SkPaint* paint
@@ -73,7 +95,7 @@
/* ID from RecordedOpId - generally used for jumping into function tables */
const int opId;
- /* bounds in *local* space, without accounting for DisplayList transformation */
+ /* bounds in *local* space, without accounting for DisplayList transformation, or stroke */
const Rect unmappedBounds;
/* transform in recording space (vs DisplayList origin) */
@@ -115,6 +137,17 @@
// Standard Ops
////////////////////////////////////////////////////////////////////////////////////////////////////
+struct ArcOp : RecordedOp {
+ ArcOp(BASE_PARAMS, float startAngle, float sweepAngle, bool useCenter)
+ : SUPER(ArcOp)
+ , startAngle(startAngle)
+ , sweepAngle(sweepAngle)
+ , useCenter(useCenter) {}
+ const float startAngle;
+ const float sweepAngle;
+ const bool useCenter;
+};
+
struct BitmapOp : RecordedOp {
BitmapOp(BASE_PARAMS, const SkBitmap* bitmap)
: SUPER(BitmapOp)
@@ -123,6 +156,31 @@
// TODO: asset atlas/texture id lookup?
};
+struct BitmapMeshOp : RecordedOp {
+ BitmapMeshOp(BASE_PARAMS, const SkBitmap* bitmap, int meshWidth, int meshHeight,
+ const float* vertices, const int* colors)
+ : SUPER(BitmapMeshOp)
+ , bitmap(bitmap)
+ , meshWidth(meshWidth)
+ , meshHeight(meshHeight)
+ , vertices(vertices)
+ , colors(colors) {}
+ const SkBitmap* bitmap;
+ const int meshWidth;
+ const int meshHeight;
+ const float* vertices;
+ const int* colors;
+};
+
+struct BitmapRectOp : RecordedOp {
+ BitmapRectOp(BASE_PARAMS, const SkBitmap* bitmap, const Rect& src)
+ : SUPER(BitmapRectOp)
+ , bitmap(bitmap)
+ , src(src) {}
+ const SkBitmap* bitmap;
+ const Rect src;
+};
+
struct LinesOp : RecordedOp {
LinesOp(BASE_PARAMS, const float* points, const int floatCount)
: SUPER(LinesOp)
@@ -132,11 +190,51 @@
const int floatCount;
};
+struct OvalOp : RecordedOp {
+ OvalOp(BASE_PARAMS)
+ : SUPER(OvalOp) {}
+};
+
+
+struct PatchOp : RecordedOp {
+ PatchOp(BASE_PARAMS, const SkBitmap* bitmap, const Res_png_9patch* patch)
+ : SUPER(PatchOp)
+ , bitmap(bitmap)
+ , patch(patch) {}
+ const SkBitmap* bitmap;
+ const Res_png_9patch* patch;
+};
+
+struct PathOp : RecordedOp {
+ PathOp(BASE_PARAMS, const SkPath* path)
+ : SUPER(PathOp)
+ , path(path) {}
+ const SkPath* path;
+};
+
+struct PointsOp : RecordedOp {
+ PointsOp(BASE_PARAMS, const float* points, const int floatCount)
+ : SUPER(PointsOp)
+ , points(points)
+ , floatCount(floatCount) {}
+ const float* points;
+ const int floatCount;
+};
+
struct RectOp : RecordedOp {
RectOp(BASE_PARAMS)
: SUPER(RectOp) {}
};
+struct RoundRectOp : RecordedOp {
+ RoundRectOp(BASE_PARAMS, float rx, float ry)
+ : SUPER(RoundRectOp)
+ , rx(rx)
+ , ry(ry) {}
+ const float rx;
+ const float ry;
+};
+
/**
* Real-time, dynamic-lit shadow.
*
diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp
index 61fa384..57f0d34 100644
--- a/libs/hwui/RecordingCanvas.cpp
+++ b/libs/hwui/RecordingCanvas.cpp
@@ -237,29 +237,32 @@
refPaint(&paint)));
}
+static Rect calcBoundsOfPoints(const float* points, int floatCount) {
+ Rect unmappedBounds(points[0], points[1], points[0], points[1]);
+ for (int i = 2; i < floatCount; i += 2) {
+ unmappedBounds.expandToCover(points[i], points[i + 1]);
+ }
+ return unmappedBounds;
+}
+
// Geometry
-void RecordingCanvas::drawPoints(const float* points, int count, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+void RecordingCanvas::drawPoints(const float* points, int floatCount, const SkPaint& paint) {
+ if (floatCount < 2) return;
+ floatCount &= ~0x1; // round down to nearest two
+
+ addOp(new (alloc()) PointsOp(
+ calcBoundsOfPoints(points, floatCount),
+ *mState.currentSnapshot()->transform,
+ mState.getRenderTargetClipBounds(),
+ refPaint(&paint), refBuffer<float>(points, floatCount), floatCount));
}
void RecordingCanvas::drawLines(const float* points, int floatCount, const SkPaint& paint) {
if (floatCount < 4) return;
floatCount &= ~0x3; // round down to nearest four
- Rect unmappedBounds(points[0], points[1], points[0], points[1]);
- for (int i = 2; i < floatCount; i += 2) {
- unmappedBounds.left = std::min(unmappedBounds.left, points[i]);
- unmappedBounds.right = std::max(unmappedBounds.right, points[i]);
- unmappedBounds.top = std::min(unmappedBounds.top, points[i + 1]);
- unmappedBounds.bottom = std::max(unmappedBounds.bottom, points[i + 1]);
- }
-
- // since anything AA stroke with less than 1.0 pixel width is drawn with an alpha-reduced
- // 1.0 stroke, treat 1.0 as minimum.
- unmappedBounds.outset(std::max(paint.getStrokeWidth(), 1.0f) * 0.5f);
-
addOp(new (alloc()) LinesOp(
- unmappedBounds,
+ calcBoundsOfPoints(points, floatCount),
*mState.currentSnapshot()->transform,
mState.getRenderTargetClipBounds(),
refPaint(&paint), refBuffer<float>(points, floatCount), floatCount));
@@ -333,20 +336,42 @@
}
void RecordingCanvas::drawRoundRect(float left, float top, float right, float bottom,
float rx, float ry, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ addOp(new (alloc()) RoundRectOp(
+ Rect(left, top, right, bottom),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(&paint), rx, ry));
}
+
void RecordingCanvas::drawCircle(float x, float y, float radius, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ if (radius <= 0) return;
+ drawOval(x - radius, y - radius, x + radius, y + radius, paint);
}
+
void RecordingCanvas::drawOval(float left, float top, float right, float bottom, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ addOp(new (alloc()) OvalOp(
+ Rect(left, top, right, bottom),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(&paint)));
}
+
void RecordingCanvas::drawArc(float left, float top, float right, float bottom,
- float startAngle, float sweepAngle, bool useCenter, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ float startAngle, float sweepAngle, bool useCenter, const SkPaint& paint) {
+ addOp(new (alloc()) ArcOp(
+ Rect(left, top, right, bottom),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(&paint),
+ startAngle, sweepAngle, useCenter));
}
+
void RecordingCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ addOp(new (alloc()) PathOp(
+ Rect(path.getBounds()),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(&paint), refPath(&path)));
}
// Bitmap-based
@@ -378,6 +403,7 @@
restore();
}
}
+
void RecordingCanvas::drawBitmap(const SkBitmap& bitmap, float srcLeft, float srcTop,
float srcRight, float srcBottom, float dstLeft, float dstTop,
float dstRight, float dstBottom, const SkPaint* paint) {
@@ -392,17 +418,35 @@
drawBitmap(&bitmap, paint);
restore();
} else {
- LOG_ALWAYS_FATAL("TODO!");
+ addOp(new (alloc()) BitmapRectOp(
+ Rect(dstLeft, dstTop, dstRight, dstBottom),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(paint), refBitmap(bitmap),
+ Rect(srcLeft, srcTop, srcRight, srcBottom)));
}
}
+
void RecordingCanvas::drawBitmapMesh(const SkBitmap& bitmap, int meshWidth, int meshHeight,
const float* vertices, const int* colors, const SkPaint* paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ int vertexCount = (meshWidth + 1) * (meshHeight + 1);
+ addOp(new (alloc()) BitmapMeshOp(
+ calcBoundsOfPoints(vertices, vertexCount * 2),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(paint), refBitmap(bitmap), meshWidth, meshHeight,
+ refBuffer<float>(vertices, vertexCount * 2), // 2 floats per vertex
+ refBuffer<int>(colors, vertexCount))); // 1 color per vertex
}
-void RecordingCanvas::drawNinePatch(const SkBitmap& bitmap, const android::Res_png_9patch& chunk,
+
+void RecordingCanvas::drawNinePatch(const SkBitmap& bitmap, const android::Res_png_9patch& patch,
float dstLeft, float dstTop, float dstRight, float dstBottom,
const SkPaint* paint) {
- LOG_ALWAYS_FATAL("TODO!");
+ addOp(new (alloc()) PatchOp(
+ Rect(dstLeft, dstTop, dstRight, dstBottom),
+ *(mState.currentSnapshot()->transform),
+ mState.getRenderTargetClipBounds(),
+ refPaint(paint), refBitmap(bitmap), refPatch(&patch)));
}
// Text
@@ -413,6 +457,7 @@
glyphs = refBuffer<glyph_t>(glyphs, glyphCount);
positions = refBuffer<float>(positions, glyphCount * 2);
+ // TODO: either must account for text shadow in bounds, or record separate ops for text shadows
addOp(new (alloc()) TextOp(
Rect(boundsLeft, boundsTop, boundsRight, boundsBottom),
*(mState.currentSnapshot()->transform),
@@ -423,7 +468,6 @@
void RecordingCanvas::drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path,
float hOffset, float vOffset, const SkPaint& paint) {
- // NOTE: can't use refPaint() directly, since it forces left alignment
LOG_ALWAYS_FATAL("TODO!");
}
@@ -435,8 +479,9 @@
refPaint(paint), refBitmap(*bitmap)));
}
void RecordingCanvas::drawRenderNode(RenderNode* renderNode) {
+ auto&& stagingProps = renderNode->stagingProperties();
RenderNodeOp* op = new (alloc()) RenderNodeOp(
- Rect(0, 0, renderNode->getWidth(), renderNode->getHeight()), // are these safe? they're theoretically dynamic
+ Rect(stagingProps.getWidth(), stagingProps.getHeight()),
*(mState.currentSnapshot()->transform),
mState.getRenderTargetClipBounds(),
renderNode);
diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h
index 6d0e9e0..16a2771 100644
--- a/libs/hwui/RecordingCanvas.h
+++ b/libs/hwui/RecordingCanvas.h
@@ -140,13 +140,13 @@
float points[2] = { x, y };
drawPoints(points, 2, paint);
}
- virtual void drawPoints(const float* points, int count, const SkPaint& paint) override;
+ virtual void drawPoints(const float* points, int floatCount, const SkPaint& paint) override;
virtual void drawLine(float startX, float startY, float stopX, float stopY,
const SkPaint& paint) override {
float points[4] = { startX, startY, stopX, stopY };
drawLines(points, 4, paint);
}
- virtual void drawLines(const float* points, int count, const SkPaint& paint) override;
+ virtual void drawLines(const float* points, int floatCount, const SkPaint& paint) override;
virtual void drawRect(float left, float top, float right, float bottom, const SkPaint& paint) override;
virtual void drawRegion(const SkRegion& region, const SkPaint& paint) override;
virtual void drawRoundRect(float left, float top, float right, float bottom,
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index 472aad7..30c925c 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -253,7 +253,18 @@
bottom = ceilf(bottom);
}
- void expandToCoverVertex(float x, float y) {
+ /*
+ * Similar to unionWith, except this makes the assumption that both rects are non-empty
+ * to avoid both emptiness checks.
+ */
+ void expandToCover(const Rect& other) {
+ left = std::min(left, other.left);
+ top = std::min(top, other.top);
+ right = std::max(right, other.right);
+ bottom = std::max(bottom, other.bottom);
+ }
+
+ void expandToCover(float x, float y) {
left = std::min(left, x);
top = std::min(top, y);
right = std::max(right, x);
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index 996ac8e..51f1652 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -83,7 +83,7 @@
if (!lhs.positions) return -1;
if (!rhs.positions) return +1;
- return memcmp(lhs.positions, rhs.positions, lhs.glyphCount << 1);
+ return memcmp(lhs.positions, rhs.positions, lhs.glyphCount * sizeof(float) * 2);
}
return 0;
@@ -169,7 +169,7 @@
ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* glyphs, int numGlyphs,
float radius, const float* positions) {
- ShadowText entry(paint, radius, numGlyphs * 2, glyphs, positions);
+ ShadowText entry(paint, radius, numGlyphs, glyphs, positions);
ShadowTexture* texture = mCache.get(entry);
if (!texture) {
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index 4bcd96d..1c544b9 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -120,16 +120,16 @@
class AutoTexture {
public:
- AutoTexture(const Texture* texture): mTexture(texture) { }
+ AutoTexture(const Texture* texture)
+ : texture(texture) {}
~AutoTexture() {
- if (mTexture && mTexture->cleanup) {
- mTexture->deleteTexture();
- delete mTexture;
+ if (texture && texture->cleanup) {
+ texture->deleteTexture();
+ delete texture;
}
}
-private:
- const Texture* mTexture;
+ const Texture *const texture;
}; // class AutoTexture
}; // namespace uirenderer
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index a6c72a3..21901cf 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -138,7 +138,7 @@
// in the cache (and is thus added to the cache)
Texture* TextureCache::getCachedTexture(const SkBitmap* bitmap, AtlasUsageType atlasUsageType) {
if (CC_LIKELY(mAssetAtlas != nullptr) && atlasUsageType == AtlasUsageType::Use) {
- AssetAtlas::Entry* entry = mAssetAtlas->getEntry(bitmap);
+ AssetAtlas::Entry* entry = mAssetAtlas->getEntry(bitmap->pixelRef());
if (CC_UNLIKELY(entry)) {
return entry->texture;
}
diff --git a/libs/hwui/VertexBuffer.h b/libs/hwui/VertexBuffer.h
index c0373ac..bdb5b7b 100644
--- a/libs/hwui/VertexBuffer.h
+++ b/libs/hwui/VertexBuffer.h
@@ -118,7 +118,7 @@
TYPE* end = current + vertexCount;
mBounds.set(current->x, current->y, current->x, current->y);
for (; current < end; current++) {
- mBounds.expandToCoverVertex(current->x, current->y);
+ mBounds.expandToCover(current->x, current->y);
}
}
diff --git a/libs/hwui/microbench/OpReordererBench.cpp b/libs/hwui/microbench/OpReordererBench.cpp
deleted file mode 100644
index 53b64c3..0000000
--- a/libs/hwui/microbench/OpReordererBench.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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 <benchmark/Benchmark.h>
-
-#include "BakedOpState.h"
-#include "BakedOpDispatcher.h"
-#include "BakedOpRenderer.h"
-#include "LayerUpdateQueue.h"
-#include "OpReorderer.h"
-#include "RecordedOp.h"
-#include "RecordingCanvas.h"
-#include "utils/TestUtils.h"
-#include "Vector.h"
-#include "microbench/MicroBench.h"
-
-#include <vector>
-
-using namespace android;
-using namespace android::uirenderer;
-
-const LayerUpdateQueue sEmptyLayerUpdateQueue;
-const Vector3 sLightCenter = {100, 100, 100};
-
-static std::vector<sp<RenderNode>> createTestNodeList() {
- auto node = TestUtils::createNode(0, 0, 200, 200,
- [](RenderProperties& props, RecordingCanvas& canvas) {
- SkBitmap bitmap = TestUtils::createSkBitmap(10, 10);
- SkPaint paint;
-
- // Alternate between drawing rects and bitmaps, with bitmaps overlapping rects.
- // Rects don't overlap bitmaps, so bitmaps should be brought to front as a group.
- canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
- for (int i = 0; i < 30; i++) {
- canvas.translate(0, 10);
- canvas.drawRect(0, 0, 10, 10, paint);
- canvas.drawBitmap(bitmap, 5, 0, nullptr);
- }
- canvas.restore();
- });
- TestUtils::syncHierarchyPropertiesAndDisplayList(node);
- std::vector<sp<RenderNode>> vec;
- vec.emplace_back(node);
- return vec;
-}
-
-BENCHMARK_NO_ARG(BM_OpReorderer_defer);
-void BM_OpReorderer_defer::Run(int iters) {
- auto nodes = createTestNodeList();
- StartBenchmarkTiming();
- for (int i = 0; i < iters; i++) {
- OpReorderer reorderer(sEmptyLayerUpdateQueue, SkRect::MakeWH(100, 200), 100, 200,
- nodes, sLightCenter);
- MicroBench::DoNotOptimize(&reorderer);
- }
- StopBenchmarkTiming();
-}
-
-BENCHMARK_NO_ARG(BM_OpReorderer_deferAndRender);
-void BM_OpReorderer_deferAndRender::Run(int iters) {
- TestUtils::runOnRenderThread([this, iters](renderthread::RenderThread& thread) {
- auto nodes = createTestNodeList();
- BakedOpRenderer::LightInfo lightInfo = {50.0f, 128, 128 };
-
- RenderState& renderState = thread.renderState();
- Caches& caches = Caches::getInstance();
-
- StartBenchmarkTiming();
- for (int i = 0; i < iters; i++) {
- OpReorderer reorderer(sEmptyLayerUpdateQueue, SkRect::MakeWH(100, 200), 100, 200,
- nodes, sLightCenter);
-
- BakedOpRenderer renderer(caches, renderState, true, lightInfo);
- reorderer.replayBakedOps<BakedOpDispatcher>(renderer);
- MicroBench::DoNotOptimize(&renderer);
- }
- StopBenchmarkTiming();
- });
-}
diff --git a/libs/hwui/tests/Benchmark.h b/libs/hwui/tests/Benchmark.h
deleted file mode 100644
index 3f87d7f..0000000
--- a/libs/hwui/tests/Benchmark.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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 TESTS_BENCHMARK_H
-#define TESTS_BENCHMARK_H
-
-#include "TestScene.h"
-
-#include <string>
-#include <vector>
-
-namespace android {
-namespace uirenderer {
-
-struct BenchmarkOptions {
- int count;
-};
-
-typedef test::TestScene* (*CreateScene)(const BenchmarkOptions&);
-
-template <class T>
-test::TestScene* simpleCreateScene(const BenchmarkOptions&) {
- return new T();
-}
-
-struct BenchmarkInfo {
- std::string name;
- std::string description;
- CreateScene createScene;
-};
-
-class Benchmark {
-public:
- Benchmark(const BenchmarkInfo& info) {
- registerBenchmark(info);
- }
-
-private:
- Benchmark() = delete;
- Benchmark(const Benchmark&) = delete;
- Benchmark& operator=(const Benchmark&) = delete;
-
- static void registerBenchmark(const BenchmarkInfo& info);
-};
-
-} /* namespace uirenderer */
-} /* namespace android */
-
-#endif /* TESTS_BENCHMARK_H */
diff --git a/libs/hwui/tests/TestScene.h b/libs/hwui/tests/TestScene.h
deleted file mode 100644
index b5d8954..0000000
--- a/libs/hwui/tests/TestScene.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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 TESTS_TESTSCENE_H
-#define TESTS_TESTSCENE_H
-
-namespace android {
-namespace uirenderer {
-class RenderNode;
-
-#if HWUI_NEW_OPS
-class RecordingCanvas;
-typedef RecordingCanvas TestCanvas;
-#else
-class DisplayListCanvas;
-typedef DisplayListCanvas TestCanvas;
-#endif
-
-namespace test {
-
-class TestScene {
-public:
- virtual ~TestScene() {}
- virtual void createContent(int width, int height, TestCanvas& renderer) = 0;
- virtual void doFrame(int frameNr) = 0;
-};
-
-} // namespace test
-} // namespace uirenderer
-} // namespace android
-
-#endif /* TESTS_TESTSCENE_H */
diff --git a/libs/hwui/tests/TestContext.cpp b/libs/hwui/tests/common/TestContext.cpp
similarity index 98%
rename from libs/hwui/tests/TestContext.cpp
rename to libs/hwui/tests/common/TestContext.cpp
index ba763a8..146e735 100644
--- a/libs/hwui/tests/TestContext.cpp
+++ b/libs/hwui/tests/common/TestContext.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "TestContext.h"
+#include "tests/common/TestContext.h"
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/tests/TestContext.h b/libs/hwui/tests/common/TestContext.h
similarity index 100%
rename from libs/hwui/tests/TestContext.h
rename to libs/hwui/tests/common/TestContext.h
diff --git a/libs/hwui/tests/common/TestScene.cpp b/libs/hwui/tests/common/TestScene.cpp
new file mode 100644
index 0000000..02bcd47
--- /dev/null
+++ b/libs/hwui/tests/common/TestScene.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 "tests/common/TestScene.h"
+
+namespace android {
+namespace uirenderer {
+namespace test {
+
+// Not a static global because we need to force the map to be constructed
+// before we try to add things to it.
+std::unordered_map<std::string, TestScene::Info>& TestScene::testMap() {
+ static std::unordered_map<std::string, TestScene::Info> testMap;
+ return testMap;
+}
+
+void TestScene::registerScene(const TestScene::Info& info) {
+ testMap()[info.name] = info;
+}
+
+} /* namespace test */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/tests/common/TestScene.h b/libs/hwui/tests/common/TestScene.h
new file mode 100644
index 0000000..df8d194
--- /dev/null
+++ b/libs/hwui/tests/common/TestScene.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 TESTS_TESTSCENE_H
+#define TESTS_TESTSCENE_H
+
+#include <string>
+#include <unordered_map>
+
+namespace android {
+namespace uirenderer {
+class RenderNode;
+
+#if HWUI_NEW_OPS
+class RecordingCanvas;
+typedef RecordingCanvas TestCanvas;
+#else
+class DisplayListCanvas;
+typedef DisplayListCanvas TestCanvas;
+#endif
+
+namespace test {
+
+class TestScene {
+public:
+ struct Options {
+ int count = 0;
+ };
+
+ template <class T>
+ static test::TestScene* simpleCreateScene(const TestScene::Options&) {
+ return new T();
+ }
+
+ typedef test::TestScene* (*CreateScene)(const TestScene::Options&);
+
+ struct Info {
+ std::string name;
+ std::string description;
+ CreateScene createScene;
+ };
+
+ class Registrar {
+ public:
+ Registrar(const TestScene::Info& info) {
+ TestScene::registerScene(info);
+ }
+ private:
+ Registrar() = delete;
+ Registrar(const Registrar&) = delete;
+ Registrar& operator=(const Registrar&) = delete;
+ };
+
+ virtual ~TestScene() {}
+ virtual void createContent(int width, int height, TestCanvas& renderer) = 0;
+ virtual void doFrame(int frameNr) = 0;
+
+ static std::unordered_map<std::string, Info>& testMap();
+ static void registerScene(const Info& info);
+};
+
+} // namespace test
+} // namespace uirenderer
+} // namespace android
+
+#endif /* TESTS_TESTSCENE_H */
diff --git a/libs/hwui/utils/TestUtils.cpp b/libs/hwui/tests/common/TestUtils.cpp
similarity index 100%
rename from libs/hwui/utils/TestUtils.cpp
rename to libs/hwui/tests/common/TestUtils.cpp
diff --git a/libs/hwui/utils/TestUtils.h b/libs/hwui/tests/common/TestUtils.h
similarity index 97%
rename from libs/hwui/utils/TestUtils.h
rename to libs/hwui/tests/common/TestUtils.h
index 9c1c0b9..0af9939 100644
--- a/libs/hwui/utils/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -103,10 +103,11 @@
return snapshot;
}
- static SkBitmap createSkBitmap(int width, int height) {
+ static SkBitmap createSkBitmap(int width, int height,
+ SkColorType colorType = kN32_SkColorType) {
SkBitmap bitmap;
SkImageInfo info = SkImageInfo::Make(width, height,
- kN32_SkColorType, kPremul_SkAlphaType);
+ colorType, kPremul_SkAlphaType);
bitmap.setInfo(info);
bitmap.allocPixels(info);
return bitmap;
diff --git a/libs/hwui/tests/nullegl.cpp b/libs/hwui/tests/common/nullegl.cpp
similarity index 100%
rename from libs/hwui/tests/nullegl.cpp
rename to libs/hwui/tests/common/nullegl.cpp
diff --git a/libs/hwui/tests/nullgles.cpp b/libs/hwui/tests/common/nullgles.cpp
similarity index 100%
rename from libs/hwui/tests/nullgles.cpp
rename to libs/hwui/tests/common/nullgles.cpp
diff --git a/libs/hwui/tests/scenes/HwLayerAnimation.cpp b/libs/hwui/tests/common/scenes/HwLayerAnimation.cpp
similarity index 93%
rename from libs/hwui/tests/scenes/HwLayerAnimation.cpp
rename to libs/hwui/tests/common/scenes/HwLayerAnimation.cpp
index e316eca..c212df4 100644
--- a/libs/hwui/tests/scenes/HwLayerAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/HwLayerAnimation.cpp
@@ -18,11 +18,11 @@
class HwLayerAnimation;
-static Benchmark _HwLayer(BenchmarkInfo{
+static TestScene::Registrar _HwLayer(TestScene::Info{
"hwlayer",
"A nested pair of nodes with LAYER_TYPE_HARDWARE set on each. "
"Tests the hardware layer codepath.",
- simpleCreateScene<HwLayerAnimation>
+ TestScene::simpleCreateScene<HwLayerAnimation>
});
class HwLayerAnimation : public TestScene {
diff --git a/libs/hwui/tests/common/scenes/ListViewAnimation.cpp b/libs/hwui/tests/common/scenes/ListViewAnimation.cpp
new file mode 100644
index 0000000..43e247e
--- /dev/null
+++ b/libs/hwui/tests/common/scenes/ListViewAnimation.cpp
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 "TestSceneBase.h"
+#include "utils/Color.h"
+
+#include <cstdio>
+
+class ListViewAnimation;
+
+static TestScene::Registrar _ListView(TestScene::Info{
+ "listview",
+ "A mock ListView of scrolling content. Doesn't re-bind/re-record views as they are recycled, so"
+ "won't upload much content (either glyphs, or bitmaps).",
+ TestScene::simpleCreateScene<ListViewAnimation>
+});
+
+class ListViewAnimation : public TestScene {
+public:
+ int cardHeight;
+ int cardSpacing;
+ int cardWidth;
+ int cardLeft;
+ sp<RenderNode> listView;
+ std::vector< sp<RenderNode> > cards;
+ void createContent(int width, int height, TestCanvas& canvas) override {
+ srand(0);
+ cardHeight = dp(60);
+ cardSpacing = dp(16);
+ cardWidth = std::min((height - cardSpacing * 2), (int)dp(300));
+ cardLeft = (width - cardWidth) / 2;
+
+ for (int y = 0; y < height + (cardHeight + cardSpacing - 1); y += (cardHeight + cardSpacing)) {
+ cards.push_back(createCard(cards.size(), y));
+ }
+ listView = TestUtils::createNode(0, 0, width, height,
+ [this](RenderProperties& props, TestCanvas& canvas) {
+ for (size_t ci = 0; ci < cards.size(); ci++) {
+ canvas.drawRenderNode(cards[ci].get());
+ }
+ });
+
+ canvas.drawColor(Color::Grey_500, SkXfermode::kSrcOver_Mode);
+ canvas.drawRenderNode(listView.get());
+ }
+
+ void doFrame(int frameNr) override {
+ int scrollPx = dp(frameNr) * 3;
+ int cardIndexOffset = scrollPx / (cardSpacing + cardHeight);
+ int pxOffset = -(scrollPx % (cardSpacing + cardHeight));
+
+ TestCanvas canvas(
+ listView->stagingProperties().getWidth(),
+ listView->stagingProperties().getHeight());
+ for (size_t ci = 0; ci < cards.size(); ci++) {
+ // update card position
+ auto card = cards[(ci + cardIndexOffset) % cards.size()];
+ int top = ((int)ci) * (cardSpacing + cardHeight) + pxOffset;
+ card->mutateStagingProperties().setLeftTopRightBottom(
+ cardLeft, top, cardLeft + cardWidth, top + cardHeight);
+ card->setPropertyFieldsDirty(RenderNode::X | RenderNode::Y);
+
+ // draw it to parent DisplayList
+ canvas.drawRenderNode(cards[ci].get());
+ }
+ listView->setStagingDisplayList(canvas.finishRecording());
+ }
+private:
+ SkBitmap createRandomCharIcon() {
+ int size = cardHeight - (dp(10) * 2);
+ SkBitmap bitmap = TestUtils::createSkBitmap(size, size);
+ SkCanvas canvas(bitmap);
+ canvas.clear(0);
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkColor randomColor = BrightColors[rand() % BrightColorsCount];
+ paint.setColor(randomColor);
+ canvas.drawCircle(size / 2, size / 2, size / 2, paint);
+
+ bool bgDark = SkColorGetR(randomColor) + SkColorGetG(randomColor) + SkColorGetB(randomColor)
+ < 128 * 3;
+ paint.setColor(bgDark ? Color::White : Color::Grey_700);
+ paint.setTextAlign(SkPaint::kCenter_Align);
+ paint.setTextSize(size / 2);
+ char charToShow = 'A' + (rand() % 26);
+ canvas.drawText(&charToShow, 1, size / 2, /*approximate centering*/ size * 0.7, paint);
+ return bitmap;
+ }
+
+ static SkBitmap createBoxBitmap(bool filled) {
+ int size = dp(20);
+ int stroke = dp(2);
+ SkBitmap bitmap = TestUtils::createSkBitmap(size, size);
+ SkCanvas canvas(bitmap);
+ canvas.clear(Color::Transparent);
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setColor(filled ? Color::Yellow_500 : Color::Grey_700);
+ paint.setStyle(filled ? SkPaint::kStrokeAndFill_Style : SkPaint::kStroke_Style);
+ paint.setStrokeWidth(stroke);
+ canvas.drawRect(SkRect::MakeLTRB(stroke, stroke, size - stroke, size - stroke), paint);
+ return bitmap;
+ }
+
+ sp<RenderNode> createCard(int cardId, int top) {
+ return TestUtils::createNode(cardLeft, top, cardLeft + cardWidth, top + cardHeight,
+ [this, cardId](RenderProperties& props, TestCanvas& canvas) {
+ static SkBitmap filledBox = createBoxBitmap(true);
+ static SkBitmap strokedBox = createBoxBitmap(false);
+
+ // TODO: switch to using round rect clipping, once merging correctly handles that
+ SkPaint roundRectPaint;
+ roundRectPaint.setAntiAlias(true);
+ roundRectPaint.setColor(Color::White);
+ canvas.drawRoundRect(0, 0, cardWidth, cardHeight, dp(6), dp(6), roundRectPaint);
+
+ SkPaint textPaint;
+ textPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+ textPaint.setColor(rand() % 2 ? Color::Black : Color::Grey_500);
+ textPaint.setTextSize(dp(20));
+ textPaint.setAntiAlias(true);
+ char buf[256];
+ snprintf(buf, sizeof(buf), "This card is #%d", cardId);
+ TestUtils::drawTextToCanvas(&canvas, buf, textPaint, cardHeight, dp(25));
+ textPaint.setTextSize(dp(15));
+ TestUtils::drawTextToCanvas(&canvas, "This is some more text on the card", textPaint,
+ cardHeight, dp(45));
+
+ canvas.drawBitmap(createRandomCharIcon(), dp(10), dp(10), nullptr);
+
+ const SkBitmap& boxBitmap = rand() % 2 ? filledBox : strokedBox;
+ canvas.drawBitmap(boxBitmap, cardWidth - dp(10) - boxBitmap.width(), dp(10), nullptr);
+ });
+ }
+};
diff --git a/libs/hwui/tests/scenes/OvalAnimation.cpp b/libs/hwui/tests/common/scenes/OvalAnimation.cpp
similarity index 93%
rename from libs/hwui/tests/scenes/OvalAnimation.cpp
rename to libs/hwui/tests/common/scenes/OvalAnimation.cpp
index 936aba1..082c628 100644
--- a/libs/hwui/tests/scenes/OvalAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/OvalAnimation.cpp
@@ -18,10 +18,10 @@
class OvalAnimation;
-static Benchmark _Oval(BenchmarkInfo{
+static TestScene::Registrar _Oval(TestScene::Info{
"oval",
"Draws 1 oval.",
- simpleCreateScene<OvalAnimation>
+ TestScene::simpleCreateScene<OvalAnimation>
});
class OvalAnimation : public TestScene {
diff --git a/libs/hwui/tests/scenes/PartialDamageAnimation.cpp b/libs/hwui/tests/common/scenes/PartialDamageAnimation.cpp
similarity index 95%
rename from libs/hwui/tests/scenes/PartialDamageAnimation.cpp
rename to libs/hwui/tests/common/scenes/PartialDamageAnimation.cpp
index c31ddd1..84265a4 100644
--- a/libs/hwui/tests/scenes/PartialDamageAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/PartialDamageAnimation.cpp
@@ -18,12 +18,12 @@
class PartialDamageAnimation;
-static Benchmark _PartialDamage(BenchmarkInfo{
+static TestScene::Registrar _PartialDamage(TestScene::Info{
"partialdamage",
"Tests the partial invalidation path. Draws a grid of rects and animates 1 "
"of them, should be low CPU & GPU load if EGL_EXT_buffer_age or "
"EGL_KHR_partial_update is supported by the device & are enabled in hwui.",
- simpleCreateScene<PartialDamageAnimation>
+ TestScene::simpleCreateScene<PartialDamageAnimation>
});
class PartialDamageAnimation : public TestScene {
diff --git a/libs/hwui/tests/scenes/RecentsAnimation.cpp b/libs/hwui/tests/common/scenes/RecentsAnimation.cpp
similarity index 84%
rename from libs/hwui/tests/scenes/RecentsAnimation.cpp
rename to libs/hwui/tests/common/scenes/RecentsAnimation.cpp
index 1e38d84..6509edd 100644
--- a/libs/hwui/tests/scenes/RecentsAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/RecentsAnimation.cpp
@@ -15,30 +15,31 @@
*/
#include "TestSceneBase.h"
+#include "utils/Color.h"
class RecentsAnimation;
-static Benchmark _Recents(BenchmarkInfo{
+static TestScene::Registrar _Recents(TestScene::Info{
"recents",
"A recents-like scrolling list of textures. "
"Consists of updating a texture every frame",
- simpleCreateScene<RecentsAnimation>
+ TestScene::simpleCreateScene<RecentsAnimation>
});
class RecentsAnimation : public TestScene {
public:
void createContent(int width, int height, TestCanvas& renderer) override {
static SkColor COLORS[] = {
- 0xFFF44336,
- 0xFF9C27B0,
- 0xFF2196F3,
- 0xFF4CAF50,
+ Color::Red_500,
+ Color::Purple_500,
+ Color::Blue_500,
+ Color::Green_500,
};
thumbnailSize = std::min(std::min(width, height) / 2, 720);
int cardsize = std::min(width, height) - dp(64);
- renderer.drawColor(0xFFFFFFFF, SkXfermode::kSrcOver_Mode);
+ renderer.drawColor(Color::White, SkXfermode::kSrcOver_Mode);
renderer.insertReorderBarrier(true);
int x = dp(32);
@@ -63,7 +64,7 @@
mCards[ci]->setPropertyFieldsDirty(RenderNode::Y);
}
mThumbnail.eraseColor(TestUtils::interpolateColor(
- curFrame / 150.0f, 0xFF4CAF50, 0xFFFF5722));
+ curFrame / 150.0f, Color::Green_500, Color::DeepOrange_500));
}
private:
@@ -75,7 +76,7 @@
props.mutableOutline().setRoundRect(0, 0, width, height, dp(10), 1);
props.mutableOutline().setShouldClip(true);
- canvas.drawColor(0xFFEEEEEE, SkXfermode::kSrcOver_Mode);
+ canvas.drawColor(Color::Grey_200, SkXfermode::kSrcOver_Mode);
canvas.drawBitmap(thumb, 0, 0, thumb.width(), thumb.height(),
0, 0, width, height, nullptr);
});
diff --git a/libs/hwui/tests/scenes/RectGridAnimation.cpp b/libs/hwui/tests/common/scenes/RectGridAnimation.cpp
similarity index 94%
rename from libs/hwui/tests/scenes/RectGridAnimation.cpp
rename to libs/hwui/tests/common/scenes/RectGridAnimation.cpp
index a1f04d6..a9293ab 100644
--- a/libs/hwui/tests/scenes/RectGridAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/RectGridAnimation.cpp
@@ -19,11 +19,11 @@
class RectGridAnimation;
-static Benchmark _RectGrid(BenchmarkInfo{
+static TestScene::Registrar _RectGrid(TestScene::Info{
"rectgrid",
"A dense grid of 1x1 rects that should visually look like a single rect. "
"Low CPU/GPU load.",
- simpleCreateScene<RectGridAnimation>
+ TestScene::simpleCreateScene<RectGridAnimation>
});
class RectGridAnimation : public TestScene {
diff --git a/libs/hwui/tests/scenes/SaveLayerAnimation.cpp b/libs/hwui/tests/common/scenes/SaveLayerAnimation.cpp
similarity index 94%
rename from libs/hwui/tests/scenes/SaveLayerAnimation.cpp
rename to libs/hwui/tests/common/scenes/SaveLayerAnimation.cpp
index c73e97b..78fcd8b 100644
--- a/libs/hwui/tests/scenes/SaveLayerAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/SaveLayerAnimation.cpp
@@ -18,11 +18,11 @@
class SaveLayerAnimation;
-static Benchmark _SaveLayer(BenchmarkInfo{
+static TestScene::Registrar _SaveLayer(TestScene::Info{
"savelayer",
"A nested pair of clipped saveLayer operations. "
"Tests the clipped saveLayer codepath. Draws content into offscreen buffers and back again.",
- simpleCreateScene<SaveLayerAnimation>
+ TestScene::simpleCreateScene<SaveLayerAnimation>
});
class SaveLayerAnimation : public TestScene {
diff --git a/libs/hwui/tests/scenes/ShadowGrid2Animation.cpp b/libs/hwui/tests/common/scenes/ShadowGrid2Animation.cpp
similarity index 95%
rename from libs/hwui/tests/scenes/ShadowGrid2Animation.cpp
rename to libs/hwui/tests/common/scenes/ShadowGrid2Animation.cpp
index 26c86aa..d3249b8 100644
--- a/libs/hwui/tests/scenes/ShadowGrid2Animation.cpp
+++ b/libs/hwui/tests/common/scenes/ShadowGrid2Animation.cpp
@@ -18,11 +18,11 @@
class ShadowGrid2Animation;
-static Benchmark _ShadowGrid2(BenchmarkInfo{
+static TestScene::Registrar _ShadowGrid2(TestScene::Info{
"shadowgrid2",
"A dense grid of rounded rects that cast a shadow. This is a higher CPU load "
"variant of shadowgrid. Very high CPU load, high GPU load.",
- simpleCreateScene<ShadowGrid2Animation>
+ TestScene::simpleCreateScene<ShadowGrid2Animation>
});
class ShadowGrid2Animation : public TestScene {
diff --git a/libs/hwui/tests/scenes/ShadowGridAnimation.cpp b/libs/hwui/tests/common/scenes/ShadowGridAnimation.cpp
similarity index 95%
rename from libs/hwui/tests/scenes/ShadowGridAnimation.cpp
rename to libs/hwui/tests/common/scenes/ShadowGridAnimation.cpp
index ee3c590..5ffedf0 100644
--- a/libs/hwui/tests/scenes/ShadowGridAnimation.cpp
+++ b/libs/hwui/tests/common/scenes/ShadowGridAnimation.cpp
@@ -18,11 +18,11 @@
class ShadowGridAnimation;
-static Benchmark _ShadowGrid(BenchmarkInfo{
+static TestScene::Registrar _ShadowGrid(TestScene::Info{
"shadowgrid",
"A grid of rounded rects that cast a shadow. Simplified scenario of an "
"Android TV-style launcher interface. High CPU/GPU load.",
- simpleCreateScene<ShadowGridAnimation>
+ TestScene::simpleCreateScene<ShadowGridAnimation>
});
class ShadowGridAnimation : public TestScene {
diff --git a/libs/hwui/tests/common/scenes/ShapeAnimation.cpp b/libs/hwui/tests/common/scenes/ShapeAnimation.cpp
new file mode 100644
index 0000000..0cba344
--- /dev/null
+++ b/libs/hwui/tests/common/scenes/ShapeAnimation.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 "TestSceneBase.h"
+#include "utils/Color.h"
+
+#include <cstdio>
+
+class ShapeAnimation;
+
+static TestScene::Registrar _Shapes(TestScene::Info{
+ "shapes",
+ "A grid of shape drawing test cases.",
+ TestScene::simpleCreateScene<ShapeAnimation>
+});
+
+class ShapeAnimation : public TestScene {
+public:
+ sp<RenderNode> card;
+ void createContent(int width, int height, TestCanvas& canvas) override {
+ card = TestUtils::createNode(0, 0, width, height,
+ [width](RenderProperties& props, TestCanvas& canvas) {
+ std::function<void(TestCanvas&, float, const SkPaint&)> ops[] = {
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ canvas.drawArc(0, 0, size, size, 50, 189, true, paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ canvas.drawOval(0, 0, size, size, paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ SkPath diamondPath;
+ diamondPath.moveTo(size / 2, 0);
+ diamondPath.lineTo(size, size / 2);
+ diamondPath.lineTo(size / 2, size);
+ diamondPath.lineTo(0, size / 2);
+ diamondPath.close();
+ canvas.drawPath(diamondPath, paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ float data[] = {0, 0, size, size, 0, size, size, 0 };
+ canvas.drawLines(data, sizeof(data) / sizeof(float), paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ float data[] = {0, 0, size, size, 0, size, size, 0 };
+ canvas.drawPoints(data, sizeof(data) / sizeof(float), paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ canvas.drawRect(0, 0, size, size, paint);
+ },
+ [](TestCanvas& canvas, float size, const SkPaint& paint) {
+ float rad = size / 4;
+ canvas.drawRoundRect(0, 0, size, size, rad, rad, paint);
+ }
+ };
+ float cellSpace = dp(4);
+ float cellSize = floorf(width / 7 - cellSpace);
+
+ // each combination of strokeWidth + style gets a column
+ int outerCount = canvas.save(SkCanvas::kMatrixClip_SaveFlag);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ SkPaint::Style styles[] = {
+ SkPaint::kStroke_Style, SkPaint::kFill_Style, SkPaint::kStrokeAndFill_Style };
+ for (auto style : styles) {
+ paint.setStyle(style);
+ for (auto strokeWidth : { 0.0f, 0.5f, 8.0f }) {
+ paint.setStrokeWidth(strokeWidth);
+ // fill column with each op
+ int middleCount = canvas.save(SkCanvas::kMatrixClip_SaveFlag);
+ for (auto op : ops) {
+ int innerCount = canvas.save(SkCanvas::kMatrixClip_SaveFlag);
+ canvas.clipRect(0, 0, cellSize, cellSize, SkRegion::kIntersect_Op);
+ canvas.drawColor(Color::White, SkXfermode::Mode::kSrcOver_Mode);
+ op(canvas, cellSize, paint);
+ canvas.restoreToCount(innerCount);
+ canvas.translate(cellSize + cellSpace, 0);
+ }
+ canvas.restoreToCount(middleCount);
+ canvas.translate(0, cellSize + cellSpace);
+ }
+ }
+ canvas.restoreToCount(outerCount);
+ });
+ canvas.drawColor(Color::Grey_500, SkXfermode::Mode::kSrcOver_Mode);
+ canvas.drawRenderNode(card.get());
+ }
+
+ void doFrame(int frameNr) override {
+ card->mutateStagingProperties().setTranslationY(frameNr % 150);
+ card->setPropertyFieldsDirty(RenderNode::Y);
+ }
+};
diff --git a/libs/hwui/tests/scenes/TestSceneBase.h b/libs/hwui/tests/common/scenes/TestSceneBase.h
similarity index 89%
rename from libs/hwui/tests/scenes/TestSceneBase.h
rename to libs/hwui/tests/common/scenes/TestSceneBase.h
index a208509..ac78124 100644
--- a/libs/hwui/tests/scenes/TestSceneBase.h
+++ b/libs/hwui/tests/common/scenes/TestSceneBase.h
@@ -19,10 +19,9 @@
#include "DisplayListCanvas.h"
#include "RecordingCanvas.h"
#include "RenderNode.h"
-#include "tests/Benchmark.h"
-#include "tests/TestContext.h"
-#include "tests/TestScene.h"
-#include "utils/TestUtils.h"
+#include "tests/common/TestContext.h"
+#include "tests/common/TestScene.h"
+#include "tests/common/TestUtils.h"
#include <functional>
diff --git a/libs/hwui/tests/TestSceneRunner.cpp b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
similarity index 93%
rename from libs/hwui/tests/TestSceneRunner.cpp
rename to libs/hwui/tests/macrobench/TestSceneRunner.cpp
index 0376e10..8261220 100644
--- a/libs/hwui/tests/TestSceneRunner.cpp
+++ b/libs/hwui/tests/macrobench/TestSceneRunner.cpp
@@ -15,10 +15,10 @@
*/
#include "AnimationContext.h"
-#include "Benchmark.h"
#include "RenderNode.h"
-#include "TestContext.h"
-#include "scenes/TestSceneBase.h"
+#include "tests/common/TestContext.h"
+#include "tests/common/TestScene.h"
+#include "tests/common/scenes/TestSceneBase.h"
#include "renderthread/RenderProxy.h"
#include "renderthread/RenderTask.h"
@@ -38,7 +38,7 @@
}
};
-void run(const BenchmarkInfo& info, const BenchmarkOptions& opts) {
+void run(const TestScene::Info& info, const TestScene::Options& opts) {
// Switch to the real display
gDisplay = getBuiltInDisplay();
diff --git a/libs/hwui/tests/how_to_run.txt b/libs/hwui/tests/macrobench/how_to_run.txt
similarity index 100%
rename from libs/hwui/tests/how_to_run.txt
rename to libs/hwui/tests/macrobench/how_to_run.txt
diff --git a/libs/hwui/tests/main.cpp b/libs/hwui/tests/macrobench/main.cpp
similarity index 86%
rename from libs/hwui/tests/main.cpp
rename to libs/hwui/tests/macrobench/main.cpp
index 48566e8..619713c 100644
--- a/libs/hwui/tests/main.cpp
+++ b/libs/hwui/tests/macrobench/main.cpp
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "Benchmark.h"
+#include "tests/common/TestScene.h"
#include "protos/hwui.pb.h"
@@ -27,23 +27,13 @@
using namespace android;
using namespace android::uirenderer;
-
-// Not a static global because we need to force the map to be constructed
-// before we try to add things to it.
-std::unordered_map<std::string, BenchmarkInfo>& testMap() {
- static std::unordered_map<std::string, BenchmarkInfo> testMap;
- return testMap;
-}
-
-void Benchmark::registerBenchmark(const BenchmarkInfo& info) {
- testMap()[info.name] = info;
-}
+using namespace android::uirenderer::test;
static int gFrameCount = 150;
static int gRepeatCount = 1;
-static std::vector<BenchmarkInfo> gRunTests;
+static std::vector<TestScene::Info> gRunTests;
-void run(const BenchmarkInfo& info, const BenchmarkOptions& opts);
+void run(const TestScene::Info& info, const TestScene::Options& opts);
static void printHelp() {
printf("\
@@ -59,7 +49,7 @@
static void listTests() {
printf("Tests: \n");
- for (auto&& test : testMap()) {
+ for (auto&& test : TestScene::testMap()) {
auto&& info = test.second;
const char* col1 = info.name.c_str();
int dlen = info.description.length();
@@ -168,8 +158,8 @@
if (optind < argc) {
do {
const char* test = argv[optind++];
- auto pos = testMap().find(test);
- if (pos == testMap().end()) {
+ auto pos = TestScene::testMap().find(test);
+ if (pos == TestScene::testMap().end()) {
fprintf(stderr, "Unknown test '%s'\n", test);
exit(EXIT_FAILURE);
} else {
@@ -177,14 +167,14 @@
}
} while (optind < argc);
} else {
- gRunTests.push_back(testMap()["shadowgrid"]);
+ gRunTests.push_back(TestScene::testMap()["shadowgrid"]);
}
}
int main(int argc, char* argv[]) {
parseOptions(argc, argv);
- BenchmarkOptions opts;
+ TestScene::Options opts;
opts.count = gFrameCount;
for (int i = 0; i < gRepeatCount; i++) {
for (auto&& test : gRunTests) {
diff --git a/libs/hwui/microbench/DisplayListCanvasBench.cpp b/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp
similarity index 98%
rename from libs/hwui/microbench/DisplayListCanvasBench.cpp
rename to libs/hwui/tests/microbench/DisplayListCanvasBench.cpp
index 4be1f99..2e59eb4 100644
--- a/libs/hwui/microbench/DisplayListCanvasBench.cpp
+++ b/libs/hwui/tests/microbench/DisplayListCanvasBench.cpp
@@ -22,8 +22,8 @@
#else
#include "DisplayListCanvas.h"
#endif
-#include "microbench/MicroBench.h"
-#include "utils/TestUtils.h"
+#include "tests/common/TestUtils.h"
+#include "tests/microbench/MicroBench.h"
using namespace android;
using namespace android::uirenderer;
diff --git a/libs/hwui/microbench/LinearAllocatorBench.cpp b/libs/hwui/tests/microbench/LinearAllocatorBench.cpp
similarity index 97%
rename from libs/hwui/microbench/LinearAllocatorBench.cpp
rename to libs/hwui/tests/microbench/LinearAllocatorBench.cpp
index 75f57cb..28513e4 100644
--- a/libs/hwui/microbench/LinearAllocatorBench.cpp
+++ b/libs/hwui/tests/microbench/LinearAllocatorBench.cpp
@@ -16,8 +16,8 @@
#include <benchmark/Benchmark.h>
+#include "tests/microbench/MicroBench.h"
#include "utils/LinearAllocator.h"
-#include "microbench/MicroBench.h"
#include <vector>
diff --git a/libs/hwui/microbench/MicroBench.h b/libs/hwui/tests/microbench/MicroBench.h
similarity index 100%
rename from libs/hwui/microbench/MicroBench.h
rename to libs/hwui/tests/microbench/MicroBench.h
diff --git a/libs/hwui/tests/microbench/OpReordererBench.cpp b/libs/hwui/tests/microbench/OpReordererBench.cpp
new file mode 100644
index 0000000..6bfe5a9
--- /dev/null
+++ b/libs/hwui/tests/microbench/OpReordererBench.cpp
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 <benchmark/Benchmark.h>
+
+#include "BakedOpState.h"
+#include "BakedOpDispatcher.h"
+#include "BakedOpRenderer.h"
+#include "LayerUpdateQueue.h"
+#include "OpReorderer.h"
+#include "RecordedOp.h"
+#include "RecordingCanvas.h"
+#include "tests/common/TestContext.h"
+#include "tests/common/TestScene.h"
+#include "tests/common/TestUtils.h"
+#include "Vector.h"
+#include "tests/microbench/MicroBench.h"
+
+#include <vector>
+
+using namespace android;
+using namespace android::uirenderer;
+using namespace android::uirenderer::renderthread;
+using namespace android::uirenderer::test;
+
+const LayerUpdateQueue sEmptyLayerUpdateQueue;
+const Vector3 sLightCenter = {100, 100, 100};
+
+static std::vector<sp<RenderNode>> createTestNodeList() {
+ auto node = TestUtils::createNode(0, 0, 200, 200,
+ [](RenderProperties& props, RecordingCanvas& canvas) {
+ SkBitmap bitmap = TestUtils::createSkBitmap(10, 10);
+ SkPaint paint;
+
+ // Alternate between drawing rects and bitmaps, with bitmaps overlapping rects.
+ // Rects don't overlap bitmaps, so bitmaps should be brought to front as a group.
+ canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+ for (int i = 0; i < 30; i++) {
+ canvas.translate(0, 10);
+ canvas.drawRect(0, 0, 10, 10, paint);
+ canvas.drawBitmap(bitmap, 5, 0, nullptr);
+ }
+ canvas.restore();
+ });
+ TestUtils::syncHierarchyPropertiesAndDisplayList(node);
+ std::vector<sp<RenderNode>> vec;
+ vec.emplace_back(node);
+ return vec;
+}
+
+BENCHMARK_NO_ARG(BM_OpReorderer_defer);
+void BM_OpReorderer_defer::Run(int iters) {
+ auto nodes = createTestNodeList();
+ StartBenchmarkTiming();
+ for (int i = 0; i < iters; i++) {
+ OpReorderer reorderer(sEmptyLayerUpdateQueue, SkRect::MakeWH(100, 200), 100, 200,
+ nodes, sLightCenter);
+ MicroBench::DoNotOptimize(&reorderer);
+ }
+ StopBenchmarkTiming();
+}
+
+BENCHMARK_NO_ARG(BM_OpReorderer_deferAndRender);
+void BM_OpReorderer_deferAndRender::Run(int iters) {
+ TestUtils::runOnRenderThread([this, iters](RenderThread& thread) {
+ auto nodes = createTestNodeList();
+ BakedOpRenderer::LightInfo lightInfo = {50.0f, 128, 128 };
+
+ RenderState& renderState = thread.renderState();
+ Caches& caches = Caches::getInstance();
+
+ StartBenchmarkTiming();
+ for (int i = 0; i < iters; i++) {
+ OpReorderer reorderer(sEmptyLayerUpdateQueue, SkRect::MakeWH(100, 200), 100, 200,
+ nodes, sLightCenter);
+
+ BakedOpRenderer renderer(caches, renderState, true, lightInfo);
+ reorderer.replayBakedOps<BakedOpDispatcher>(renderer);
+ MicroBench::DoNotOptimize(&renderer);
+ }
+ StopBenchmarkTiming();
+ });
+}
+
+static std::vector<sp<RenderNode>> getSyncedSceneNodes(const char* sceneName) {
+ gDisplay = getBuiltInDisplay(); // switch to real display if present
+
+ TestContext testContext;
+ TestScene::Options opts;
+ std::unique_ptr<TestScene> scene(TestScene::testMap()[sceneName].createScene(opts));
+
+ sp<RenderNode> rootNode = TestUtils::createNode(0, 0, gDisplay.w, gDisplay.h,
+ [&scene](RenderProperties& props, TestCanvas& canvas) {
+ scene->createContent(gDisplay.w, gDisplay.h, canvas);
+ });
+
+ TestUtils::syncHierarchyPropertiesAndDisplayList(rootNode);
+ std::vector<sp<RenderNode>> nodes;
+ nodes.emplace_back(rootNode);
+ return nodes;
+}
+
+static void benchDeferScene(testing::Benchmark& benchmark, int iters, const char* sceneName) {
+ auto nodes = getSyncedSceneNodes(sceneName);
+ benchmark.StartBenchmarkTiming();
+ for (int i = 0; i < iters; i++) {
+ OpReorderer reorderer(sEmptyLayerUpdateQueue,
+ SkRect::MakeWH(gDisplay.w, gDisplay.h), gDisplay.w, gDisplay.h,
+ nodes, sLightCenter);
+ MicroBench::DoNotOptimize(&reorderer);
+ }
+ benchmark.StopBenchmarkTiming();
+}
+
+static void benchDeferAndRenderScene(testing::Benchmark& benchmark,
+ int iters, const char* sceneName) {
+ TestUtils::runOnRenderThread([&benchmark, iters, sceneName](RenderThread& thread) {
+ auto nodes = getSyncedSceneNodes(sceneName);
+ BakedOpRenderer::LightInfo lightInfo = {50.0f, 128, 128 }; // TODO!
+
+ RenderState& renderState = thread.renderState();
+ Caches& caches = Caches::getInstance();
+
+ benchmark.StartBenchmarkTiming();
+ for (int i = 0; i < iters; i++) {
+ OpReorderer reorderer(sEmptyLayerUpdateQueue,
+ SkRect::MakeWH(gDisplay.w, gDisplay.h), gDisplay.w, gDisplay.h,
+ nodes, sLightCenter);
+
+ BakedOpRenderer renderer(caches, renderState, true, lightInfo);
+ reorderer.replayBakedOps<BakedOpDispatcher>(renderer);
+ MicroBench::DoNotOptimize(&renderer);
+ }
+ benchmark.StopBenchmarkTiming();
+ });
+}
+
+BENCHMARK_NO_ARG(BM_OpReorderer_listview_defer);
+void BM_OpReorderer_listview_defer::Run(int iters) {
+ benchDeferScene(*this, iters, "listview");
+}
+
+BENCHMARK_NO_ARG(BM_OpReorderer_listview_deferAndRender);
+void BM_OpReorderer_listview_deferAndRender::Run(int iters) {
+ benchDeferAndRenderScene(*this, iters, "listview");
+}
+
diff --git a/libs/hwui/microbench/PathParserBench.cpp b/libs/hwui/tests/microbench/PathParserBench.cpp
similarity index 100%
rename from libs/hwui/microbench/PathParserBench.cpp
rename to libs/hwui/tests/microbench/PathParserBench.cpp
diff --git a/libs/hwui/microbench/ShadowBench.cpp b/libs/hwui/tests/microbench/ShadowBench.cpp
similarity index 98%
rename from libs/hwui/microbench/ShadowBench.cpp
rename to libs/hwui/tests/microbench/ShadowBench.cpp
index 1b0f5ea..98ec4d9 100644
--- a/libs/hwui/microbench/ShadowBench.cpp
+++ b/libs/hwui/tests/microbench/ShadowBench.cpp
@@ -21,7 +21,7 @@
#include "Vector.h"
#include "VertexBuffer.h"
#include "TessellationCache.h"
-#include "microbench/MicroBench.h"
+#include "tests/microbench/MicroBench.h"
#include <SkPath.h>
diff --git a/libs/hwui/microbench/how_to_run.txt b/libs/hwui/tests/microbench/how_to_run.txt
similarity index 100%
rename from libs/hwui/microbench/how_to_run.txt
rename to libs/hwui/tests/microbench/how_to_run.txt
diff --git a/libs/hwui/tests/unit/BakedOpStateTests.cpp b/libs/hwui/tests/unit/BakedOpStateTests.cpp
new file mode 100644
index 0000000..8321ff9
--- /dev/null
+++ b/libs/hwui/tests/unit/BakedOpStateTests.cpp
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 <gtest/gtest.h>
+
+#include <BakedOpState.h>
+#include <RecordedOp.h>
+#include <tests/common/TestUtils.h>
+
+namespace android {
+namespace uirenderer {
+
+TEST(ResolvedRenderState, construct) {
+ Matrix4 translate10x20;
+ translate10x20.loadTranslate(10, 20, 0);
+
+ SkPaint paint;
+ RectOp recordedOp(Rect(30, 40, 100, 200), translate10x20, Rect(100, 200), &paint);
+ {
+ // recorded with transform, no parent transform
+ auto parentSnapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 200));
+ ResolvedRenderState state(*parentSnapshot, recordedOp, false);
+ EXPECT_MATRIX_APPROX_EQ(state.transform, translate10x20);
+ EXPECT_EQ(Rect(0, 0, 100, 200), state.clipRect);
+ EXPECT_EQ(Rect(40, 60, 100, 200), state.clippedBounds); // translated and also clipped
+ EXPECT_EQ(OpClipSideFlags::Right | OpClipSideFlags::Bottom, state.clipSideFlags);
+ }
+ {
+ // recorded with transform and parent transform
+ auto parentSnapshot = TestUtils::makeSnapshot(translate10x20, Rect(100, 200));
+ ResolvedRenderState state(*parentSnapshot, recordedOp, false);
+
+ Matrix4 expectedTranslate;
+ expectedTranslate.loadTranslate(20, 40, 0);
+ EXPECT_MATRIX_APPROX_EQ(expectedTranslate, state.transform);
+
+ // intersection of parent & transformed child clip
+ EXPECT_EQ(Rect(10, 20, 100, 200), state.clipRect);
+
+ // translated and also clipped
+ EXPECT_EQ(Rect(50, 80, 100, 200), state.clippedBounds);
+ EXPECT_EQ(OpClipSideFlags::Right | OpClipSideFlags::Bottom, state.clipSideFlags);
+ }
+}
+
+const float HAIRLINE = 0.0f;
+
+// Note: bounds will be conservative, but not precise for non-hairline
+// - use approx bounds checks for these
+const float SEMI_HAIRLINE = 0.3f;
+
+struct StrokeTestCase {
+ float scale;
+ float strokeWidth;
+ const std::function<void(const ResolvedRenderState&)> validator;
+};
+
+const static StrokeTestCase sStrokeTestCases[] = {
+ {
+ 1, HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_EQ(Rect(49.5f, 49.5f, 150.5f, 150.5f), state.clippedBounds);
+ }
+ },
+ {
+ 1, SEMI_HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_TRUE(state.clippedBounds.contains(49.5f, 49.5f, 150.5f, 150.5f));
+ EXPECT_TRUE(Rect(49, 49, 151, 151).contains(state.clippedBounds));
+ }
+ },
+ {
+ 1, 20, [](const ResolvedRenderState& state) {
+ EXPECT_EQ(Rect(40, 40, 160, 160), state.clippedBounds);
+ }
+ },
+
+ // 3x3 scale:
+ {
+ 3, HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_EQ(Rect(149.5f, 149.5f, 200, 200), state.clippedBounds);
+ EXPECT_EQ(OpClipSideFlags::Right | OpClipSideFlags::Bottom, state.clipSideFlags);
+ }
+ },
+ {
+ 3, SEMI_HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_TRUE(state.clippedBounds.contains(149.5f, 149.5f, 200, 200));
+ EXPECT_TRUE(Rect(149, 149, 200, 200).contains(state.clippedBounds));
+ }
+ },
+ {
+ 3, 20, [](const ResolvedRenderState& state) {
+ EXPECT_TRUE(state.clippedBounds.contains(120, 120, 200, 200));
+ EXPECT_TRUE(Rect(119, 119, 200, 200).contains(state.clippedBounds));
+ }
+ },
+
+ // 0.5f x 0.5f scale
+ {
+ 0.5f, HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_EQ(Rect(24.5f, 24.5f, 75.5f, 75.5f), state.clippedBounds);
+ }
+ },
+ {
+ 0.5f, SEMI_HAIRLINE, [](const ResolvedRenderState& state) {
+ EXPECT_TRUE(state.clippedBounds.contains(24.5f, 24.5f, 75.5f, 75.5f));
+ EXPECT_TRUE(Rect(24, 24, 76, 76).contains(state.clippedBounds));
+ }
+ },
+ {
+ 0.5f, 20, [](const ResolvedRenderState& state) {
+ EXPECT_TRUE(state.clippedBounds.contains(19.5f, 19.5f, 80.5f, 80.5f));
+ EXPECT_TRUE(Rect(19, 19, 81, 81).contains(state.clippedBounds));
+ }
+ }
+};
+
+TEST(ResolvedRenderState, construct_expandForStroke) {
+ // Loop over table of test cases and verify different combinations of stroke width and transform
+ for (auto&& testCase : sStrokeTestCases) {
+ SkPaint strokedPaint;
+ strokedPaint.setAntiAlias(true);
+ strokedPaint.setStyle(SkPaint::kStroke_Style);
+ strokedPaint.setStrokeWidth(testCase.strokeWidth);
+
+ RectOp recordedOp(Rect(50, 50, 150, 150),
+ Matrix4::identity(), Rect(200, 200), &strokedPaint);
+
+ Matrix4 snapshotMatrix;
+ snapshotMatrix.loadScale(testCase.scale, testCase.scale, 1);
+ auto parentSnapshot = TestUtils::makeSnapshot(snapshotMatrix, Rect(200, 200));
+
+ ResolvedRenderState state(*parentSnapshot, recordedOp, true);
+ testCase.validator(state);
+ }
+}
+
+TEST(BakedOpState, tryConstruct) {
+ LinearAllocator allocator;
+
+ Matrix4 translate100x0;
+ translate100x0.loadTranslate(100, 0, 0);
+
+ SkPaint paint;
+ {
+ RectOp rejectOp(Rect(30, 40, 100, 200), translate100x0, Rect(100, 200), &paint);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 200));
+ BakedOpState* bakedState = BakedOpState::tryConstruct(allocator, *snapshot, rejectOp);
+
+ EXPECT_EQ(nullptr, bakedState); // rejected by clip, so not constructed
+ EXPECT_GT(8u, allocator.usedSize()); // no significant allocation space used for rejected op
+ }
+ {
+ RectOp successOp(Rect(30, 40, 100, 200), Matrix4::identity(), Rect(100, 200), &paint);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 200));
+ BakedOpState* bakedState = BakedOpState::tryConstruct(allocator, *snapshot, successOp);
+
+ EXPECT_NE(nullptr, bakedState); // NOT rejected by clip, so will be constructed
+ EXPECT_LE(64u, allocator.usedSize()); // relatively large alloc for non-rejected op
+ }
+}
+
+TEST(BakedOpState, tryShadowOpConstruct) {
+ LinearAllocator allocator;
+ {
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect()); // Note: empty clip
+ BakedOpState* bakedState = BakedOpState::tryShadowOpConstruct(allocator, *snapshot, (ShadowOp*)0x1234);
+
+ EXPECT_EQ(nullptr, bakedState); // rejected by clip, so not constructed
+ EXPECT_GT(8u, allocator.usedSize()); // no significant allocation space used for rejected op
+ }
+ {
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 200));
+ BakedOpState* bakedState = BakedOpState::tryShadowOpConstruct(allocator, *snapshot, (ShadowOp*)0x1234);
+
+ ASSERT_NE(nullptr, bakedState); // NOT rejected by clip, so will be constructed
+ EXPECT_LE(64u, allocator.usedSize()); // relatively large alloc for non-rejected op
+ }
+}
+
+TEST(BakedOpState, tryStrokeableOpConstruct) {
+ LinearAllocator allocator;
+ {
+ // check regular rejection
+ SkPaint paint;
+ paint.setStyle(SkPaint::kStrokeAndFill_Style);
+ paint.setStrokeWidth(0.0f);
+ RectOp rejectOp(Rect(0, 0, 100, 200), Matrix4::identity(), Rect(100, 200), &paint);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect()); // Note: empty clip
+ auto bakedState = BakedOpState::tryStrokeableOpConstruct(allocator, *snapshot, rejectOp,
+ BakedOpState::StrokeBehavior::StyleDefined);
+
+ EXPECT_EQ(nullptr, bakedState);
+ EXPECT_GT(8u, allocator.usedSize()); // no significant allocation space used for rejected op
+ }
+ {
+ // check simple unscaled expansion
+ SkPaint paint;
+ paint.setStyle(SkPaint::kStrokeAndFill_Style);
+ paint.setStrokeWidth(10.0f);
+ RectOp rejectOp(Rect(50, 50, 150, 150), Matrix4::identity(), Rect(200, 200), &paint);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(200, 200));
+ auto bakedState = BakedOpState::tryStrokeableOpConstruct(allocator, *snapshot, rejectOp,
+ BakedOpState::StrokeBehavior::StyleDefined);
+
+ ASSERT_NE(nullptr, bakedState);
+ EXPECT_EQ(Rect(45, 45, 155, 155), bakedState->computedState.clippedBounds);
+ EXPECT_EQ(0, bakedState->computedState.clipSideFlags);
+ }
+ {
+ // check simple unscaled expansion, and fill style with stroke forced
+ SkPaint paint;
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setStrokeWidth(10.0f);
+ RectOp rejectOp(Rect(50, 50, 150, 150), Matrix4::identity(), Rect(200, 200), &paint);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(200, 200));
+ auto bakedState = BakedOpState::tryStrokeableOpConstruct(allocator, *snapshot, rejectOp,
+ BakedOpState::StrokeBehavior::Forced);
+
+ ASSERT_NE(nullptr, bakedState);
+ EXPECT_EQ(Rect(45, 45, 155, 155), bakedState->computedState.clippedBounds);
+ EXPECT_EQ(0, bakedState->computedState.clipSideFlags);
+ }
+}
+
+} // namespace uirenderer
+} // namespace android
diff --git a/libs/hwui/unit_tests/CanvasStateTests.cpp b/libs/hwui/tests/unit/CanvasStateTests.cpp
similarity index 100%
rename from libs/hwui/unit_tests/CanvasStateTests.cpp
rename to libs/hwui/tests/unit/CanvasStateTests.cpp
diff --git a/libs/hwui/unit_tests/ClipAreaTests.cpp b/libs/hwui/tests/unit/ClipAreaTests.cpp
similarity index 92%
rename from libs/hwui/unit_tests/ClipAreaTests.cpp
rename to libs/hwui/tests/unit/ClipAreaTests.cpp
index d6192df..c4d305e 100644
--- a/libs/hwui/unit_tests/ClipAreaTests.cpp
+++ b/libs/hwui/tests/unit/ClipAreaTests.cpp
@@ -92,12 +92,10 @@
TEST(ClipArea, paths) {
ClipArea area(createClipArea());
- Matrix4 transform;
- transform.loadIdentity();
SkPath path;
SkScalar r = 100;
path.addCircle(r, r, r);
- area.clipPathWithTransform(path, &transform, SkRegion::kIntersect_Op);
+ area.clipPathWithTransform(path, &Matrix4::identity(), SkRegion::kIntersect_Op);
EXPECT_FALSE(area.isEmpty());
EXPECT_FALSE(area.isSimple());
EXPECT_FALSE(area.isRectangleList());
@@ -116,11 +114,10 @@
ClipArea area(createClipArea());
area.setClip(0, 0, 100, 100);
- Matrix4 transform;
- transform.loadIdentity();
Rect expected(-50, -50, 50, 50);
- area.clipRectWithTransform(expected, &transform, SkRegion::kReplace_Op);
+ area.clipRectWithTransform(expected, &Matrix4::identity(), SkRegion::kReplace_Op);
EXPECT_EQ(expected, area.getClipRect());
}
+
}
}
diff --git a/libs/hwui/unit_tests/DamageAccumulatorTests.cpp b/libs/hwui/tests/unit/DamageAccumulatorTests.cpp
similarity index 93%
rename from libs/hwui/unit_tests/DamageAccumulatorTests.cpp
rename to libs/hwui/tests/unit/DamageAccumulatorTests.cpp
index 29354a7..7700138 100644
--- a/libs/hwui/unit_tests/DamageAccumulatorTests.cpp
+++ b/libs/hwui/tests/unit/DamageAccumulatorTests.cpp
@@ -31,13 +31,11 @@
// as the output.
TEST(DamageAccumulator, identity) {
DamageAccumulator da;
- Matrix4 identity;
SkRect curDirty;
- identity.loadIdentity();
- da.pushTransform(&identity);
+ da.pushTransform(&Matrix4::identity());
da.dirty(50, 50, 100, 100);
{
- da.pushTransform(&identity);
+ da.pushTransform(&Matrix4::identity());
da.peekAtDirty(&curDirty);
ASSERT_EQ(SkRect(), curDirty);
da.popTransform();
@@ -68,15 +66,13 @@
// Test that dirty rectangles are being unioned across "siblings
TEST(DamageAccumulator, union) {
DamageAccumulator da;
- Matrix4 identity;
SkRect curDirty;
- identity.loadIdentity();
- da.pushTransform(&identity);
+ da.pushTransform(&Matrix4::identity());
{
- da.pushTransform(&identity);
+ da.pushTransform(&Matrix4::identity());
da.dirty(50, 50, 100, 100);
da.popTransform();
- da.pushTransform(&identity);
+ da.pushTransform(&Matrix4::identity());
da.dirty(150, 50, 200, 125);
da.popTransform();
}
diff --git a/libs/hwui/unit_tests/DeviceInfoTests.cpp b/libs/hwui/tests/unit/DeviceInfoTests.cpp
similarity index 100%
rename from libs/hwui/unit_tests/DeviceInfoTests.cpp
rename to libs/hwui/tests/unit/DeviceInfoTests.cpp
diff --git a/libs/hwui/unit_tests/FatVectorTests.cpp b/libs/hwui/tests/unit/FatVectorTests.cpp
similarity index 98%
rename from libs/hwui/unit_tests/FatVectorTests.cpp
rename to libs/hwui/tests/unit/FatVectorTests.cpp
index c6ccf4d..64b0ba1 100644
--- a/libs/hwui/unit_tests/FatVectorTests.cpp
+++ b/libs/hwui/tests/unit/FatVectorTests.cpp
@@ -17,7 +17,7 @@
#include <gtest/gtest.h>
#include <utils/FatVector.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
using namespace android;
using namespace android::uirenderer;
diff --git a/libs/hwui/unit_tests/LayerUpdateQueueTests.cpp b/libs/hwui/tests/unit/LayerUpdateQueueTests.cpp
similarity index 98%
rename from libs/hwui/unit_tests/LayerUpdateQueueTests.cpp
rename to libs/hwui/tests/unit/LayerUpdateQueueTests.cpp
index cc15cc6..8b0e91c 100644
--- a/libs/hwui/unit_tests/LayerUpdateQueueTests.cpp
+++ b/libs/hwui/tests/unit/LayerUpdateQueueTests.cpp
@@ -19,7 +19,7 @@
#include <LayerUpdateQueue.h>
#include <RenderNode.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
namespace android {
namespace uirenderer {
diff --git a/libs/hwui/unit_tests/LinearAllocatorTests.cpp b/libs/hwui/tests/unit/LinearAllocatorTests.cpp
similarity index 98%
rename from libs/hwui/unit_tests/LinearAllocatorTests.cpp
rename to libs/hwui/tests/unit/LinearAllocatorTests.cpp
index 0591db6..78d65dd 100644
--- a/libs/hwui/unit_tests/LinearAllocatorTests.cpp
+++ b/libs/hwui/tests/unit/LinearAllocatorTests.cpp
@@ -17,7 +17,7 @@
#include <gtest/gtest.h>
#include <utils/LinearAllocator.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
using namespace android;
using namespace android::uirenderer;
diff --git a/libs/hwui/unit_tests/OffscreenBufferPoolTests.cpp b/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
similarity index 98%
rename from libs/hwui/unit_tests/OffscreenBufferPoolTests.cpp
rename to libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
index de86aed..2187654 100644
--- a/libs/hwui/unit_tests/OffscreenBufferPoolTests.cpp
+++ b/libs/hwui/tests/unit/OffscreenBufferPoolTests.cpp
@@ -17,7 +17,7 @@
#include <gtest/gtest.h>
#include <renderstate/OffscreenBufferPool.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
using namespace android;
using namespace android::uirenderer;
diff --git a/libs/hwui/unit_tests/OpReordererTests.cpp b/libs/hwui/tests/unit/OpReordererTests.cpp
similarity index 94%
rename from libs/hwui/unit_tests/OpReordererTests.cpp
rename to libs/hwui/tests/unit/OpReordererTests.cpp
index 2ce1d0a..5eac498 100644
--- a/libs/hwui/unit_tests/OpReordererTests.cpp
+++ b/libs/hwui/tests/unit/OpReordererTests.cpp
@@ -21,7 +21,7 @@
#include <OpReorderer.h>
#include <RecordedOp.h>
#include <RecordingCanvas.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
#include <unordered_map>
@@ -65,12 +65,22 @@
virtual void startFrame(uint32_t width, uint32_t height, const Rect& repaintRect) {}
virtual void endFrame() {}
- // define virtual defaults for direct
-#define BASE_OP_METHOD(Type) \
+ // define virtual defaults for single draw methods
+#define X(Type) \
virtual void on##Type(const Type&, const BakedOpState&) { \
ADD_FAILURE() << #Type " not expected in this test"; \
}
- MAP_OPS(BASE_OP_METHOD)
+ MAP_OPS(X)
+#undef X
+
+ // define virtual defaults for merged draw methods
+#define X(Type) \
+ virtual void onMerged##Type##s(const MergedBakedOpList& opList) { \
+ ADD_FAILURE() << "Merged " #Type "s not expected in this test"; \
+ }
+ MAP_MERGED_OPS(X)
+#undef X
+
int getIndex() { return mIndex; }
protected:
@@ -83,11 +93,21 @@
*/
class TestDispatcher {
public:
-#define DISPATCHER_METHOD(Type) \
+ // define single op methods, which redirect to TestRendererBase
+#define X(Type) \
static void on##Type(TestRendererBase& renderer, const Type& op, const BakedOpState& state) { \
renderer.on##Type(op, state); \
}
- MAP_OPS(DISPATCHER_METHOD);
+ MAP_OPS(X);
+#undef X
+
+ // define merged op methods, which redirect to TestRendererBase
+#define X(Type) \
+ static void onMerged##Type##s(TestRendererBase& renderer, const MergedBakedOpList& opList) { \
+ renderer.onMerged##Type##s(opList); \
+ }
+ MAP_MERGED_OPS(X);
+#undef X
};
class FailRenderer : public TestRendererBase {};
@@ -124,6 +144,32 @@
EXPECT_EQ(4, renderer.getIndex()); // 2 ops + start + end
}
+TEST(OpReorderer, simpleStroke) {
+ class SimpleStrokeTestRenderer : public TestRendererBase {
+ public:
+ void onPointsOp(const PointsOp& op, const BakedOpState& state) override {
+ EXPECT_EQ(0, mIndex++);
+ // even though initial bounds are empty...
+ EXPECT_TRUE(op.unmappedBounds.isEmpty())
+ << "initial bounds should be empty, since they're unstroked";
+ EXPECT_EQ(Rect(45, 45, 55, 55), state.computedState.clippedBounds)
+ << "final bounds should account for stroke";
+ }
+ };
+
+ auto node = TestUtils::createNode(0, 0, 100, 200,
+ [](RenderProperties& props, RecordingCanvas& canvas) {
+ SkPaint strokedPaint;
+ strokedPaint.setStrokeWidth(10);
+ canvas.drawPoint(50, 50, strokedPaint);
+ });
+ OpReorderer reorderer(sEmptyLayerUpdateQueue, SkRect::MakeWH(100, 200), 100, 200,
+ createSyncedNodeList(node), sLightCenter);
+ SimpleStrokeTestRenderer renderer;
+ reorderer.replayBakedOps<TestDispatcher>(renderer);
+ EXPECT_EQ(1, renderer.getIndex());
+}
+
TEST(OpReorderer, simpleRejection) {
auto node = TestUtils::createNode(0, 0, 200, 200,
[](RenderProperties& props, RecordingCanvas& canvas) {
@@ -153,7 +199,8 @@
auto node = TestUtils::createNode(0, 0, 200, 200,
[](RenderProperties& props, RecordingCanvas& canvas) {
- SkBitmap bitmap = TestUtils::createSkBitmap(10, 10);
+ SkBitmap bitmap = TestUtils::createSkBitmap(10, 10,
+ kAlpha_8_SkColorType); // Disable merging by using alpha 8 bitmap
// Alternate between drawing rects and bitmaps, with bitmaps overlapping rects.
// Rects don't overlap bitmaps, so bitmaps should be brought to front as a group.
@@ -171,7 +218,7 @@
SimpleBatchingTestRenderer renderer;
reorderer.replayBakedOps<TestDispatcher>(renderer);
EXPECT_EQ(2 * LOOPS, renderer.getIndex())
- << "Expect number of ops = 2 * loop count"; // TODO: force no merging
+ << "Expect number of ops = 2 * loop count";
}
TEST(OpReorderer, textStrikethroughBatching) {
@@ -181,8 +228,10 @@
void onRectOp(const RectOp& op, const BakedOpState& state) override {
EXPECT_TRUE(mIndex++ >= LOOPS) << "Strikethrough rects should be above all text";
}
- void onTextOp(const TextOp& op, const BakedOpState& state) override {
- EXPECT_TRUE(mIndex++ < LOOPS) << "Text should be beneath all strikethrough rects";
+ void onMergedTextOps(const MergedBakedOpList& opList) override {
+ EXPECT_EQ(0, mIndex);
+ mIndex += opList.count;
+ EXPECT_EQ(5u, opList.count);
}
};
auto node = TestUtils::createNode(0, 0, 200, 2000,
diff --git a/libs/hwui/unit_tests/RecordingCanvasTests.cpp b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
similarity index 97%
rename from libs/hwui/unit_tests/RecordingCanvasTests.cpp
rename to libs/hwui/tests/unit/RecordingCanvasTests.cpp
index 81f0851..ba9d185 100644
--- a/libs/hwui/unit_tests/RecordingCanvasTests.cpp
+++ b/libs/hwui/tests/unit/RecordingCanvasTests.cpp
@@ -18,7 +18,7 @@
#include <RecordedOp.h>
#include <RecordingCanvas.h>
-#include <utils/TestUtils.h>
+#include <tests/common/TestUtils.h>
namespace android {
namespace uirenderer {
@@ -44,7 +44,7 @@
TEST(RecordingCanvas, drawLines) {
auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) {
SkPaint paint;
- paint.setStrokeWidth(20);
+ paint.setStrokeWidth(20); // doesn't affect recorded bounds - would be resolved at bake time
float points[] = { 0, 0, 20, 10, 30, 40, 90 }; // NB: only 1 valid line
canvas.drawLines(&points[0], 7, paint);
});
@@ -54,8 +54,8 @@
ASSERT_EQ(RecordedOpId::LinesOp, op->opId);
EXPECT_EQ(4, ((LinesOp*)op)->floatCount)
<< "float count must be rounded down to closest multiple of 4";
- EXPECT_EQ(Rect(-10, -10, 30, 20), op->unmappedBounds)
- << "unmapped bounds must be size of line, outset by 1/2 stroke width";
+ EXPECT_EQ(Rect(0, 0, 20, 10), op->unmappedBounds)
+ << "unmapped bounds must be size of line, and not outset for stroke width";
}
TEST(RecordingCanvas, drawRect) {
diff --git a/libs/hwui/unit_tests/StringUtilsTests.cpp b/libs/hwui/tests/unit/StringUtilsTests.cpp
similarity index 100%
rename from libs/hwui/unit_tests/StringUtilsTests.cpp
rename to libs/hwui/tests/unit/StringUtilsTests.cpp
diff --git a/libs/hwui/unit_tests/VectorDrawableTests.cpp b/libs/hwui/tests/unit/VectorDrawableTests.cpp
similarity index 100%
rename from libs/hwui/unit_tests/VectorDrawableTests.cpp
rename to libs/hwui/tests/unit/VectorDrawableTests.cpp
diff --git a/libs/hwui/unit_tests/how_to_run.txt b/libs/hwui/tests/unit/how_to_run.txt
similarity index 100%
rename from libs/hwui/unit_tests/how_to_run.txt
rename to libs/hwui/tests/unit/how_to_run.txt
diff --git a/libs/hwui/unit_tests/BakedOpStateTests.cpp b/libs/hwui/unit_tests/BakedOpStateTests.cpp
deleted file mode 100644
index 7ad2f9b..0000000
--- a/libs/hwui/unit_tests/BakedOpStateTests.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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 <gtest/gtest.h>
-
-#include <BakedOpState.h>
-#include <RecordedOp.h>
-#include <utils/TestUtils.h>
-
-namespace android {
-namespace uirenderer {
-
-TEST(ResolvedRenderState, resolution) {
- Matrix4 identity;
- identity.loadIdentity();
-
- Matrix4 translate10x20;
- translate10x20.loadTranslate(10, 20, 0);
-
- SkPaint paint;
- RectOp recordedOp(Rect(30, 40, 100, 200), translate10x20, Rect(0, 0, 100, 200), &paint);
- {
- // recorded with transform, no parent transform
- auto parentSnapshot = TestUtils::makeSnapshot(identity, Rect(0, 0, 100, 200));
- ResolvedRenderState state(*parentSnapshot, recordedOp);
- EXPECT_MATRIX_APPROX_EQ(state.transform, translate10x20);
- EXPECT_EQ(state.clipRect, Rect(0, 0, 100, 200));
- EXPECT_EQ(state.clippedBounds, Rect(40, 60, 100, 200)); // translated and also clipped
- }
- {
- // recorded with transform and parent transform
- auto parentSnapshot = TestUtils::makeSnapshot(translate10x20, Rect(0, 0, 100, 200));
- ResolvedRenderState state(*parentSnapshot, recordedOp);
-
- Matrix4 expectedTranslate;
- expectedTranslate.loadTranslate(20, 40, 0);
- EXPECT_MATRIX_APPROX_EQ(state.transform, expectedTranslate);
-
- // intersection of parent & transformed child clip
- EXPECT_EQ(state.clipRect, Rect(10, 20, 100, 200));
-
- // translated and also clipped
- EXPECT_EQ(state.clippedBounds, Rect(50, 80, 100, 200));
- }
-}
-
-TEST(BakedOpState, constructAndReject) {
- LinearAllocator allocator;
-
- Matrix4 translate100x0;
- translate100x0.loadTranslate(100, 0, 0);
-
- SkPaint paint;
- {
- RectOp rejectOp(Rect(30, 40, 100, 200), translate100x0, Rect(0, 0, 100, 200), &paint);
- auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 100, 200));
- BakedOpState* bakedOp = BakedOpState::tryConstruct(allocator, *snapshot, rejectOp);
-
- EXPECT_EQ(bakedOp, nullptr); // rejected by clip, so not constructed
- EXPECT_LE(allocator.usedSize(), 8u); // no significant allocation space used for rejected op
- }
- {
- RectOp successOp(Rect(30, 40, 100, 200), Matrix4::identity(), Rect(0, 0, 100, 200), &paint);
- auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 100, 200));
- BakedOpState* bakedOp = BakedOpState::tryConstruct(allocator, *snapshot, successOp);
-
- EXPECT_NE(bakedOp, nullptr); // NOT rejected by clip, so will be constructed
- EXPECT_GT(allocator.usedSize(), 64u); // relatively large alloc for non-rejected op
- }
-}
-
-TEST(BakedOpState, oplessConstructAndReject) {
- LinearAllocator allocator;
- {
- auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 0, 0)); // empty
- BakedOpState* bakedOp = BakedOpState::tryShadowOpConstruct(allocator, *snapshot, (ShadowOp*)0x1234);
-
- EXPECT_EQ(bakedOp, nullptr); // rejected by clip, so not constructed
- EXPECT_LE(allocator.usedSize(), 8u); // no significant allocation space used for rejected op
- }
- {
- auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(0, 0, 100, 200));
- BakedOpState* bakedOp = BakedOpState::tryShadowOpConstruct(allocator, *snapshot, (ShadowOp*)0x1234);
-
- EXPECT_NE(bakedOp, nullptr); // NOT rejected by clip, so will be constructed
- EXPECT_GT(allocator.usedSize(), 64u); // relatively large alloc for non-rejected op
- EXPECT_EQ((ShadowOp*)0x1234, bakedOp->op);
- }
-}
-
-}
-}
diff --git a/libs/hwui/utils/Color.h b/libs/hwui/utils/Color.h
new file mode 100644
index 0000000..b5157f4
--- /dev/null
+++ b/libs/hwui/utils/Color.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2015 The Android Open 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 COLOR_H
+#define COLOR_H
+
+#include <SkColor.h>
+
+namespace android {
+namespace uirenderer {
+ namespace Color {
+ enum Color {
+ Red_500 = 0xFFF44336,
+ Pink_500 = 0xFFE91E63,
+ Purple_500 = 0xFF9C27B0,
+ DeepPurple_500 = 0xFF673AB7,
+ Indigo_500 = 0xFF3F51B5,
+ Blue_500 = 0xFF2196F3,
+ LightBlue_300 = 0xFF4FC3F7,
+ LightBlue_500 = 0xFF03A9F4,
+ Cyan_500 = 0xFF00BCD4,
+ Teal_500 = 0xFF009688,
+ Teal_700 = 0xFF00796B,
+ Green_500 = 0xFF4CAF50,
+ Green_700 = 0xFF388E3C,
+ LightGreen_500 = 0xFF8BC34A,
+ LightGreen_700 = 0xFF689F38,
+ Lime_500 = 0xFFCDDC39,
+ Yellow_500 = 0xFFFFEB3B,
+ Amber_500 = 0xFFFFC107,
+ Orange_500 = 0xFFFF9800,
+ DeepOrange_500 = 0xFFFF5722,
+ Brown_500 = 0xFF795548,
+ Grey_200 = 0xFFEEEEEE,
+ Grey_500 = 0xFF9E9E9E,
+ Grey_700 = 0xFF616161,
+ BlueGrey_500 = 0xFF607D8B,
+ Transparent = 0x00000000,
+ Black = 0xFF000000,
+ White = 0xFFFFFFFF,
+ };
+ }
+
+ static_assert(Color::White == SK_ColorWHITE, "color format has changed");
+ static_assert(Color::Black == SK_ColorBLACK, "color format has changed");
+
+ // Array of bright (500 intensity) colors for synthetic content
+ static const Color::Color BrightColors[] = {
+ Color::Red_500,
+ Color::Pink_500,
+ Color::Purple_500,
+ Color::DeepPurple_500,
+ Color::Indigo_500,
+ Color::Blue_500,
+ Color::LightBlue_500,
+ Color::Cyan_500,
+ Color::Teal_500,
+ Color::Green_500,
+ Color::LightGreen_500,
+ Color::Lime_500,
+ Color::Yellow_500,
+ Color::Amber_500,
+ Color::Orange_500,
+ Color::DeepOrange_500,
+ Color::Brown_500,
+ Color::Grey_500,
+ Color::BlueGrey_500,
+ };
+ static constexpr int BrightColorsCount = sizeof(BrightColors) / sizeof(Color::Color);
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* TEST_UTILS_H */
diff --git a/libs/hwui/utils/RingBuffer.h b/libs/hwui/utils/RingBuffer.h
index 6895f07..06bcdcd 100644
--- a/libs/hwui/utils/RingBuffer.h
+++ b/libs/hwui/utils/RingBuffer.h
@@ -32,7 +32,7 @@
~RingBuffer() {}
constexpr size_t capacity() const { return SIZE; }
- size_t size() { return mCount; }
+ size_t size() const { return mCount; }
T& next() {
mHead = (mHead + 1) % SIZE;
@@ -54,6 +54,10 @@
return mBuffer[(mHead + index + 1) % mCount];
}
+ const T& operator[](size_t index) const {
+ return mBuffer[(mHead + index + 1) % mCount];
+ }
+
void clear() {
mCount = 0;
mHead = -1;
diff --git a/libs/input/PointerController.cpp b/libs/input/PointerController.cpp
index bd6af78..6a1167a 100644
--- a/libs/input/PointerController.cpp
+++ b/libs/input/PointerController.cpp
@@ -91,7 +91,14 @@
mLocked.buttonState = 0;
+ mPolicy->loadPointerIcon(&mLocked.pointerIcon);
+
loadResources();
+
+ if (mLocked.pointerIcon.isValid()) {
+ mLocked.pointerIconChanged = true;
+ updatePointerLocked();
+ }
}
PointerController::~PointerController() {
@@ -325,6 +332,23 @@
}
}
+void PointerController::reloadPointerResources() {
+ AutoMutex _l(mLock);
+
+ loadResources();
+
+ if (mLocked.presentation == PRESENTATION_POINTER) {
+ mLocked.additionalMouseResources.clear();
+ mLocked.animationResources.clear();
+ mPolicy->loadPointerIcon(&mLocked.pointerIcon);
+ mPolicy->loadAdditionalMouseResources(&mLocked.additionalMouseResources,
+ &mLocked.animationResources);
+ }
+
+ mLocked.presentationChanged = true;
+ updatePointerLocked();
+}
+
void PointerController::setDisplayViewport(int32_t width, int32_t height, int32_t orientation) {
AutoMutex _l(mLock);
@@ -415,15 +439,6 @@
}
}
-void PointerController::setPointerIcon(const SpriteIcon& icon) {
- AutoMutex _l(mLock);
-
- mLocked.pointerIcon = icon.copy();
- mLocked.pointerIconChanged = true;
-
- updatePointerLocked();
-}
-
void PointerController::handleMessage(const Message& message) {
switch (message.what) {
case MSG_INACTIVITY_TIMEOUT:
diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h
index b6c01d2..4fd2d85 100644
--- a/libs/input/PointerController.h
+++ b/libs/input/PointerController.h
@@ -62,6 +62,7 @@
virtual ~PointerControllerPolicyInterface() { }
public:
+ virtual void loadPointerIcon(SpriteIcon* icon) = 0;
virtual void loadPointerResources(PointerResources* outResources) = 0;
virtual void loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources,
std::map<int32_t, PointerAnimation>* outAnimationResources) = 0;
@@ -105,8 +106,8 @@
void updatePointerShape(int32_t iconId);
void setDisplayViewport(int32_t width, int32_t height, int32_t orientation);
- void setPointerIcon(const SpriteIcon& icon);
void setInactivityTimeout(InactivityTimeout inactivityTimeout);
+ void reloadPointerResources();
private:
static const size_t MAX_RECYCLED_SPRITES = 12;
diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java
index 045216b..3e75759 100644
--- a/media/java/android/media/Image.java
+++ b/media/java/android/media/Image.java
@@ -141,6 +141,16 @@
* {@link android.hardware.camera2.CameraDevice CameraDevice}.
* </td>
* </tr>
+ * <tr>
+ * <td>{@link android.graphics.ImageFormat#RAW_PRIVATE RAW_PRIVATE}</td>
+ * <td>1</td>
+ * <td>A single plane of raw sensor image data of private layout.
+ * The details of the layout is implementation specific. Row stride and
+ * pixel stride are undefined for this format. Calling {@link Plane#getRowStride()}
+ * or {@link Plane#getPixelStride()} on RAW_PRIVATE image will cause
+ * UnSupportedOperationException being thrown.
+ * </td>
+ * </tr>
* </table>
*
* @see android.graphics.ImageFormat
@@ -341,7 +351,13 @@
* <p>The row stride for this color plane, in bytes.</p>
*
* <p>This is the distance between the start of two consecutive rows of
- * pixels in the image. The row stride is always greater than 0.</p>
+ * pixels in the image. Note that row stried is undefined for some formats
+ * such as
+ * {@link android.graphics.ImageFormat#RAW_PRIVATE RAW_PRIVATE},
+ * and calling getRowStride on images of these formats will
+ * cause an UnsupportedOperationException being thrown.
+ * For formats where row stride is well defined, the row stride
+ * is always greater than 0.</p>
*/
public abstract int getRowStride();
/**
@@ -350,7 +366,12 @@
* <p>This is the distance between two consecutive pixel values in a row
* of pixels. It may be larger than the size of a single pixel to
* account for interleaved image data or padded formats.
- * The pixel stride is always greater than 0.</p>
+ * Note that pixel stride is undefined for some formats such as
+ * {@link android.graphics.ImageFormat#RAW_PRIVATE RAW_PRIVATE},
+ * and calling getPixelStride on images of these formats will
+ * cause an UnsupportedOperationException being thrown.
+ * For formats where pixel stride is well defined, the pixel stride
+ * is always greater than 0.</p>
*/
public abstract int getPixelStride();
/**
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java
index 2164eec..397ab15 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -17,10 +17,10 @@
package android.media;
import android.graphics.ImageFormat;
-import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.util.Log;
import android.view.Surface;
import dalvik.system.VMRuntime;
@@ -29,6 +29,8 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.NioUtils;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -145,7 +147,7 @@
"NV21 format is not supported");
}
- mNumPlanes = getNumPlanesFromFormat();
+ mNumPlanes = ImageUtils.getNumPlanesForFormat(mFormat);
nativeInit(new WeakReference<ImageReader>(this), width, height, format, maxImages);
@@ -323,21 +325,27 @@
* @see #ACQUIRE_SUCCESS
*/
private int acquireNextSurfaceImage(SurfaceImage si) {
+ synchronized (mCloseLock) {
+ int status = nativeImageSetup(si);
- int status = nativeImageSetup(si);
+ switch (status) {
+ case ACQUIRE_SUCCESS:
+ si.createSurfacePlanes();
+ si.mIsImageValid = true;
+ case ACQUIRE_NO_BUFS:
+ case ACQUIRE_MAX_IMAGES:
+ break;
+ default:
+ throw new AssertionError("Unknown nativeImageSetup return code " + status);
+ }
- switch (status) {
- case ACQUIRE_SUCCESS:
- si.createSurfacePlanes();
- si.mIsImageValid = true;
- case ACQUIRE_NO_BUFS:
- case ACQUIRE_MAX_IMAGES:
- break;
- default:
- throw new AssertionError("Unknown nativeImageSetup return code " + status);
+ // Only keep track the successfully acquired image, as the native buffer is only mapped
+ // for such case.
+ if (status == ACQUIRE_SUCCESS) {
+ mAcquiredImages.add(si);
+ }
+ return status;
}
-
- return status;
}
/**
@@ -398,7 +406,11 @@
"This image was not produced by an ImageReader");
}
SurfaceImage si = (SurfaceImage) i;
- if (si.getReader() != this) {
+ if (si.mIsImageValid == false) {
+ return;
+ }
+
+ if (si.getReader() != this || !mAcquiredImages.contains(i)) {
throw new IllegalArgumentException(
"This image was not produced by this ImageReader");
}
@@ -406,6 +418,7 @@
si.clearSurfacePlanes();
nativeReleaseImage(i);
si.mIsImageValid = false;
+ mAcquiredImages.remove(i);
}
/**
@@ -475,7 +488,24 @@
public void close() {
setOnImageAvailableListener(null, null);
if (mSurface != null) mSurface.release();
- nativeClose();
+
+ /**
+ * Close all outstanding acquired images before closing the ImageReader. It is a good
+ * practice to close all the images as soon as it is not used to reduce system instantaneous
+ * memory pressure. CopyOnWrite list will use a copy of current list content. For the images
+ * being closed by other thread (e.g., GC thread), doubling the close call is harmless. For
+ * the image being acquired by other threads, mCloseLock is used to synchronize close and
+ * acquire operations.
+ */
+ synchronized (mCloseLock) {
+ for (Image image : mAcquiredImages) {
+ image.close();
+ }
+ mAcquiredImages.clear();
+
+ nativeClose();
+ }
+
if (mEstimatedNativeAllocBytes > 0) {
VMRuntime.getRuntime().registerNativeFree(mEstimatedNativeAllocBytes);
mEstimatedNativeAllocBytes = 0;
@@ -540,45 +570,6 @@
nativeDetachImage(image);
si.setDetached(true);
- }
-
- /**
- * Only a subset of the formats defined in
- * {@link android.graphics.ImageFormat ImageFormat} and
- * {@link android.graphics.PixelFormat PixelFormat} are supported by
- * ImageReader. When reading RGB data from a surface, the formats defined in
- * {@link android.graphics.PixelFormat PixelFormat} can be used, when
- * reading YUV, JPEG or raw sensor data (for example, from camera or video
- * decoder), formats from {@link android.graphics.ImageFormat ImageFormat}
- * are used.
- */
- private int getNumPlanesFromFormat() {
- switch (mFormat) {
- case ImageFormat.YV12:
- case ImageFormat.YUV_420_888:
- case ImageFormat.NV21:
- return 3;
- case ImageFormat.NV16:
- return 2;
- case PixelFormat.RGB_565:
- case PixelFormat.RGBA_8888:
- case PixelFormat.RGBX_8888:
- case PixelFormat.RGB_888:
- case ImageFormat.JPEG:
- case ImageFormat.YUY2:
- case ImageFormat.Y8:
- case ImageFormat.Y16:
- case ImageFormat.RAW_SENSOR:
- case ImageFormat.RAW10:
- case ImageFormat.DEPTH16:
- case ImageFormat.DEPTH_POINT_CLOUD:
- return 1;
- case ImageFormat.PRIVATE:
- return 0;
- default:
- throw new UnsupportedOperationException(
- String.format("Invalid format specified %d", mFormat));
- }
}
private boolean isImageOwnedbyMe(Image image) {
@@ -612,7 +603,6 @@
}
}
-
private final int mWidth;
private final int mHeight;
private final int mFormat;
@@ -622,8 +612,12 @@
private int mEstimatedNativeAllocBytes;
private final Object mListenerLock = new Object();
+ private final Object mCloseLock = new Object();
private OnImageAvailableListener mListener;
private ListenerHandler mListenerHandler;
+ // Keep track of the successfully acquired Images. This need to be thread safe as the images
+ // could be closed by different threads (e.g., application thread and GC thread).
+ private List<Image> mAcquiredImages = new CopyOnWriteArrayList<Image>();
/**
* This field is used by native code, do not access or modify.
@@ -657,9 +651,7 @@
@Override
public void close() {
- if (mIsImageValid) {
- ImageReader.this.releaseImage(this);
- }
+ ImageReader.this.releaseImage(this);
}
public ImageReader getReader() {
@@ -683,6 +675,7 @@
switch(getFormat()) {
case ImageFormat.JPEG:
case ImageFormat.DEPTH_POINT_CLOUD:
+ case ImageFormat.RAW_PRIVATE:
width = ImageReader.this.getWidth();
break;
default:
@@ -698,6 +691,7 @@
switch(getFormat()) {
case ImageFormat.JPEG:
case ImageFormat.DEPTH_POINT_CLOUD:
+ case ImageFormat.RAW_PRIVATE:
height = ImageReader.this.getHeight();
break;
default:
@@ -799,12 +793,20 @@
@Override
public int getPixelStride() {
SurfaceImage.this.throwISEIfImageIsInvalid();
+ if (ImageReader.this.mFormat == ImageFormat.RAW_PRIVATE) {
+ throw new UnsupportedOperationException(
+ "getPixelStride is not supported for RAW_PRIVATE plane");
+ }
return mPixelStride;
}
@Override
public int getRowStride() {
SurfaceImage.this.throwISEIfImageIsInvalid();
+ if (ImageReader.this.mFormat == ImageFormat.RAW_PRIVATE) {
+ throw new UnsupportedOperationException(
+ "getRowStride is not supported for RAW_PRIVATE plane");
+ }
return mRowStride;
}
diff --git a/media/java/android/media/ImageUtils.java b/media/java/android/media/ImageUtils.java
index ba3949a..abf6b20 100644
--- a/media/java/android/media/ImageUtils.java
+++ b/media/java/android/media/ImageUtils.java
@@ -57,7 +57,11 @@
case ImageFormat.Y8:
case ImageFormat.Y16:
case ImageFormat.RAW_SENSOR:
+ case ImageFormat.RAW_PRIVATE:
case ImageFormat.RAW10:
+ case ImageFormat.RAW12:
+ case ImageFormat.DEPTH16:
+ case ImageFormat.DEPTH_POINT_CLOUD:
return 1;
case ImageFormat.PRIVATE:
return 0;
@@ -95,6 +99,10 @@
dst.getFormat() == ImageFormat.PRIVATE) {
throw new IllegalArgumentException("PRIVATE format images are not copyable");
}
+ if (src.getFormat() == ImageFormat.RAW_PRIVATE) {
+ throw new IllegalArgumentException(
+ "Copy of RAW_OPAQUE format has not been implemented");
+ }
if (!(dst.getOwner() instanceof ImageWriter)) {
throw new IllegalArgumentException("Destination image is not from ImageWriter. Only"
+ " the images from ImageWriter are writable");
@@ -190,7 +198,8 @@
case ImageFormat.YV12:
case ImageFormat.YUV_420_888:
case ImageFormat.NV21:
- case ImageFormat.PRIVATE: // A really rough estimate because the real size is unknown.
+ case ImageFormat.RAW12:
+ case ImageFormat.PRIVATE: // A rough estimate because the real size is unknown.
estimatedBytePerPixel = 1.5;
break;
case ImageFormat.NV16:
@@ -198,6 +207,7 @@
case ImageFormat.YUY2:
case ImageFormat.Y16:
case ImageFormat.RAW_SENSOR:
+ case ImageFormat.RAW_PRIVATE: // round estimate, real size is unknown
case ImageFormat.DEPTH16:
estimatedBytePerPixel = 2.0;
break;
@@ -242,6 +252,7 @@
case ImageFormat.Y16:
case ImageFormat.RAW_SENSOR:
case ImageFormat.RAW10:
+ case ImageFormat.RAW12:
return new Size(image.getWidth(), image.getHeight());
case ImageFormat.PRIVATE:
return new Size(0, 0);
diff --git a/media/java/android/media/ImageWriter.java b/media/java/android/media/ImageWriter.java
index 9fb3286..851d436 100644
--- a/media/java/android/media/ImageWriter.java
+++ b/media/java/android/media/ImageWriter.java
@@ -18,17 +18,21 @@
import android.graphics.ImageFormat;
import android.graphics.Rect;
+import android.hardware.camera2.utils.SurfaceUtils;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.util.Size;
import android.view.Surface;
+import dalvik.system.VMRuntime;
+
import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.NioUtils;
-import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
/**
* <p>
@@ -83,8 +87,10 @@
private int mWriterFormat;
private final int mMaxImages;
- // Keep track of the currently dequeued Image.
- private List<Image> mDequeuedImages = new ArrayList<Image>();
+ // Keep track of the currently dequeued Image. This need to be thread safe as the images
+ // could be closed by different threads (e.g., application thread and GC thread).
+ private List<Image> mDequeuedImages = new CopyOnWriteArrayList<Image>();
+ private int mEstimatedNativeAllocBytes;
/**
* <p>
@@ -128,6 +134,16 @@
// Note that the underlying BufferQueue is working in synchronous mode
// to avoid dropping any buffers.
mNativeContext = nativeInit(new WeakReference<ImageWriter>(this), surface, maxImages);
+
+ // Estimate the native buffer allocation size and register it so it gets accounted for
+ // during GC. Note that this doesn't include the buffers required by the buffer queue
+ // itself and the buffers requested by the producer.
+ Size surfSize = SurfaceUtils.getSurfaceSize(surface);
+ int format = SurfaceUtils.getSurfaceFormat(surface);
+ mEstimatedNativeAllocBytes =
+ ImageUtils.getEstimatedNativeAllocBytes(surfSize.getWidth(),surfSize.getHeight(),
+ format, maxImages);
+ VMRuntime.getRuntime().registerNativeAllocation(mEstimatedNativeAllocBytes);
}
/**
@@ -432,6 +448,11 @@
mDequeuedImages.clear();
nativeClose(mNativeContext);
mNativeContext = 0;
+
+ if (mEstimatedNativeAllocBytes > 0) {
+ VMRuntime.getRuntime().registerNativeFree(mEstimatedNativeAllocBytes);
+ mEstimatedNativeAllocBytes = 0;
+ }
}
@Override
@@ -569,9 +590,8 @@
}
WriterSurfaceImage wi = (WriterSurfaceImage) image;
-
if (!wi.mIsImageValid) {
- throw new IllegalStateException("Image is invalid");
+ return;
}
/**
diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java
index ab61e2b..db0c5bb 100644
--- a/media/java/android/media/MediaDrm.java
+++ b/media/java/android/media/MediaDrm.java
@@ -906,18 +906,6 @@
throws DeniedByServerException;
/**
- * Remove provisioning from a device. Only system apps may unprovision a
- * device. Note that removing provisioning will invalidate any keys saved
- * for offline use (KEY_TYPE_OFFLINE), which may render downloaded content
- * unplayable until new licenses are acquired. Since provisioning is global
- * to the device, license invalidation will apply to all content downloaded
- * by any app, so appropriate warnings should be given to the user.
- * @hide
- */
- @SystemApi
- public native void unprovisionDevice();
-
- /**
* A means of enforcing limits on the number of concurrent streams per subscriber
* across devices is provided via SecureStop. This is achieved by securely
* monitoring the lifetime of sessions.
diff --git a/media/java/android/media/MediaMetadataEditor.java b/media/java/android/media/MediaMetadataEditor.java
index 566b93f..877c872 100644
--- a/media/java/android/media/MediaMetadataEditor.java
+++ b/media/java/android/media/MediaMetadataEditor.java
@@ -73,7 +73,8 @@
/**
* Applies all of the metadata changes that have been set since the MediaMetadataEditor instance
- * was created or since {@link #clear()} was called.
+ * was created or since {@link #clear()} was called. Subclasses should synchronize on
+ * {@code this} for thread safety.
*/
public abstract void apply();
diff --git a/media/java/android/media/MediaRouter.java b/media/java/android/media/MediaRouter.java
index a046512..bcc2b406 100644
--- a/media/java/android/media/MediaRouter.java
+++ b/media/java/android/media/MediaRouter.java
@@ -18,6 +18,7 @@
import android.Manifest;
import android.annotation.DrawableRes;
+import android.annotation.IntDef;
import android.annotation.NonNull;
import android.app.ActivityThread;
import android.content.BroadcastReceiver;
@@ -41,6 +42,8 @@
import android.util.Log;
import android.view.Display;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -201,6 +204,7 @@
info.mDescription = sStatic.mResources.getText(
com.android.internal.R.string.bluetooth_a2dp_audio_route_name);
info.mSupportedTypes = ROUTE_TYPE_LIVE_AUDIO;
+ info.mDeviceType = RouteInfo.DEVICE_TYPE_BLUETOOTH;
sStatic.mBluetoothA2dpRoute = info;
addRouteStatic(sStatic.mBluetoothA2dpRoute);
} else {
@@ -480,6 +484,7 @@
route.mName = globalRoute.name;
route.mDescription = globalRoute.description;
route.mSupportedTypes = globalRoute.supportedTypes;
+ route.mDeviceType = globalRoute.deviceType;
route.mEnabled = globalRoute.enabled;
route.setRealStatusCode(globalRoute.statusCode);
route.mPlaybackType = globalRoute.playbackType;
@@ -1411,6 +1416,7 @@
newRoute.mDescription = sStatic.mResources.getText(
com.android.internal.R.string.wireless_display_route_description);
newRoute.updatePresentationDisplay();
+ newRoute.mDeviceType = RouteInfo.DEVICE_TYPE_TV;
return newRoute;
}
@@ -1470,6 +1476,7 @@
CharSequence mDescription;
private CharSequence mStatus;
int mSupportedTypes;
+ int mDeviceType;
RouteGroup mGroup;
final RouteCategory mCategory;
Drawable mIcon;
@@ -1502,6 +1509,42 @@
/** @hide */ public static final int STATUS_IN_USE = 5;
/** @hide */ public static final int STATUS_CONNECTED = 6;
+ /** @hide */
+ @IntDef({DEVICE_TYPE_UNKNOWN, DEVICE_TYPE_TV, DEVICE_TYPE_SPEAKER, DEVICE_TYPE_BLUETOOTH})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface DeviceType {}
+
+ /**
+ * The default receiver device type of the route indicating the type is unknown.
+ *
+ * @see #getDeviceType
+ */
+ public static final int DEVICE_TYPE_UNKNOWN = 0;
+
+ /**
+ * A receiver device type of the route indicating the presentation of the media is happening
+ * on a TV.
+ *
+ * @see #getDeviceType
+ */
+ public static final int DEVICE_TYPE_TV = 1;
+
+ /**
+ * A receiver device type of the route indicating the presentation of the media is happening
+ * on a speaker.
+ *
+ * @see #getDeviceType
+ */
+ public static final int DEVICE_TYPE_SPEAKER = 2;
+
+ /**
+ * A receiver device type of the route indicating the presentation of the media is happening
+ * on a bluetooth device such as a bluetooth speaker.
+ *
+ * @see #getDeviceType
+ */
+ public static final int DEVICE_TYPE_BLUETOOTH = 3;
+
private Object mTag;
/**
@@ -1533,6 +1576,7 @@
RouteInfo(RouteCategory category) {
mCategory = category;
+ mDeviceType = DEVICE_TYPE_UNKNOWN;
}
/**
@@ -1670,6 +1714,18 @@
return mSupportedTypes;
}
+ /**
+ * Gets the type of the receiver device associated with this route.
+ *
+ * @return The type of the receiver device associated with this route:
+ * {@link #DEVICE_TYPE_BLUETOOTH}, {@link #DEVICE_TYPE_TV}, {@link #DEVICE_TYPE_SPEAKER},
+ * or {@link #DEVICE_TYPE_UNKNOWN}.
+ */
+ @DeviceType
+ public int getDeviceType() {
+ return mDeviceType;
+ }
+
/** @hide */
public boolean matchesTypes(int types) {
return (mSupportedTypes & types) != 0;
diff --git a/media/java/android/media/MediaRouterClientState.java b/media/java/android/media/MediaRouterClientState.java
index 54b8276..34e18f6 100644
--- a/media/java/android/media/MediaRouterClientState.java
+++ b/media/java/android/media/MediaRouterClientState.java
@@ -104,6 +104,7 @@
public int volumeMax;
public int volumeHandling;
public int presentationDisplayId;
+ public @MediaRouter.RouteInfo.DeviceType int deviceType;
public RouteInfo(String id) {
this.id = id;
@@ -113,6 +114,7 @@
playbackStream = -1;
volumeHandling = MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED;
presentationDisplayId = -1;
+ deviceType = MediaRouter.RouteInfo.DEVICE_TYPE_UNKNOWN;
}
public RouteInfo(RouteInfo other) {
@@ -128,6 +130,7 @@
volumeMax = other.volumeMax;
volumeHandling = other.volumeHandling;
presentationDisplayId = other.presentationDisplayId;
+ deviceType = other.deviceType;
}
RouteInfo(Parcel in) {
@@ -143,6 +146,7 @@
volumeMax = in.readInt();
volumeHandling = in.readInt();
presentationDisplayId = in.readInt();
+ deviceType = in.readInt();
}
@Override
@@ -164,6 +168,7 @@
dest.writeInt(volumeMax);
dest.writeInt(volumeHandling);
dest.writeInt(presentationDisplayId);
+ dest.writeInt(deviceType);
}
@Override
@@ -180,6 +185,7 @@
+ ", volumeMax=" + volumeMax
+ ", volumeHandling=" + volumeHandling
+ ", presentationDisplayId=" + presentationDisplayId
+ + ", deviceType=" + deviceType
+ " }";
}
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index 3ffdb17..1c043e0 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -101,6 +101,8 @@
void setOpaqueConsumer(const sp<BufferItemConsumer>& consumer) { mOpaqueConsumer = consumer; }
BufferItemConsumer* getOpaqueConsumer() { return mOpaqueConsumer.get(); }
// This is the only opaque format exposed in the ImageFormat public API.
+ // Note that we do support CPU access for HAL_PIXEL_FORMAT_RAW_OPAQUE
+ // (ImageFormat#RAW_PRIVATE) so it doesn't count as opaque here.
bool isOpaque() { return mFormat == HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED; }
void setProducer(const sp<IGraphicBufferProducer>& producer) { mProducer = producer; }
@@ -470,7 +472,8 @@
case HAL_PIXEL_FORMAT_BLOB:
// Used for JPEG data, height must be 1, width == size, single plane.
ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
- ALOG_ASSERT(buffer->height == 1, "JPEG should has height value %d", buffer->height);
+ ALOG_ASSERT(buffer->height == 1,
+ "JPEG should has height value one but got %d", buffer->height);
pData = buffer->data;
dataSize = Image_getJpegSize(buffer, usingRGBAOverride);
@@ -482,6 +485,14 @@
pData = buffer->data;
dataSize = buffer->stride * buffer->height * bytesPerPixel;
break;
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ // Used for RAW_OPAQUE data, height must be 1, width == size, single plane.
+ ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
+ ALOG_ASSERT(buffer->height == 1,
+ "RAW_PRIVATE should has height value one but got %d", buffer->height);
+ pData = buffer->data;
+ dataSize = buffer->width;
+ break;
case HAL_PIXEL_FORMAT_RAW10:
// Single plane 10bpp bayer data.
ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
@@ -593,6 +604,10 @@
ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
pixelStride = 3;
break;
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
+ pixelStride = 0; // RAW OPAQUE doesn't have pixel stride
+ break;
default:
jniThrowExceptionFmt(env, "java/lang/UnsupportedOperationException",
"Pixel format: 0x%x is unsupported", fmt);
@@ -669,6 +684,10 @@
ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
rowStride = buffer->stride * 3;
break;
+ case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+ ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
+ rowStride = 0; // RAW OPAQUE doesn't have row stride
+ break;
default:
ALOGE("%s Pixel format: 0x%x is unsupported", __FUNCTION__, fmt);
jniThrowException(env, "java/lang/UnsupportedOperationException",
@@ -933,7 +952,7 @@
CpuConsumer* consumer = ctx->getCpuConsumer();
CpuConsumer::LockedBuffer* buffer = Image_getLockedBuffer(env, image);
if (!buffer) {
- ALOGW("Image already released!!!");
+ // Release an already closed image is harmless.
return;
}
consumer->unlockBuffer(*buffer);
@@ -1078,7 +1097,8 @@
ALOGV("%s:", __FUNCTION__);
JNIImageReaderContext* ctx = ImageReader_getContext(env, thiz);
if (ctx == NULL) {
- jniThrowRuntimeException(env, "ImageReaderContext is not initialized");
+ jniThrowException(env, "java/lang/IllegalStateException",
+ "ImageReader is not initialized or was already closed");
return -1;
}
diff --git a/media/jni/android_media_ImageWriter.cpp b/media/jni/android_media_ImageWriter.cpp
index f92a8ef..f50da85 100644
--- a/media/jni/android_media_ImageWriter.cpp
+++ b/media/jni/android_media_ImageWriter.cpp
@@ -403,8 +403,7 @@
ALOGV("%s", __FUNCTION__);
JNIImageWriterContext* const ctx = reinterpret_cast<JNIImageWriterContext *>(nativeCtx);
if (ctx == NULL || thiz == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException",
- "ImageWriterContext is not initialized");
+ ALOGW("ImageWriter#close called before Image#close, consider calling Image#close first");
return;
}
@@ -414,8 +413,7 @@
int fenceFd = -1;
Image_getNativeContext(env, image, &buffer, &fenceFd);
if (buffer == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException",
- "Image is not initialized");
+ // Cancel an already cancelled image is harmless.
return;
}
diff --git a/media/jni/android_media_MediaDrm.cpp b/media/jni/android_media_MediaDrm.cpp
index 275de1ad..b8849c6 100644
--- a/media/jni/android_media_MediaDrm.cpp
+++ b/media/jni/android_media_MediaDrm.cpp
@@ -1048,22 +1048,6 @@
return certificateObj;
}
-static void android_media_MediaDrm_unprovisionDeviceNative(
- JNIEnv *env, jobject thiz) {
- sp<IDrm> drm = GetDrm(env, thiz);
-
- if (drm == NULL) {
- jniThrowException(env, "java/lang/IllegalStateException",
- "MediaDrm obj is null");
- return;
- }
-
- status_t err = drm->unprovisionDevice();
-
- throwExceptionAsNecessary(env, err, "Failed to handle provision response");
- return;
-}
-
static jobject android_media_MediaDrm_getSecureStops(
JNIEnv *env, jobject thiz) {
sp<IDrm> drm = GetDrm(env, thiz);
@@ -1496,9 +1480,6 @@
{ "provideProvisionResponseNative", "([B)Landroid/media/MediaDrm$Certificate;",
(void *)android_media_MediaDrm_provideProvisionResponseNative },
- { "unprovisionDevice", "()V",
- (void *)android_media_MediaDrm_unprovisionDeviceNative },
-
{ "getSecureStops", "()Ljava/util/List;",
(void *)android_media_MediaDrm_getSecureStops },
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
index 57969ba..6f74203 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
@@ -129,7 +129,7 @@
int res = mUtils.getCameraService().supportsCameraApi(cameraId, API_VERSION_2);
- if (res != CameraBinderTestUtils.NO_ERROR && res != CameraBinderTestUtils.EOPNOTSUPP) {
+ if (res != CameraBinderTestUtils.NO_ERROR && res != -android.system.OsConstants.EOPNOTSUPP) {
fail("Camera service returned bad value when queried if it supports camera2 api: "
+ res + " for camera ID " + cameraId);
}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java
index 6be538a..5c4b23b 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java
@@ -2,6 +2,7 @@
package com.android.mediaframeworktest.integration;
import static org.junit.Assert.assertNotNull;
+import static android.system.OsConstants.*;
import android.content.Context;
import android.content.pm.FeatureInfo;
@@ -18,11 +19,10 @@
static final String CAMERA_SERVICE_BINDER_NAME = "media.camera";
protected static final int USE_CALLING_UID = -1;
- protected static final int BAD_VALUE = -22;
- protected static final int INVALID_OPERATION = -38;
- protected static final int ALREADY_EXISTS = -17;
+ protected static final int BAD_VALUE = -EINVAL;
+ protected static final int INVALID_OPERATION = -ENOSYS;
+ protected static final int ALREADY_EXISTS = -EEXIST;
public static final int NO_ERROR = 0;
- public static final int EOPNOTSUPP = -95;
private final Context mContext;
public CameraBinderTestUtils(Context context) {
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraUtilsBinderDecoratorTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraUtilsBinderDecoratorTest.java
index 727af78..33c6388 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraUtilsBinderDecoratorTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraUtilsBinderDecoratorTest.java
@@ -27,6 +27,7 @@
import static org.mockito.Mockito.*;
import static android.hardware.camera2.utils.CameraBinderDecorator.*;
import static android.hardware.camera2.CameraAccessException.*;
+import static android.system.OsConstants.*;
import junit.framework.Assert;
@@ -78,9 +79,9 @@
when(mock.doSomethingAlreadyExists()).thenReturn(ALREADY_EXISTS);
when(mock.doSomethingBadValue()).thenReturn(BAD_VALUE);
when(mock.doSomethingDeadObject()).thenReturn(DEAD_OBJECT);
- when(mock.doSomethingBadPolicy()).thenReturn(EACCES);
- when(mock.doSomethingDeviceBusy()).thenReturn(EBUSY);
- when(mock.doSomethingNoSuchDevice()).thenReturn(ENODEV);
+ when(mock.doSomethingBadPolicy()).thenReturn(-EACCES);
+ when(mock.doSomethingDeviceBusy()).thenReturn(-EBUSY);
+ when(mock.doSomethingNoSuchDevice()).thenReturn(-ENODEV);
when(mock.doSomethingUnknownErrorCode()).thenReturn(SOME_ARBITRARY_NEGATIVE_INT);
when(mock.doSomethingThrowDeadObjectException()).thenThrow(new DeadObjectException());
when(mock.doSomethingThrowTransactionTooLargeException()).thenThrow(
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
index 60f5d60..8cc79a4c 100644
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ b/packages/DocumentsUI/AndroidManifest.xml
@@ -41,6 +41,7 @@
<activity
android:name=".DownloadsActivity"
android:theme="@style/DocumentsFullScreenTheme"
+ android:label="@string/downloads_label"
android:icon="@drawable/ic_doc_text">
<intent-filter>
<action android:name="android.provider.action.MANAGE_ROOT" />
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
index 3daecc7..1599178 100644
--- a/packages/DocumentsUI/res/values-af/strings.xml
+++ b/packages/DocumentsUI/res/values-af/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
<string name="files_label" msgid="6051402950202690279">"Lêers"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Aflaaie"</string>
<string name="title_open" msgid="4353228937663917801">"Maak oop vanuit"</string>
<string name="title_save" msgid="2433679664882857999">"Stoor na"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nuwe vouer"</string>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
index 43db786..1a6c85a 100644
--- a/packages/DocumentsUI/res/values-am/strings.xml
+++ b/packages/DocumentsUI/res/values-am/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ሰነዶች"</string>
<string name="files_label" msgid="6051402950202690279">"ፋይሎች"</string>
+ <string name="downloads_label" msgid="959113951084633612">"የወረዱ"</string>
<string name="title_open" msgid="4353228937663917801">"ክፈት ከ"</string>
<string name="title_save" msgid="2433679664882857999">"አስቀምጥ ወደ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"አዲስ አቃፊ"</string>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
index 88c42d03..1e86c03 100644
--- a/packages/DocumentsUI/res/values-ar/strings.xml
+++ b/packages/DocumentsUI/res/values-ar/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"مستندات"</string>
<string name="files_label" msgid="6051402950202690279">"الملفات"</string>
+ <string name="downloads_label" msgid="959113951084633612">"التنزيلات"</string>
<string name="title_open" msgid="4353228937663917801">"فتح من"</string>
<string name="title_save" msgid="2433679664882857999">"حفظ في"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"مجلد جديد"</string>
diff --git a/packages/DocumentsUI/res/values-az-rAZ/strings.xml b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
index f91f2ee..b6dd297 100644
--- a/packages/DocumentsUI/res/values-az-rAZ/strings.xml
+++ b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Sənədlər"</string>
<string name="files_label" msgid="6051402950202690279">"Fayllar"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Endirmələr"</string>
<string name="title_open" msgid="4353228937663917801">"Vasitəsilə açın"</string>
<string name="title_save" msgid="2433679664882857999">"buraya saxlayın"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Yeni qovluq"</string>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
index 67a1c6a..f4aff3e 100644
--- a/packages/DocumentsUI/res/values-bg/strings.xml
+++ b/packages/DocumentsUI/res/values-bg/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
<string name="files_label" msgid="6051402950202690279">"Файлове"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Изтегляния"</string>
<string name="title_open" msgid="4353228937663917801">"Отваряне от"</string>
<string name="title_save" msgid="2433679664882857999">"Запазване във:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
diff --git a/packages/DocumentsUI/res/values-bn-rBD/strings.xml b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
index b01cc84e..c757eaf 100644
--- a/packages/DocumentsUI/res/values-bn-rBD/strings.xml
+++ b/packages/DocumentsUI/res/values-bn-rBD/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"দস্তাবেজগুলি"</string>
<string name="files_label" msgid="6051402950202690279">"ফাইলগুলি"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ডাউনলোডগুলি"</string>
<string name="title_open" msgid="4353228937663917801">"এখান থেকে খুলুন"</string>
<string name="title_save" msgid="2433679664882857999">"এতে সংরক্ষণ করুন"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"নতুন ফোল্ডার"</string>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
index 663608b..f01624a 100644
--- a/packages/DocumentsUI/res/values-ca/strings.xml
+++ b/packages/DocumentsUI/res/values-ca/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
<string name="files_label" msgid="6051402950202690279">"Fitxers"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Baixades"</string>
<string name="title_open" msgid="4353228937663917801">"Obre des de"</string>
<string name="title_save" msgid="2433679664882857999">"Desa a"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Carpeta nova"</string>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
index 81d8dc8..7c70809 100644
--- a/packages/DocumentsUI/res/values-cs/strings.xml
+++ b/packages/DocumentsUI/res/values-cs/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
<string name="files_label" msgid="6051402950202690279">"Soubory"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Stahování"</string>
<string name="title_open" msgid="4353228937663917801">"Otevřít"</string>
<string name="title_save" msgid="2433679664882857999">"Uložit do"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nová složka"</string>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
index e109048..ef7819a 100644
--- a/packages/DocumentsUI/res/values-da/strings.xml
+++ b/packages/DocumentsUI/res/values-da/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenter"</string>
<string name="files_label" msgid="6051402950202690279">"Filer"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Åbn fra"</string>
<string name="title_save" msgid="2433679664882857999">"Gem i"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Ny mappe"</string>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
index 7c467ef..83eb8e0 100644
--- a/packages/DocumentsUI/res/values-de/strings.xml
+++ b/packages/DocumentsUI/res/values-de/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
<string name="files_label" msgid="6051402950202690279">"Dateien"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Öffnen von"</string>
<string name="title_save" msgid="2433679664882857999">"Speichern unter"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Neuer Ordner"</string>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
index a350002..42959af 100644
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Έγγραφα"</string>
<string name="files_label" msgid="6051402950202690279">"Αρχεία"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Λήψεις"</string>
<string name="title_open" msgid="4353228937663917801">"Άνοιγμα από"</string>
<string name="title_save" msgid="2433679664882857999">"Αποθήκευση σε"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Νέος φάκελος"</string>
diff --git a/packages/DocumentsUI/res/values-en-rAU/strings.xml b/packages/DocumentsUI/res/values-en-rAU/strings.xml
index e9ba34b..5dca8e8 100644
--- a/packages/DocumentsUI/res/values-en-rAU/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rAU/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
<string name="files_label" msgid="6051402950202690279">"Files"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Open from"</string>
<string name="title_save" msgid="2433679664882857999">"Save to"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
index e9ba34b..5dca8e8 100644
--- a/packages/DocumentsUI/res/values-en-rGB/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
<string name="files_label" msgid="6051402950202690279">"Files"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Open from"</string>
<string name="title_save" msgid="2433679664882857999">"Save to"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
index e9ba34b..5dca8e8 100644
--- a/packages/DocumentsUI/res/values-en-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
<string name="files_label" msgid="6051402950202690279">"Files"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Open from"</string>
<string name="title_save" msgid="2433679664882857999">"Save to"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"New folder"</string>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
index 8e0a18cc..58090ce 100644
--- a/packages/DocumentsUI/res/values-es-rUS/strings.xml
+++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Archivos"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
<string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Carpeta nueva"</string>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
index cf0b607..c91a990 100644
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Archivos"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
<string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nueva carpeta"</string>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
index 76d1f48..55d2503 100644
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumendid"</string>
<string name="files_label" msgid="6051402950202690279">"Failid"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Allalaadimised"</string>
<string name="title_open" msgid="4353228937663917801">"Ava:"</string>
<string name="title_save" msgid="2433679664882857999">"Salvesta:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Uus kaust"</string>
diff --git a/packages/DocumentsUI/res/values-eu-rES/strings.xml b/packages/DocumentsUI/res/values-eu-rES/strings.xml
index f24cf60..7ad1dbc 100644
--- a/packages/DocumentsUI/res/values-eu-rES/strings.xml
+++ b/packages/DocumentsUI/res/values-eu-rES/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumentuak"</string>
<string name="files_label" msgid="6051402950202690279">"Fitxategiak"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Deskargak"</string>
<string name="title_open" msgid="4353228937663917801">"Ireki hemendik"</string>
<string name="title_save" msgid="2433679664882857999">"Gorde hemen"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Karpeta berria"</string>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
index 432205e..1989c62 100644
--- a/packages/DocumentsUI/res/values-fa/strings.xml
+++ b/packages/DocumentsUI/res/values-fa/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"اسناد"</string>
<string name="files_label" msgid="6051402950202690279">"فایلها"</string>
+ <string name="downloads_label" msgid="959113951084633612">"بارگیریها"</string>
<string name="title_open" msgid="4353228937663917801">"باز کردن از"</string>
<string name="title_save" msgid="2433679664882857999">"ذخیره در"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"پوشه جدید"</string>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
index 33f2e3d..9228634 100644
--- a/packages/DocumentsUI/res/values-fi/strings.xml
+++ b/packages/DocumentsUI/res/values-fi/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Asiakirjat"</string>
<string name="files_label" msgid="6051402950202690279">"Tiedostot"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Lataukset"</string>
<string name="title_open" msgid="4353228937663917801">"Avaa sijainnista"</string>
<string name="title_save" msgid="2433679664882857999">"Tallenna kohteeseen"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Uusi kansio"</string>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index 228dc7a..ec81e67 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documents"</string>
<string name="files_label" msgid="6051402950202690279">"Fichiers"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Téléchargements"</string>
<string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
<string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nouveau dossier"</string>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
index eb9f84a..3d7ab32 100644
--- a/packages/DocumentsUI/res/values-fr/strings.xml
+++ b/packages/DocumentsUI/res/values-fr/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Docs"</string>
<string name="files_label" msgid="6051402950202690279">"Fichiers"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Téléchargements"</string>
<string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
<string name="title_save" msgid="2433679664882857999">"Enregistrer sous"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nouveau dossier"</string>
diff --git a/packages/DocumentsUI/res/values-gl-rES/strings.xml b/packages/DocumentsUI/res/values-gl-rES/strings.xml
index 07c5d39..db98006 100644
--- a/packages/DocumentsUI/res/values-gl-rES/strings.xml
+++ b/packages/DocumentsUI/res/values-gl-rES/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Ficheiros"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Descargas"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
<string name="title_save" msgid="2433679664882857999">"Gardar en"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Novo cartafol"</string>
diff --git a/packages/DocumentsUI/res/values-gu-rIN/strings.xml b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
index dade7df..9f5eba0 100644
--- a/packages/DocumentsUI/res/values-gu-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-gu-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"દસ્તાવેજો"</string>
<string name="files_label" msgid="6051402950202690279">"ફાઇલો"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ડાઉનલોડ્સ"</string>
<string name="title_open" msgid="4353228937663917801">"અહીંથી ખોલો"</string>
<string name="title_save" msgid="2433679664882857999">"આમાં સાચવો"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"નવું ફોલ્ડર"</string>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
index 0a5de16..d146145 100644
--- a/packages/DocumentsUI/res/values-hi/strings.xml
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"दस्तावेज़"</string>
<string name="files_label" msgid="6051402950202690279">"फ़ाइलें"</string>
+ <string name="downloads_label" msgid="959113951084633612">"डाउनलोड"</string>
<string name="title_open" msgid="4353228937663917801">"यहां से खोलें"</string>
<string name="title_save" msgid="2433679664882857999">"यहां सहेजें"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"नया फ़ोल्डर"</string>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
index 78c1485..5884d6f 100644
--- a/packages/DocumentsUI/res/values-hr/strings.xml
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
<string name="files_label" msgid="6051402950202690279">"Datoteke"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Preuzimanja"</string>
<string name="title_open" msgid="4353228937663917801">"Otvori iz"</string>
<string name="title_save" msgid="2433679664882857999">"Spremi u"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nova mapa"</string>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
index 4948116..95b45ba 100644
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumentumok"</string>
<string name="files_label" msgid="6051402950202690279">"Fájlok"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Letöltések"</string>
<string name="title_open" msgid="4353228937663917801">"Megnyitás innen"</string>
<string name="title_save" msgid="2433679664882857999">"Mentés ide"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Új mappa"</string>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
index 6dc66b0..7be66d3 100644
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Փաստաթղթեր"</string>
<string name="files_label" msgid="6051402950202690279">"Ֆայլեր"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Ներբեռնումներ"</string>
<string name="title_open" msgid="4353228937663917801">"Բացել այստեղից"</string>
<string name="title_save" msgid="2433679664882857999">"Պահել այստեղ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Նոր պանակ"</string>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
index 2412488..29d66c0 100644
--- a/packages/DocumentsUI/res/values-in/strings.xml
+++ b/packages/DocumentsUI/res/values-in/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumen"</string>
<string name="files_label" msgid="6051402950202690279">"File"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Unduhan"</string>
<string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
<string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Folder baru"</string>
diff --git a/packages/DocumentsUI/res/values-is-rIS/strings.xml b/packages/DocumentsUI/res/values-is-rIS/strings.xml
index d09a44b..76dbe32 100644
--- a/packages/DocumentsUI/res/values-is-rIS/strings.xml
+++ b/packages/DocumentsUI/res/values-is-rIS/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Skjöl"</string>
<string name="files_label" msgid="6051402950202690279">"Skrár"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Niðurhal"</string>
<string name="title_open" msgid="4353228937663917801">"Opna frá"</string>
<string name="title_save" msgid="2433679664882857999">"Vista í"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Ný mappa"</string>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
index 4824205..2e74550 100644
--- a/packages/DocumentsUI/res/values-it/strings.xml
+++ b/packages/DocumentsUI/res/values-it/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documenti"</string>
<string name="files_label" msgid="6051402950202690279">"File"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Download"</string>
<string name="title_open" msgid="4353228937663917801">"Apri da"</string>
<string name="title_save" msgid="2433679664882857999">"Salva in"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nuova cartella"</string>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
index 1a19510..ed0a6a4 100644
--- a/packages/DocumentsUI/res/values-iw/strings.xml
+++ b/packages/DocumentsUI/res/values-iw/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"מסמכים"</string>
<string name="files_label" msgid="6051402950202690279">"קבצים"</string>
+ <string name="downloads_label" msgid="959113951084633612">"הורדות"</string>
<string name="title_open" msgid="4353228937663917801">"פתח מ-"</string>
<string name="title_save" msgid="2433679664882857999">"שמור ב-"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"תיקייה חדשה"</string>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
index 7e356af..a954927 100644
--- a/packages/DocumentsUI/res/values-ja/strings.xml
+++ b/packages/DocumentsUI/res/values-ja/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ドキュメント"</string>
<string name="files_label" msgid="6051402950202690279">"ファイル"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ダウンロード"</string>
<string name="title_open" msgid="4353228937663917801">"次から開く:"</string>
<string name="title_save" msgid="2433679664882857999">"次に保存:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"新しいフォルダ"</string>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
index 6e880aa..ef91fab 100644
--- a/packages/DocumentsUI/res/values-ka-rGE/strings.xml
+++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"დოკუმენტები"</string>
<string name="files_label" msgid="6051402950202690279">"ფაილები"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ჩამოტვირთვები"</string>
<string name="title_open" msgid="4353228937663917801">"გახსნა აქედან:"</string>
<string name="title_save" msgid="2433679664882857999">"შენახვა აქ:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ახალი საქაღალდე"</string>
diff --git a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml b/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
index 0d553e0..09d7e37 100644
--- a/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
+++ b/packages/DocumentsUI/res/values-kk-rKZ/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Құжаттар"</string>
<string name="files_label" msgid="6051402950202690279">"Файлдар"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Жүктеулер"</string>
<string name="title_open" msgid="4353228937663917801">"Мынадан ашу:"</string>
<string name="title_save" msgid="2433679664882857999">"Сақталатын орны"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Жаңа қалта"</string>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
index 4680879..f95594b6 100644
--- a/packages/DocumentsUI/res/values-km-rKH/strings.xml
+++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ឯកសារ"</string>
<string name="files_label" msgid="6051402950202690279">"ឯកសារ"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ដោនឡូត"</string>
<string name="title_open" msgid="4353228937663917801">"បើកពី"</string>
<string name="title_save" msgid="2433679664882857999">"រក្សាទុកទៅ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ថតថ្មី"</string>
diff --git a/packages/DocumentsUI/res/values-kn-rIN/strings.xml b/packages/DocumentsUI/res/values-kn-rIN/strings.xml
index 7d5770a..5da5cd0 100644
--- a/packages/DocumentsUI/res/values-kn-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-kn-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ಡಾಕ್ಯುಮೆಂಟ್ಗಳು"</string>
<string name="files_label" msgid="6051402950202690279">"ಫೈಲ್ಗಳು"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ಡೌನ್ಲೋಡ್ಗಳು"</string>
<string name="title_open" msgid="4353228937663917801">"ಇದರ ಮೂಲಕ ತೆರೆಯಿರಿ"</string>
<string name="title_save" msgid="2433679664882857999">"ಇವುಗಳಲ್ಲಿ ಉಳಿಸಿ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ಹೊಸ ಫೋಲ್ಡರ್"</string>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
index 3032eed..4074841 100644
--- a/packages/DocumentsUI/res/values-ko/strings.xml
+++ b/packages/DocumentsUI/res/values-ko/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"문서"</string>
<string name="files_label" msgid="6051402950202690279">"파일"</string>
+ <string name="downloads_label" msgid="959113951084633612">"다운로드"</string>
<string name="title_open" msgid="4353228937663917801">"열기:"</string>
<string name="title_save" msgid="2433679664882857999">"저장 위치:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"새 폴더"</string>
diff --git a/packages/DocumentsUI/res/values-ky-rKG/strings.xml b/packages/DocumentsUI/res/values-ky-rKG/strings.xml
index 14a25bc..aecf542 100644
--- a/packages/DocumentsUI/res/values-ky-rKG/strings.xml
+++ b/packages/DocumentsUI/res/values-ky-rKG/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документтер"</string>
<string name="files_label" msgid="6051402950202690279">"Файлдар"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Жүктөөлөр"</string>
<string name="title_open" msgid="4353228937663917801">"Кийинкиден ачуу:"</string>
<string name="title_save" msgid="2433679664882857999">"Кийинкиге сактоо:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Жаңы куржун"</string>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
index 2a680bf..baa7e25 100644
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ເອກະສານ"</string>
<string name="files_label" msgid="6051402950202690279">"ໄຟລ໌"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ການດາວໂຫລດ"</string>
<string name="title_open" msgid="4353228937663917801">"ເປີດຈາກ"</string>
<string name="title_save" msgid="2433679664882857999">"ບັນທຶກໄປທີ່"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ໂຟລເດີໃໝ່"</string>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
index 8105846..dadd006 100644
--- a/packages/DocumentsUI/res/values-lt/strings.xml
+++ b/packages/DocumentsUI/res/values-lt/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumentai"</string>
<string name="files_label" msgid="6051402950202690279">"Failai"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Atsisiuntimai"</string>
<string name="title_open" msgid="4353228937663917801">"Atidaryti iš"</string>
<string name="title_save" msgid="2433679664882857999">"Išsaugoti į"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Naujas aplankas"</string>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
index 48715e6..4e0d519 100644
--- a/packages/DocumentsUI/res/values-lv/strings.xml
+++ b/packages/DocumentsUI/res/values-lv/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
<string name="files_label" msgid="6051402950202690279">"Faili"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Lejupielādes"</string>
<string name="title_open" msgid="4353228937663917801">"Atvēršana no:"</string>
<string name="title_save" msgid="2433679664882857999">"Saglabāšana:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Jauna mape"</string>
diff --git a/packages/DocumentsUI/res/values-mk-rMK/strings.xml b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
index 950a9b1..2d8be1b 100644
--- a/packages/DocumentsUI/res/values-mk-rMK/strings.xml
+++ b/packages/DocumentsUI/res/values-mk-rMK/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
<string name="files_label" msgid="6051402950202690279">"Датотеки"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Преземања"</string>
<string name="title_open" msgid="4353228937663917801">"Отвори од"</string>
<string name="title_save" msgid="2433679664882857999">"Зачувај во"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
diff --git a/packages/DocumentsUI/res/values-ml-rIN/strings.xml b/packages/DocumentsUI/res/values-ml-rIN/strings.xml
index 32411b2..1de31ce 100644
--- a/packages/DocumentsUI/res/values-ml-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-ml-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"പ്രമാണങ്ങൾ"</string>
<string name="files_label" msgid="6051402950202690279">"ഫയലുകൾ"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ഡൗണ്ലോഡുകൾ"</string>
<string name="title_open" msgid="4353228937663917801">"ഇതിൽ നിന്നും തുറക്കുക"</string>
<string name="title_save" msgid="2433679664882857999">"ഇതില് സംരക്ഷിക്കുക"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"പുതിയ ഫോൾഡർ"</string>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
index 0c5c72d..d0e43f4 100644
--- a/packages/DocumentsUI/res/values-mn-rMN/strings.xml
+++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документүүд"</string>
<string name="files_label" msgid="6051402950202690279">"Файл"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Таталт"</string>
<string name="title_open" msgid="4353228937663917801">"Нээх"</string>
<string name="title_save" msgid="2433679664882857999">"Хадгалах"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Шинэ фолдер"</string>
diff --git a/packages/DocumentsUI/res/values-mr-rIN/strings.xml b/packages/DocumentsUI/res/values-mr-rIN/strings.xml
index 15c1291..e359e1e 100644
--- a/packages/DocumentsUI/res/values-mr-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-mr-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"दस्तऐवज"</string>
<string name="files_label" msgid="6051402950202690279">"फायली"</string>
+ <string name="downloads_label" msgid="959113951084633612">"डाउनलोड"</string>
<string name="title_open" msgid="4353228937663917801">"वरून उघडा"</string>
<string name="title_save" msgid="2433679664882857999">"येथे जतन करा"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"नवीन फोल्डर"</string>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
index 12cf2e3..ea88ef6 100644
--- a/packages/DocumentsUI/res/values-ms-rMY/strings.xml
+++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumen"</string>
<string name="files_label" msgid="6051402950202690279">"Fail"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Muat turun"</string>
<string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
<string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Folder baharu"</string>
diff --git a/packages/DocumentsUI/res/values-my-rMM/strings.xml b/packages/DocumentsUI/res/values-my-rMM/strings.xml
index a1ab012..4c8fb49 100644
--- a/packages/DocumentsUI/res/values-my-rMM/strings.xml
+++ b/packages/DocumentsUI/res/values-my-rMM/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"စာရွက်စာတန်းများ"</string>
<string name="files_label" msgid="6051402950202690279">"ဖိုင်များ"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ဒေါင်းလုဒ်များ"</string>
<string name="title_open" msgid="4353228937663917801">"မှ ဖွင့်ပါ"</string>
<string name="title_save" msgid="2433679664882857999">"သို့ သိမ်းပါ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ဖိုလ်ဒါ အသစ်"</string>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
index edeaa6d..01dda74 100644
--- a/packages/DocumentsUI/res/values-nb/strings.xml
+++ b/packages/DocumentsUI/res/values-nb/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenter"</string>
<string name="files_label" msgid="6051402950202690279">"Filer"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Nedlastinger"</string>
<string name="title_open" msgid="4353228937663917801">"Åpne fra"</string>
<string name="title_save" msgid="2433679664882857999">"Lagre i"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Ny mappe"</string>
diff --git a/packages/DocumentsUI/res/values-ne-rNP/strings.xml b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
index bd54211..cd809af 100644
--- a/packages/DocumentsUI/res/values-ne-rNP/strings.xml
+++ b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"कागजातहरू"</string>
<string name="files_label" msgid="6051402950202690279">"फाइलहरू"</string>
+ <string name="downloads_label" msgid="959113951084633612">"डाउनलोडहरू"</string>
<string name="title_open" msgid="4353228937663917801">"यसबाट खोल्नुहोस्"</string>
<string name="title_save" msgid="2433679664882857999">"यसमा सुरक्षित गर्नुहोस्"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"नयाँ फोल्डर"</string>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
index f2eda72..5948167 100644
--- a/packages/DocumentsUI/res/values-nl/strings.xml
+++ b/packages/DocumentsUI/res/values-nl/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documenten"</string>
<string name="files_label" msgid="6051402950202690279">"Bestanden"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Openen vanuit"</string>
<string name="title_save" msgid="2433679664882857999">"Opslaan in"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nieuwe map"</string>
diff --git a/packages/DocumentsUI/res/values-pa-rIN/strings.xml b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
index e139dfd..dd081ab 100644
--- a/packages/DocumentsUI/res/values-pa-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ਦਸਤਾਵੇਜ਼"</string>
<string name="files_label" msgid="6051402950202690279">"ਫਾਈਲਾਂ"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ਡਾਊਨਲੋਡ"</string>
<string name="title_open" msgid="4353228937663917801">"ਤੋਂ ਖੋਲ੍ਹੋ"</string>
<string name="title_save" msgid="2433679664882857999">"ਇਸ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਕਰੋ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"ਨਵਾਂ ਫੋਲਡਰ"</string>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
index bb81377..3fd3266 100644
--- a/packages/DocumentsUI/res/values-pl/strings.xml
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
<string name="files_label" msgid="6051402950202690279">"Pliki"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Pobrane"</string>
<string name="title_open" msgid="4353228937663917801">"Otwórz z"</string>
<string name="title_save" msgid="2433679664882857999">"Zapisz w"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nowy folder"</string>
diff --git a/packages/DocumentsUI/res/values-pt-rBR/strings.xml b/packages/DocumentsUI/res/values-pt-rBR/strings.xml
index d72f0c3..dce7cc0 100644
--- a/packages/DocumentsUI/res/values-pt-rBR/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rBR/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Arquivos"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
<string name="title_save" msgid="2433679664882857999">"Salvar em"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
index 43265a5..02cd2dd 100644
--- a/packages/DocumentsUI/res/values-pt-rPT/strings.xml
+++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Ficheiros"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Transferências"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
<string name="title_save" msgid="2433679664882857999">"Guardar em"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
index d72f0c3..dce7cc0 100644
--- a/packages/DocumentsUI/res/values-pt/strings.xml
+++ b/packages/DocumentsUI/res/values-pt/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documentos"</string>
<string name="files_label" msgid="6051402950202690279">"Arquivos"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Downloads"</string>
<string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
<string name="title_save" msgid="2433679664882857999">"Salvar em"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nova pasta"</string>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
index e880bbd..5d32285 100644
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Documente"</string>
<string name="files_label" msgid="6051402950202690279">"Fișiere"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Descărcări"</string>
<string name="title_open" msgid="4353228937663917801">"Deschideți din"</string>
<string name="title_save" msgid="2433679664882857999">"Salvați în"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Dosar nou"</string>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
index e475591..e68c137 100644
--- a/packages/DocumentsUI/res/values-ru/strings.xml
+++ b/packages/DocumentsUI/res/values-ru/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документы"</string>
<string name="files_label" msgid="6051402950202690279">"Файлы"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Загрузки"</string>
<string name="title_open" msgid="4353228937663917801">"Открыть"</string>
<string name="title_save" msgid="2433679664882857999">"Сохранить"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Создать папку"</string>
diff --git a/packages/DocumentsUI/res/values-si-rLK/strings.xml b/packages/DocumentsUI/res/values-si-rLK/strings.xml
index e380b0a..0f40df9 100644
--- a/packages/DocumentsUI/res/values-si-rLK/strings.xml
+++ b/packages/DocumentsUI/res/values-si-rLK/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ලේඛන"</string>
<string name="files_label" msgid="6051402950202690279">"ගොනු"</string>
+ <string name="downloads_label" msgid="959113951084633612">"බාගැනීම්"</string>
<string name="title_open" msgid="4353228937663917801">"විවෘත වන්නේ"</string>
<string name="title_save" msgid="2433679664882857999">"සුරකින්නේ"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"නව ෆෝල්ඩරය"</string>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
index 6614dca..2f0cbe8 100644
--- a/packages/DocumentsUI/res/values-sk/strings.xml
+++ b/packages/DocumentsUI/res/values-sk/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
<string name="files_label" msgid="6051402950202690279">"Súbory"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Stiahnuté súbory"</string>
<string name="title_open" msgid="4353228937663917801">"Otvoriť z"</string>
<string name="title_save" msgid="2433679664882857999">"Uložiť do"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nový priečinok"</string>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
index 58a4cc0..6da1290 100644
--- a/packages/DocumentsUI/res/values-sl/strings.xml
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
<string name="files_label" msgid="6051402950202690279">"Datoteke"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Prenosi"</string>
<string name="title_open" msgid="4353228937663917801">"Odpri iz mape"</string>
<string name="title_save" msgid="2433679664882857999">"Shrani v"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Nova mapa"</string>
diff --git a/packages/DocumentsUI/res/values-sq-rAL/strings.xml b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
index 7eba92f..b880bb4 100644
--- a/packages/DocumentsUI/res/values-sq-rAL/strings.xml
+++ b/packages/DocumentsUI/res/values-sq-rAL/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
<string name="files_label" msgid="6051402950202690279">"Skedarët"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Shkarkimet"</string>
<string name="title_open" msgid="4353228937663917801">"Hap nga"</string>
<string name="title_save" msgid="2433679664882857999">"Ruaje te"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Dosje e re"</string>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
index 0bce687..93a1cf6 100644
--- a/packages/DocumentsUI/res/values-sr/strings.xml
+++ b/packages/DocumentsUI/res/values-sr/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
<string name="files_label" msgid="6051402950202690279">"Датотеке"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Преузимања"</string>
<string name="title_open" msgid="4353228937663917801">"Отвори са"</string>
<string name="title_save" msgid="2433679664882857999">"Сачувај у"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Нови директоријум"</string>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
index a4a119c..63da2c6 100644
--- a/packages/DocumentsUI/res/values-sv/strings.xml
+++ b/packages/DocumentsUI/res/values-sv/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokument"</string>
<string name="files_label" msgid="6051402950202690279">"Filer"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Nedladdningar"</string>
<string name="title_open" msgid="4353228937663917801">"Öppna från"</string>
<string name="title_save" msgid="2433679664882857999">"Spara till"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Ny mapp"</string>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
index 91151fb..b522e0a 100644
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Hati"</string>
<string name="files_label" msgid="6051402950202690279">"Faili"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Vipakuliwa"</string>
<string name="title_open" msgid="4353228937663917801">"Fungua kutoka"</string>
<string name="title_save" msgid="2433679664882857999">"Hifadhi kwenye"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Folda mpya"</string>
diff --git a/packages/DocumentsUI/res/values-ta-rIN/strings.xml b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
index 9a667b8..87cb68d 100644
--- a/packages/DocumentsUI/res/values-ta-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-ta-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"ஆவணங்கள்"</string>
<string name="files_label" msgid="6051402950202690279">"கோப்புகள்"</string>
+ <string name="downloads_label" msgid="959113951084633612">"இறக்கங்கள்"</string>
<string name="title_open" msgid="4353228937663917801">"இதில் திற"</string>
<string name="title_save" msgid="2433679664882857999">"இதில் சேமி"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"புதிய கோப்புறை"</string>
diff --git a/packages/DocumentsUI/res/values-te-rIN/strings.xml b/packages/DocumentsUI/res/values-te-rIN/strings.xml
index 91d436a..7b34df5 100644
--- a/packages/DocumentsUI/res/values-te-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-te-rIN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"పత్రాలు"</string>
<string name="files_label" msgid="6051402950202690279">"ఫైల్లు"</string>
+ <string name="downloads_label" msgid="959113951084633612">"డౌన్లోడ్లు"</string>
<string name="title_open" msgid="4353228937663917801">"ఇక్కడి నుండి తెరువు"</string>
<string name="title_save" msgid="2433679664882857999">"ఇందులో సేవ్ చేయి"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"కొత్త ఫోల్డర్"</string>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
index 9d77561..dfb423e 100644
--- a/packages/DocumentsUI/res/values-th/strings.xml
+++ b/packages/DocumentsUI/res/values-th/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"เอกสาร"</string>
<string name="files_label" msgid="6051402950202690279">"ไฟล์"</string>
+ <string name="downloads_label" msgid="959113951084633612">"การดาวน์โหลด"</string>
<string name="title_open" msgid="4353228937663917801">"เปิดจาก"</string>
<string name="title_save" msgid="2433679664882857999">"บันทึกไปยัง"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"โฟลเดอร์ใหม่"</string>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
index 9ae30aa..813b39a 100644
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Mga Dokumento"</string>
<string name="files_label" msgid="6051402950202690279">"Mga File"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Mga Download"</string>
<string name="title_open" msgid="4353228937663917801">"Buksan mula sa"</string>
<string name="title_save" msgid="2433679664882857999">"I-save sa"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Bagong folder"</string>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
index 3c2e39c9..90794a2 100644
--- a/packages/DocumentsUI/res/values-tr/strings.xml
+++ b/packages/DocumentsUI/res/values-tr/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokümanlar"</string>
<string name="files_label" msgid="6051402950202690279">"Dosyalar"</string>
+ <string name="downloads_label" msgid="959113951084633612">"İndirilenler"</string>
<string name="title_open" msgid="4353228937663917801">"Şuradan aç:"</string>
<string name="title_save" msgid="2433679664882857999">"Şuraya kaydet:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Yeni klasör"</string>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
index 407f1aa..a8278d9 100644
--- a/packages/DocumentsUI/res/values-uk/strings.xml
+++ b/packages/DocumentsUI/res/values-uk/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Документи"</string>
<string name="files_label" msgid="6051402950202690279">"Файли"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Завантаження"</string>
<string name="title_open" msgid="4353228937663917801">"Відкрити"</string>
<string name="title_save" msgid="2433679664882857999">"Зберегти в"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Нова папка"</string>
diff --git a/packages/DocumentsUI/res/values-ur-rPK/strings.xml b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
index 845d2cb..d8caa37 100644
--- a/packages/DocumentsUI/res/values-ur-rPK/strings.xml
+++ b/packages/DocumentsUI/res/values-ur-rPK/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"دستاویزات"</string>
<string name="files_label" msgid="6051402950202690279">"فائلیں"</string>
+ <string name="downloads_label" msgid="959113951084633612">"ڈاؤن لوڈز"</string>
<string name="title_open" msgid="4353228937663917801">"کھولیں از"</string>
<string name="title_save" msgid="2433679664882857999">"اس میں محفوظ کریں"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"نیا فولڈر"</string>
diff --git a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
index f3514db..b944736 100644
--- a/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
+++ b/packages/DocumentsUI/res/values-uz-rUZ/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Hujjatlar"</string>
<string name="files_label" msgid="6051402950202690279">"Fayllar"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Yuklanmalar"</string>
<string name="title_open" msgid="4353228937663917801">"Ochish"</string>
<string name="title_save" msgid="2433679664882857999">"Saqlash"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Yangi jild"</string>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
index 52a4e82..287ca70 100644
--- a/packages/DocumentsUI/res/values-vi/strings.xml
+++ b/packages/DocumentsUI/res/values-vi/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Tài liệu"</string>
<string name="files_label" msgid="6051402950202690279">"Tệp"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Tài nguyên đã tải xuống"</string>
<string name="title_open" msgid="4353228937663917801">"Mở từ"</string>
<string name="title_save" msgid="2433679664882857999">"Lưu vào"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Thư mục mới"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
index 8ee90cc..9901abf 100644
--- a/packages/DocumentsUI/res/values-zh-rCN/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"文档"</string>
<string name="files_label" msgid="6051402950202690279">"文件"</string>
+ <string name="downloads_label" msgid="959113951084633612">"下载"</string>
<string name="title_open" msgid="4353228937663917801">"打开文件"</string>
<string name="title_save" msgid="2433679664882857999">"保存文件"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"新建文件夹"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
index dadc029..9cfba1d 100644
--- a/packages/DocumentsUI/res/values-zh-rHK/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"文件"</string>
<string name="files_label" msgid="6051402950202690279">"檔案"</string>
+ <string name="downloads_label" msgid="959113951084633612">"下載"</string>
<string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
<string name="title_save" msgid="2433679664882857999">"儲存至"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"新增資料夾"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index cdd1288..b2cee9c 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"文件"</string>
<string name="files_label" msgid="6051402950202690279">"檔案"</string>
+ <string name="downloads_label" msgid="959113951084633612">"下載內容"</string>
<string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
<string name="title_save" msgid="2433679664882857999">"儲存至"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"新增資料夾"</string>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
index d6bb2b4..308a6f9 100644
--- a/packages/DocumentsUI/res/values-zu/strings.xml
+++ b/packages/DocumentsUI/res/values-zu/strings.xml
@@ -18,6 +18,7 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Amadokhumenti"</string>
<string name="files_label" msgid="6051402950202690279">"Amafayela"</string>
+ <string name="downloads_label" msgid="959113951084633612">"Okulandiwe"</string>
<string name="title_open" msgid="4353228937663917801">"Vula kusuka ku-"</string>
<string name="title_save" msgid="2433679664882857999">"Londoloza ku-"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Ifolda entsha"</string>
diff --git a/packages/DocumentsUI/res/values/config.xml b/packages/DocumentsUI/res/values/config.xml
index ad419aa..ff28e15 100644
--- a/packages/DocumentsUI/res/values/config.xml
+++ b/packages/DocumentsUI/res/values/config.xml
@@ -15,6 +15,9 @@
-->
<resources>
+ <!-- Allow Advanced Devices default value to be customised -->
+ <bool name="config_defaultAdvancedDevices">false</bool>
+
<bool name="productivity_device">true</bool>
<!-- Intentionally unset. Vendors should set this in an overlay. -->
<string name="trusted_quick_viewer_package"></string>
diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml
index d21b5ee..016657e 100644
--- a/packages/DocumentsUI/res/values/strings.xml
+++ b/packages/DocumentsUI/res/values/strings.xml
@@ -21,6 +21,9 @@
<!-- Title of the standalone files activity. [CHAR LIMIT=32] -->
<string name="files_label">Files</string>
+ <!-- Title of the standalone downloads activity. [CHAR LIMIT=32] -->
+ <string name="downloads_label">Downloads</string>
+
<!-- Action bar title prompting user to choose a location to open a document from [CHAR LIMIT=32] -->
<string name="title_open">Open from</string>
<!-- Action bar title prompting user to choose a location to save a document to [CHAR LIMIT=32] -->
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 91ac033..edf384e 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -223,50 +223,61 @@
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- final int id = item.getItemId();
- if (id == android.R.id.home) {
- onBackPressed();
- return true;
- } else if (id == R.id.menu_create_dir) {
- showCreateDirectoryDialog();
- return true;
- } else if (id == R.id.menu_search) {
- return false;
- } else if (id == R.id.menu_sort_name) {
- setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
- return true;
- } else if (id == R.id.menu_sort_date) {
- setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
- return true;
- } else if (id == R.id.menu_sort_size) {
- setUserSortOrder(State.SORT_ORDER_SIZE);
- return true;
- } else if (id == R.id.menu_grid) {
- setUserMode(State.MODE_GRID);
- return true;
- } else if (id == R.id.menu_list) {
- setUserMode(State.MODE_LIST);
- return true;
- } else if (id == R.id.menu_paste_from_clipboard) {
- DirectoryFragment.get(getFragmentManager())
- .pasteFromClipboard();
- return true;
- } else if (id == R.id.menu_advanced) {
- setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
- return true;
- } else if (id == R.id.menu_file_size) {
- setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
- return true;
- } else if (id == R.id.menu_settings) {
- final RootInfo root = getCurrentRoot();
- final Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_ROOT_SETTINGS);
- intent.setDataAndType(DocumentsContract.buildRootUri(root.authority, root.rootId),
- DocumentsContract.Root.MIME_TYPE_ITEM);
- startActivity(intent);
- return true;
- }
- return super.onOptionsItemSelected(item);
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ onBackPressed();
+ return true;
+
+ case R.id.menu_create_dir:
+ showCreateDirectoryDialog();
+ return true;
+
+ case R.id.menu_search:
+ return false;
+
+ case R.id.menu_sort_name:
+ setUserSortOrder(State.SORT_ORDER_DISPLAY_NAME);
+ return true;
+
+ case R.id.menu_sort_date:
+ setUserSortOrder(State.SORT_ORDER_LAST_MODIFIED);
+ return true;
+ case R.id.menu_sort_size:
+ setUserSortOrder(State.SORT_ORDER_SIZE);
+ return true;
+
+ case R.id.menu_grid:
+ setUserMode(State.MODE_GRID);
+ return true;
+
+ case R.id.menu_list:
+ setUserMode(State.MODE_LIST);
+ return true;
+
+ case R.id.menu_paste_from_clipboard:
+ DirectoryFragment.get(getFragmentManager())
+ .pasteFromClipboard();
+ return true;
+
+ case R.id.menu_advanced:
+ setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
+ return true;
+
+ case R.id.menu_file_size:
+ setDisplayFileSize(!LocalPreferences.getDisplayFileSize(this));
+ return true;
+
+ case R.id.menu_settings:
+ final RootInfo root = getCurrentRoot();
+ final Intent intent = new Intent(DocumentsContract.ACTION_DOCUMENT_ROOT_SETTINGS);
+ intent.setDataAndType(root.getUri(), DocumentsContract.Root.MIME_TYPE_ITEM);
+ startActivity(intent);
+ return true;
+
+ default:
+ return super.onOptionsItemSelected(item);
+ }
}
void showCreateDirectoryDialog() {
@@ -289,10 +300,11 @@
void onDirectoryCreated(DocumentInfo doc) {
checkArgument(doc.isDirectory());
- openDirectory(doc);
+ openContainerDocument(doc);
}
- void openDirectory(DocumentInfo doc) {
+ void openContainerDocument(DocumentInfo doc) {
+ checkArgument(doc.isContainer());
mState.stack.push(doc);
mState.stackTouched = true;
onCurrentDirectoryChanged(ANIM_DOWN);
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 4f4649c..8754f68 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -421,8 +421,8 @@
@Override
public void onDocumentPicked(DocumentInfo doc, DocumentContext context) {
final FragmentManager fm = getFragmentManager();
- if (doc.isDirectory()) {
- openDirectory(doc);
+ if (doc.isContainer()) {
+ openContainerDocument(doc);
} else if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
// Explicit file picked, return
new ExistingFinishTask(doc.derivedUri).executeOnExecutor(getExecutorForCurrentDirectory());
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java
index f224343..cccbbc8 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java
@@ -185,8 +185,8 @@
@Override
public void onDocumentPicked(DocumentInfo doc, DocumentContext context) {
final FragmentManager fm = getFragmentManager();
- if (doc.isDirectory()) {
- openDirectory(doc);
+ if (doc.isContainer()) {
+ openContainerDocument(doc);
} else {
// First try managing the document; we expect manager to filter
// based on authority, so we don't grant.
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index 840f7fa..bf44013 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -311,8 +311,8 @@
@Override
public void onDocumentPicked(DocumentInfo doc, @Nullable DocumentContext siblings) {
- if (doc.isDirectory()) {
- openDirectory(doc);
+ if (doc.isContainer()) {
+ openContainerDocument(doc);
} else {
openDocument(doc, siblings);
}
@@ -369,9 +369,15 @@
// TODO: Should be statically bound using alphabeticShortcut. See b/21330356.
dir = DirectoryFragment.get(getFragmentManager());
dir.copySelectedToClipboard();
+ return true;
+ case KeyEvent.KEYCODE_V:
+ // TODO: Should be statically bound using alphabeticShortcut. See b/21330356.
+ dir = DirectoryFragment.get(getFragmentManager());
+ dir.pasteFromClipboard();
+ return true;
+ default:
+ return super.onKeyShortcut(keyCode, event);
}
-
- return super.onKeyShortcut(keyCode, event);
}
@Override
diff --git a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
index e6c5ae2..113e9d7 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/LocalPreferences.java
@@ -24,8 +24,10 @@
private static final String KEY_FILE_SIZE = "fileSize";
public static boolean getDisplayAdvancedDevices(Context context) {
+ boolean defaultAdvanced = context.getResources()
+ .getBoolean(R.bool.config_defaultAdvancedDevices);
return PreferenceManager.getDefaultSharedPreferences(context)
- .getBoolean(KEY_ADVANCED_DEVICES, false);
+ .getBoolean(KEY_ADVANCED_DEVICES, defaultAdvanced);
}
public static boolean getDisplayFileSize(Context context) {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
index b0421b0..2d77c6a 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -17,7 +17,6 @@
package com.android.documentsui.dirlist;
import static com.android.documentsui.Shared.DEBUG;
-import static com.android.documentsui.State.ACTION_CREATE;
import static com.android.documentsui.State.ACTION_MANAGE;
import static com.android.documentsui.State.MODE_GRID;
import static com.android.documentsui.State.MODE_LIST;
@@ -28,6 +27,7 @@
import static com.android.documentsui.model.DocumentInfo.getCursorString;
import static com.android.internal.util.Preconditions.checkNotNull;
import static com.android.internal.util.Preconditions.checkState;
+import static com.google.common.base.Preconditions.checkArgument;
import android.app.Activity;
import android.app.ActivityManager;
@@ -89,6 +89,7 @@
import android.widget.TextView;
import com.android.documentsui.BaseActivity;
+import com.android.documentsui.BaseActivity.DocumentContext;
import com.android.documentsui.CopyService;
import com.android.documentsui.DirectoryLoader;
import com.android.documentsui.DirectoryResult;
@@ -101,20 +102,18 @@
import com.android.documentsui.MessageBar;
import com.android.documentsui.MimePredicate;
import com.android.documentsui.ProviderExecutor;
+import com.android.documentsui.ProviderExecutor.Preemptable;
import com.android.documentsui.R;
import com.android.documentsui.RecentLoader;
import com.android.documentsui.RecentsProvider;
+import com.android.documentsui.RecentsProvider.StateColumns;
import com.android.documentsui.RootCursorWrapper;
import com.android.documentsui.RootsCache;
import com.android.documentsui.Shared;
+import com.android.documentsui.Shared;
import com.android.documentsui.Snackbars;
import com.android.documentsui.State;
import com.android.documentsui.ThumbnailCache;
-import com.android.documentsui.BaseActivity.DocumentContext;
-import com.android.documentsui.ProviderExecutor.Preemptable;
-import com.android.documentsui.Shared;
-import com.android.documentsui.RecentsProvider.StateColumns;
-import com.android.documentsui.dirlist.MultiSelectManager.Callback;
import com.android.documentsui.dirlist.MultiSelectManager.Selection;
import com.android.documentsui.model.DocumentInfo;
import com.android.documentsui.model.DocumentStack;
@@ -147,7 +146,7 @@
public static final int REQUEST_COPY_DESTINATION = 1;
private static final int LOADER_ID = 42;
- private static final boolean DEBUG_ENABLE_DND = false;
+ private static final boolean DEBUG_ENABLE_DND = true;
private static final String EXTRA_TYPE = "type";
private static final String EXTRA_ROOT = "root";
@@ -741,45 +740,47 @@
Selection selection = mSelectionManager.getSelection(new Selection());
- final int id = item.getItemId();
- if (id == R.id.menu_open) {
- openDocuments(selection);
- mode.finish();
- return true;
+ switch (item.getItemId()) {
+ case R.id.menu_open:
+ openDocuments(selection);
+ mode.finish();
+ return true;
- } else if (id == R.id.menu_share) {
- shareDocuments(selection);
- mode.finish();
- return true;
+ case R.id.menu_share:
+ shareDocuments(selection);
+ mode.finish();
+ return true;
- } else if (id == R.id.menu_delete) {
- // Exit selection mode first, so we avoid deselecting deleted documents.
- mode.finish();
- deleteDocuments(selection);
- return true;
+ case R.id.menu_delete:
+ // Exit selection mode first, so we avoid deselecting deleted documents.
+ mode.finish();
+ deleteDocuments(selection);
+ return true;
- } else if (id == R.id.menu_copy_to) {
- transferDocuments(selection, CopyService.TRANSFER_MODE_COPY);
- mode.finish();
- return true;
+ case R.id.menu_copy_to:
+ transferDocuments(selection, CopyService.TRANSFER_MODE_COPY);
+ mode.finish();
+ return true;
- } else if (id == R.id.menu_move_to) {
- // Exit selection mode first, so we avoid deselecting deleted documents.
- mode.finish();
- transferDocuments(selection, CopyService.TRANSFER_MODE_MOVE);
- return true;
+ case R.id.menu_move_to:
+ // Exit selection mode first, so we avoid deselecting deleted documents.
+ mode.finish();
+ transferDocuments(selection, CopyService.TRANSFER_MODE_MOVE);
+ return true;
- } else if (id == R.id.menu_copy_to_clipboard) {
- copySelectionToClipboard(selection);
- mode.finish();
- return true;
+ case R.id.menu_copy_to_clipboard:
+ if (!selection.isEmpty()) {
+ copySelectionToClipboard(selection);
+ }
+ return true;
- } else if (id == R.id.menu_select_all) {
- selectAllFiles();
- return true;
+ case R.id.menu_select_all:
+ selectAllFiles();
+ return true;
- } else {
- return false;
+ default:
+ if (DEBUG) Log.d(TAG, "Unhandled menu item selected: " + item);
+ return false;
}
}
}
@@ -1359,11 +1360,14 @@
}
public void copySelectedToClipboard() {
- Selection sel = mSelectionManager.getSelection(new Selection());
- copySelectionToClipboard(sel);
+ Selection selection = mSelectionManager.getSelection(new Selection());
+ if (!selection.isEmpty()) {
+ copySelectionToClipboard(selection);
+ }
}
- void copySelectionToClipboard(Selection items) {
+ void copySelectionToClipboard(Selection selection) {
+ checkArgument(!selection.isEmpty());
new GetDocumentsTask() {
@Override
void onDocumentsReady(List<DocumentInfo> docs) {
@@ -1374,7 +1378,7 @@
R.plurals.clipboard_files_clipped, docs.size(), docs.size()),
Snackbar.LENGTH_SHORT).show();
}
- }.execute(items);
+ }.execute(selection);
}
public void pasteFromClipboard() {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
index dfdc705..69b574d 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
@@ -243,6 +243,14 @@
return (flags & Document.FLAG_DIR_HIDE_GRID_TITLES) != 0;
}
+ public boolean isArchive() {
+ return (flags & Document.FLAG_ARCHIVE) != 0;
+ }
+
+ public boolean isContainer() {
+ return isDirectory() || isArchive();
+ }
+
public int hashCode() {
return derivedUri.hashCode() + mimeType.hashCode();
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
index ae5644d..4caa891 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/RootInfo.java
@@ -23,8 +23,10 @@
import android.content.Context;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
+import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Root;
import android.text.TextUtils;
@@ -195,6 +197,10 @@
}
}
+ public Uri getUri() {
+ return DocumentsContract.buildRootUri(authority, rootId);
+ }
+
public boolean isRecents() {
return authority == null && rootId == null;
}
@@ -238,11 +244,6 @@
|| derivedType == TYPE_RECENTS || derivedType == TYPE_DOWNLOADS;
}
- @Override
- public String toString() {
- return "Root{authority=" + authority + ", rootId=" + rootId + ", title=" + title + "}";
- }
-
public Drawable loadIcon(Context context) {
if (derivedIcon != 0) {
return context.getDrawable(derivedIcon);
@@ -283,6 +284,11 @@
return Objects.hash(authority, rootId);
}
+ @Override
+ public String toString() {
+ return "Root{authority=" + authority + ", rootId=" + rootId + ", title=" + title + "}";
+ }
+
public String getDirectoryString() {
return !TextUtils.isEmpty(summary) ? summary : title;
}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java
new file mode 100644
index 0000000..737a8b6
--- /dev/null
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.documentsui;
+
+import static com.android.documentsui.StubProvider.DEFAULT_AUTHORITY;
+import static com.android.documentsui.StubProvider.ROOT_0_ID;
+
+import android.app.Instrumentation;
+import android.content.ContentProviderClient;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.os.RemoteException;
+import android.provider.DocumentsContract;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.Configurator;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.Until;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import com.android.documentsui.model.RootInfo;
+
+@LargeTest
+public class DownloadsActivityUiTest extends InstrumentationTestCase {
+
+ private static final int TIMEOUT = 5000;
+ private static final String TAG = "DownloadsActivityUiTest";
+ private static final String TARGET_PKG = "com.android.documentsui";
+ private static final String LAUNCHER_PKG = "com.android.launcher";
+
+ private UiBot mBot;
+ private UiDevice mDevice;
+ private Context mContext;
+ private ContentResolver mResolver;
+ private DocumentsProviderHelper mDocsHelper;
+ private ContentProviderClient mClient;
+ private RootInfo mRoot;
+
+ public void setUp() throws Exception {
+ // Initialize UiDevice instance.
+ Instrumentation instrumentation = getInstrumentation();
+
+ mDevice = UiDevice.getInstance(instrumentation);
+
+ Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_MOUSE);
+
+ // Start from the home screen.
+ mDevice.pressHome();
+ mDevice.wait(Until.hasObject(By.pkg(LAUNCHER_PKG).depth(0)), TIMEOUT);
+
+ // NOTE: Must be the "target" context, else security checks in content provider will fail.
+ mContext = instrumentation.getTargetContext();
+ mResolver = mContext.getContentResolver();
+
+ mClient = mResolver.acquireUnstableContentProviderClient(DEFAULT_AUTHORITY);
+ mDocsHelper = new DocumentsProviderHelper(DEFAULT_AUTHORITY, mClient);
+
+ mRoot = mDocsHelper.getRoot(ROOT_0_ID);
+
+ // Open the Downloads activity on our stub provider root.
+ Intent intent = new Intent(DocumentsContract.ACTION_MANAGE_ROOT);
+ intent.setDataAndType(mRoot.getUri(), DocumentsContract.Root.MIME_TYPE_ITEM);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ mContext.startActivity(intent);
+
+ // Wait for the app to appear.
+ mDevice.wait(Until.hasObject(By.pkg(TARGET_PKG).depth(0)), TIMEOUT);
+ mDevice.waitForIdle();
+
+ mBot = new UiBot(mDevice, TIMEOUT);
+
+ resetStorage(); // Just in case a test failed and tearDown didn't happen.
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ // Need to kill off the task we started.
+ super.tearDown();
+ Log.d(TAG, "Resetting storage from setUp");
+ resetStorage();
+ mClient.release();
+ }
+
+ private void resetStorage() throws RemoteException {
+ mClient.call("clear", null, null);
+ // TODO: Would be nice to have an event to wait on here.
+ mDevice.waitForIdle();
+ }
+
+ private void initTestFiles() throws RemoteException {
+ mDocsHelper.createDocument(mRoot, "text/plain", "file0.log");
+ mDocsHelper.createDocument(mRoot, "image/png", "file1.png");
+ mDocsHelper.createDocument(mRoot, "text/csv", "file2.csv");
+ }
+
+ public void testWindowTitle() throws Exception {
+ initTestFiles();
+
+ mBot.assertWindowTitle(ROOT_0_ID);
+ }
+
+ public void testFilesListed() throws Exception {
+ initTestFiles();
+
+ mBot.assertHasDocuments("file0.log", "file1.png", "file2.csv");
+ }
+
+ public void testFilesList_LiveUpdate() throws Exception {
+ initTestFiles();
+
+ mDocsHelper.createDocument(mRoot, "yummers/sandwich", "Ham & Cheese.sandwich");
+ mBot.assertHasDocuments("file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich");
+ }
+
+ public void testDeleteDocument() throws Exception {
+ initTestFiles();
+
+ mBot.clickDocument("file1.png");
+ mDevice.waitForIdle();
+ mBot.menuDelete().click();
+
+ mBot.waitForDeleteSnackbar();
+ assertFalse(mBot.hasDocuments("file1.png"));
+
+ mBot.waitForDeleteSnackbarGone();
+ assertFalse(mBot.hasDocuments("file1.png"));
+ }
+
+ public void testSupportsShare() throws Exception {
+ initTestFiles();
+
+ mBot.clickDocument("file1.png");
+ mDevice.waitForIdle();
+ assertNotNull(mBot.menuShare());
+ }
+}
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
index d23cdeb..7a75503 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/StubProvider.java
@@ -226,6 +226,12 @@
}
@Override
+ public Cursor queryChildDocumentsForManage(String parentDocumentId, String[] projection,
+ String sortOrder) throws FileNotFoundException {
+ return queryChildDocuments(parentDocumentId, projection, sortOrder);
+ }
+
+ @Override
public Cursor queryChildDocuments(String parentDocumentId, String[] projection, String sortOrder)
throws FileNotFoundException {
final StubDocument parentDocument = mStorage.get(parentDocumentId);
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java
index ecad061..68cdf12 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java
@@ -179,6 +179,10 @@
return find(By.res("com.android.documentsui:id/menu_delete"));
}
+ UiObject2 menuShare() {
+ return find(By.res("com.android.documentsui:id/menu_share"));
+ }
+
private UiObject2 find(BySelector selector) {
mDevice.wait(Until.findObject(selector), mTimeout);
return mDevice.findObject(selector);
diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java
index 72fc108..030ac6c 100644
--- a/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java
+++ b/packages/DocumentsUI/tests/src/com/android/documentsui/dirlist/MultiSelectManager_SelectionTest.java
@@ -22,7 +22,7 @@
import com.android.documentsui.dirlist.MultiSelectManager.Selection;
@SmallTest
-public class MultiSelectManager_SelectionTest extends AndroidTestCase{
+public class MultiSelectManager_SelectionTest extends AndroidTestCase {
private Selection selection;
diff --git a/packages/MtpDocumentsProvider/Android.mk b/packages/MtpDocumentsProvider/Android.mk
index ec18463..3c2fa36 100644
--- a/packages/MtpDocumentsProvider/Android.mk
+++ b/packages/MtpDocumentsProvider/Android.mk
@@ -5,6 +5,7 @@
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := MtpDocumentsProvider
LOCAL_CERTIFICATE := media
+LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PACKAGE)
include $(LOCAL_PATH)/tests/Android.mk
diff --git a/packages/MtpDocumentsProvider/AndroidManifest.xml b/packages/MtpDocumentsProvider/AndroidManifest.xml
index 0172a4f..2090d20 100644
--- a/packages/MtpDocumentsProvider/AndroidManifest.xml
+++ b/packages/MtpDocumentsProvider/AndroidManifest.xml
@@ -3,29 +3,26 @@
package="com.android.mtp"
android:sharedUserId="android.media">
<uses-feature android:name="android.hardware.usb.host" />
+ <uses-permission android:name="android.permission.MANAGE_USB" />
<application android:label="@string/app_label">
<provider
android:name=".MtpDocumentsProvider"
android:authorities="com.android.mtp.documents"
android:grantUriPermissions="true"
android:exported="true"
- android:permission="android.permission.MANAGE_DOCUMENTS"
- android:enabled="false">
+ android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
- <activity android:name=".ReceiverActivity"
- android:theme="@android:style/Theme.NoDisplay"
- android:screenOrientation="locked"
- android:excludeFromRecents="true"
- android:enabled="false">
+ <service android:name=".MtpDocumentsService" />
+ <receiver android:name=".UsbIntentReceiver" android:exported="true">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
+ <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
- android:resource="@xml/device_filter" />
- </activity>
- <service android:name=".MtpDocumentsService"></service>
+ android:resource="@xml/device_filter" />
+ </receiver>
</application>
</manifest>
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
index 9511e15..d5f00e6 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsProvider.java
@@ -253,9 +253,15 @@
mRootScanner.notifyChange();
}
- boolean hasOpenedDevices() {
+ int[] getOpenedDeviceIds() {
synchronized (mDeviceListLock) {
- return mMtpManager.getOpenedDeviceIds().length != 0;
+ return mMtpManager.getOpenedDeviceIds();
+ }
+ }
+
+ String getDeviceName(int deviceId) throws IOException {
+ synchronized (mDeviceListLock) {
+ return mMtpManager.getDeviceName(deviceId);
}
}
@@ -308,7 +314,7 @@
getDeviceToolkit(deviceId).mDocumentLoader.clearTasks();
mDeviceToolkits.remove(deviceId);
mMtpManager.closeDevice(deviceId);
- if (!hasOpenedDevices()) {
+ if (getOpenedDeviceIds().length == 0) {
mRootScanner.pause();
}
}
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
index 9b3c20f..b0cff83 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDocumentsService.java
@@ -16,16 +16,16 @@
package com.android.mtp;
+import android.app.Notification;
import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.Context;
+import android.app.NotificationManager;
import android.content.Intent;
-import android.content.IntentFilter;
import android.hardware.usb.UsbDevice;
-import android.hardware.usb.UsbManager;
import android.os.IBinder;
import android.util.Log;
+import com.android.internal.util.Preconditions;
+
import java.io.IOException;
/**
@@ -34,10 +34,12 @@
* starts to run when the first MTP device is opened, and stops when the last MTP device is closed.
*/
public class MtpDocumentsService extends Service {
- static final String ACTION_OPEN_DEVICE = "com.android.mtp.action.ACTION_OPEN_DEVICE";
+ static final String ACTION_OPEN_DEVICE = "com.android.mtp.OPEN_DEVICE";
+ static final String ACTION_CLOSE_DEVICE = "com.android.mtp.CLOSE_DEVICE";
static final String EXTRA_DEVICE = "device";
+ private static final int FOREGROUND_NOTIFICATION_ID = 1;
- Receiver mReceiver;
+ NotificationManager mNotificationManager;
@Override
public IBinder onBind(Intent intent) {
@@ -48,60 +50,89 @@
@Override
public void onCreate() {
super.onCreate();
- final IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_DEVICE_DETACHED);
- mReceiver = new Receiver();
- registerReceiver(mReceiver, filter);
+ mNotificationManager = getSystemService(NotificationManager.class);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// If intent is null, the service was restarted.
if (intent != null) {
- if (intent.getAction().equals(ACTION_OPEN_DEVICE)) {
- final UsbDevice device = intent.<UsbDevice>getParcelableExtra(EXTRA_DEVICE);
- try {
- final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance();
- provider.openDevice(device.getDeviceId());
- return START_STICKY;
- } catch (IOException error) {
- Log.e(MtpDocumentsProvider.TAG, error.getMessage());
+ final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance();
+ final UsbDevice device = intent.<UsbDevice>getParcelableExtra(EXTRA_DEVICE);
+ try {
+ Preconditions.checkNotNull(device);
+ switch (intent.getAction()) {
+ case ACTION_OPEN_DEVICE:
+ provider.openDevice(device.getDeviceId());
+ break;
+
+ case ACTION_CLOSE_DEVICE:
+ provider.closeDevice(device.getDeviceId());
+ break;
+
+ default:
+ throw new IllegalArgumentException("Received unknown intent action.");
}
- } else {
- Log.e(MtpDocumentsProvider.TAG, "Received unknown intent action.");
+ } catch (IOException | InterruptedException | IllegalArgumentException error) {
+ logErrorMessage(error);
}
+ } else {
+ // TODO: Fetch devices again.
}
- stopSelfIfNeeded();
- return Service.START_NOT_STICKY;
+
+ return updateForegroundState() ? START_STICKY : START_NOT_STICKY;
}
- @Override
- public void onDestroy() {
- unregisterReceiver(mReceiver);
- mReceiver = null;
- super.onDestroy();
- }
-
- private void stopSelfIfNeeded() {
+ /**
+ * Updates the foreground state of the service.
+ * @return Whether the service is foreground or not.
+ */
+ private boolean updateForegroundState() {
final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance();
- if (!provider.hasOpenedDevices()) {
+ final int[] deviceIds = provider.getOpenedDeviceIds();
+ String message = null;
+ if (deviceIds.length != 0) {
+ // TODO: Localize the message.
+ // TODO: Add buttons "Open in Files" and "Open in Apps" if needed.
+ if (deviceIds.length > 1) {
+ message = deviceIds.length + " devices are being connected.";
+ } else {
+ try {
+ message = provider.getDeviceName(deviceIds[0]) + " is being connected.";
+ } catch (IOException exp) {
+ logErrorMessage(exp);
+ // If we failed to obtain device name, it looks the device is unusable.
+ // Because this is the last device we opened, we should hide the notification
+ // for the case.
+ try {
+ provider.closeDevice(deviceIds[0]);
+ } catch (IOException | InterruptedException closeError) {
+ logErrorMessage(closeError);
+ }
+ }
+ }
+ }
+ if (message != null) {
+ final Notification notification = new Notification.Builder(this)
+ .setContentTitle(message)
+ .setSmallIcon(android.R.drawable.ic_menu_camera)
+ .setCategory(Notification.CATEGORY_SYSTEM)
+ .setPriority(Notification.PRIORITY_LOW)
+ .build();
+ startForeground(FOREGROUND_NOTIFICATION_ID, notification);
+ return true;
+ } else {
+ stopForeground(true /* removeNotification */);
stopSelf();
+ return false;
}
}
- private class Receiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(intent.getAction())) {
- final UsbDevice device =
- (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
- final MtpDocumentsProvider provider = MtpDocumentsProvider.getInstance();
- try {
- provider.closeDevice(device.getDeviceId());
- } catch (IOException | InterruptedException error) {
- Log.e(MtpDocumentsProvider.TAG, error.getMessage());
- }
- stopSelfIfNeeded();
- }
+ private static void logErrorMessage(Exception exp) {
+ if (exp.getMessage() != null) {
+ Log.e(MtpDocumentsProvider.TAG, exp.getMessage());
+ } else {
+ Log.e(MtpDocumentsProvider.TAG, exp.toString());
}
}
}
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
index cd52f31..e7f94b7 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
@@ -32,7 +32,6 @@
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.util.ArrayList;
/**
* The model wrapping android.mtp API.
@@ -62,8 +61,10 @@
}
if (!mManager.hasPermission(rawDevice)) {
- // Permission should be obtained via app selection dialog for intent.
- throw new IOException("No parmission to operate USB device.");
+ mManager.grantPermission(rawDevice);
+ if (!mManager.hasPermission(rawDevice)) {
+ throw new IOException("Failed to grant a device permission.");
+ }
}
final MtpDevice device = new MtpDevice(rawDevice);
@@ -99,6 +100,10 @@
return result;
}
+ String getDeviceName(int deviceId) throws IOException {
+ return getDevice(deviceId).getDeviceInfo().getModel();
+ }
+
MtpRoot[] getRoots(int deviceId) throws IOException {
final MtpDevice device = getDevice(deviceId);
synchronized (device) {
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java b/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
deleted file mode 100644
index 3ad2397..0000000
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/ReceiverActivity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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.mtp;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.hardware.usb.UsbManager;
-import android.os.Bundle;
-
-/**
- * Invisible activity to receive intents.
- * To show the application chooser for the UsbManager.ACTION_USB_DEVICE_ATTACHED intent, the intent
- * should be received by activity. The activity has NoDisplay theme and immediately terminate after
- * routing intent to MtpDocumentsService.
- */
-public class ReceiverActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(getIntent().getAction())) {
- final Intent serviceIntent = new Intent(
- MtpDocumentsService.ACTION_OPEN_DEVICE,
- null,
- this,
- MtpDocumentsService.class);
- serviceIntent.putExtra(
- UsbManager.EXTRA_DEVICE,
- getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE));
- startService(serviceIntent);
- }
- finish();
- }
-}
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/UsbIntentReceiver.java b/packages/MtpDocumentsProvider/src/com/android/mtp/UsbIntentReceiver.java
new file mode 100644
index 0000000..0ac130e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/UsbIntentReceiver.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.mtp;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.hardware.usb.UsbDevice;
+import android.hardware.usb.UsbManager;
+import android.net.Uri;
+
+public class UsbIntentReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final UsbDevice device = intent.getExtras().getParcelable(UsbManager.EXTRA_DEVICE);
+ switch (intent.getAction()) {
+ case UsbManager.ACTION_USB_DEVICE_ATTACHED:
+ startService(context, MtpDocumentsService.ACTION_OPEN_DEVICE, device);
+ break;
+ case UsbManager.ACTION_USB_DEVICE_DETACHED:
+ startService(context, MtpDocumentsService.ACTION_CLOSE_DEVICE, device);
+ break;
+ }
+ }
+
+ private void startService(Context context, String action, UsbDevice device) {
+ final Intent intent = new Intent(action, Uri.EMPTY, context, MtpDocumentsService.class);
+ intent.putExtra(MtpDocumentsService.EXTRA_DEVICE, device);
+ context.startService(intent);
+ }
+}
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
index a045d06..ed617e7 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
@@ -24,6 +24,9 @@
import android.test.InstrumentationTestCase;
import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.FutureTask;
+import java.util.concurrent.TimeUnit;
@RealDeviceTest
public class MtpManagerTest extends InstrumentationTestCase {
@@ -53,20 +56,23 @@
public void testCancelEvent() throws Exception {
final CancellationSignal signal = new CancellationSignal();
- final Thread thread = new Thread() {
- @Override
- public void run() {
- try {
- mManager.readEvent(mUsbDevice.getDeviceId(), signal);
- } catch (OperationCanceledException | IOException e) {
- getInstrumentation().show(e.getMessage());
- }
- }
- };
+ final FutureTask<Boolean> future = new FutureTask<Boolean>(
+ new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws IOException {
+ try {
+ mManager.readEvent(mUsbDevice.getDeviceId(), signal);
+ return false;
+ } catch (OperationCanceledException exception) {
+ return true;
+ }
+ }
+ });
+ final Thread thread = new Thread(future);
thread.start();
Thread.sleep(TIMEOUT_MS);
signal.cancel();
- thread.join(TIMEOUT_MS);
+ assertTrue(future.get(TIMEOUT_MS, TimeUnit.MILLISECONDS));
}
private Context getContext() {
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestResultInstrumentation.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestResultInstrumentation.java
index 3e64f9a2..4e4cf78 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestResultInstrumentation.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestResultInstrumentation.java
@@ -23,6 +23,10 @@
import junit.framework.Test;
import junit.framework.TestListener;
+/**
+ * Instrumentation that can show the test result in the TestResultActivity.
+ * It's useful when it runs testcases with a real USB device and could not use USB port for ADB.
+ */
public class TestResultInstrumentation extends InstrumentationTestRunner implements TestListener {
private boolean mHasError = false;
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestUtil.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestUtil.java
index e6c12cb..f910321 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestUtil.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/TestUtil.java
@@ -33,7 +33,7 @@
/**
* Static utility methods for testing.
*/
-class TestUtil {
+final class TestUtil {
private static final String ACTION_USB_PERMISSION =
"com.android.mtp.USB_PERMISSION";
@@ -42,12 +42,11 @@
/**
* Requests permission for a MTP device and returns the first MTP device that has at least one
* storage.
- * @throws Exception
*/
static UsbDevice setupMtpDevice(
TestResultInstrumentation instrumentation,
UsbManager usbManager,
- MtpManager manager) throws Exception {
+ MtpManager manager) throws InterruptedException, IOException {
for (int i = 0; i < 2; i++) {
final UsbDevice device = findMtpDevice(instrumentation, usbManager);
manager.openDevice(device.getDeviceId());
@@ -121,7 +120,7 @@
private static void waitForStorages(
TestResultInstrumentation instrumentation,
MtpManager manager,
- int deviceId) throws Exception {
+ int deviceId) throws IOException, InterruptedException {
while (true) {
if (manager.getRoots(deviceId).length == 0) {
instrumentation.show("Wait for storages.");
diff --git a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
index b92a389..90eef83 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/model/PrintSpoolerService.java
@@ -1070,7 +1070,7 @@
if (progressString != null) {
float progress = Float.parseFloat(progressString);
- if (progress != Float.NaN) {
+ if (progress != -1) {
printJob.setProgress(progress);
}
}
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 6693997..c886476 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Geblokkeer"</item>
<item msgid="1805837518286731242">"Vermy tydelik swak verbinding"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Kontroleer nooit"</item>
+ <item msgid="6042769699089883931">"Kontroleer net vir DRM-inhoud"</item>
+ <item msgid="9174900380056846820">"Kontroleer altyd"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Moet nooit HDCP-kontrole gebruik nie"</item>
+ <item msgid="3878793616631049349">"Gebruik HDCP-kontrolering net vir DRM-inhoud"</item>
+ <item msgid="45075631231212732">"Gebruik altyd HDCP-kontrolering"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K per logbuffer"</item>
+ <item msgid="2822309747675758628">"256 K per logbuffer"</item>
+ <item msgid="6699306198357496731">"1 M per logbuffer"</item>
+ <item msgid="5748528643937500349">"4 M per logbuffer"</item>
+ <item msgid="1978629051085111592">"16 M per logbuffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasie af"</item>
+ <item msgid="6624864048416710414">"Animasieskaal .5x"</item>
+ <item msgid="2219332261255416635">"Animasieskaal 1x"</item>
+ <item msgid="3544428804137048509">"Animasieskaal 1.5x"</item>
+ <item msgid="3110710404225974514">"Animasieskaal 2x"</item>
+ <item msgid="4402738611528318731">"Animasieskaal 5x"</item>
+ <item msgid="6189539267968330656">"Animasieskaal 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasie af"</item>
+ <item msgid="3375781541913316411">"Animasieskaal .5x"</item>
+ <item msgid="1991041427801869945">"Animasieskaal 1x"</item>
+ <item msgid="4012689927622382874">"Animasieskaal 1.5x"</item>
+ <item msgid="3289156759925947169">"Animasieskaal 2x"</item>
+ <item msgid="7705857441213621835">"Animasieskaal 5x"</item>
+ <item msgid="6660750935954853365">"Animasieskaal 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasie af"</item>
+ <item msgid="1138649021950863198">"Animasieskaal 0,5x"</item>
+ <item msgid="4394388961370833040">"Animasieskaal 1x"</item>
+ <item msgid="8125427921655194973">"Animasieskaal 1,5x"</item>
+ <item msgid="3334024790739189573">"Animasieskaal 2x"</item>
+ <item msgid="3170120558236848008">"Animasieskaal 5x"</item>
+ <item msgid="1069584980746680398">"Animasieskaal 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Geen"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480 p (veilig)"</item>
+ <item msgid="1853913333042744661">"720 p"</item>
+ <item msgid="3414540279805870511">"720 p (veilig)"</item>
+ <item msgid="9039818062847141551">"1 080 p"</item>
+ <item msgid="4939496949750174834">"1 080 p (veilig)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (veilig)"</item>
+ <item msgid="3547211260846843098">"4K (opgeskaal)"</item>
+ <item msgid="5411365648951414254">"4K (opgeskaal, veilig)"</item>
+ <item msgid="1311305077526792901">"720 p, 1 080 p (dubbele skerm)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Geen"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafika)"</item>
+ <item msgid="1340692776955662664">"Belstapel op glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Af"</item>
+ <item msgid="675719912558941285">"Teken nie-reghoekige knipstreek in blou"</item>
+ <item msgid="1064373276095698656">"Merk getoetsde tekenopdragte in groen"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Af"</item>
+ <item msgid="2751513398307949636">"Op skerm as balke"</item>
+ <item msgid="1851438178120770973">"In adb-dop dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Af"</item>
+ <item msgid="7688197031296835369">"Wys oortrekareas"</item>
+ <item msgid="2290859360633824369">"Wys areas vir Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standaardlimiet"</item>
+ <item msgid="4071574792028999443">"Geen agtergrondprosesse"</item>
+ <item msgid="4810006996171705398">"Nie meer as 1 proses nie"</item>
+ <item msgid="8586370216857360863">"Nie meer as 2 prosesse nie"</item>
+ <item msgid="836593137872605381">"Nie meer as 3 prosesse nie"</item>
+ <item msgid="7899496259191969307">"Nie meer as 4 prosesse nie"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Laai tans"</item>
+ <item msgid="5220695614993094977">"MTP (Media-oordrag-protokol)"</item>
+ <item msgid="2086000968159047375">"PTP (Prentoordrag-protokol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB-ethernet)"</item>
+ <item msgid="1718924214939774352">"Oudiobron"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index afffe6d..302ba04 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Kies profiel"</string>
<string name="category_personal" msgid="1299663247844969448">"Persoonlik"</string>
<string name="category_work" msgid="8699184680584175622">"Werk"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Ontwikkelaaropsies"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktiveer ontwikkelaaropsies"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Stel opsies vir programontwikkeling"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Ontwikkelaar-opsies is nie beskikbaar vir hierdie gebruiker nie"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-instellings is nie vir hierdie gebruiker beskikbaar nie"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Verbindinginstellings is nie vir hierdie gebruiker beskikbaar nie"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Toegangspuntnaaminstellings is nie vir hierdie gebruiker beskikbaar nie"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-ontfouting"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"In ontfoutmodus wanneer USB gekoppel is"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Herroep USB-onfoutingmagtigings"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Kortpad na foutverslag"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Wys \'n knoppie in die kragkieslys om \'n foutverslag te doen"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Bly wakker"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skerm sal nooit slaap terwyl laai nie"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktiveer Bluetooth HCI-loerloglêer"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Vang alle Bluetooth HCI-pakette in \'n lêer vas"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontsluit"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Laat toe dat die selflaaiprogram ontsluit word"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Laat OEM-ontsluit toe?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WAARSKUWING: Toestelbeskermingkenmerke sal nie op hierdie toestel werk terwyl hierdie instelling aangeskakel is nie."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Kies skynliggingprogram"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Geen skynliggingprogram gestel nie"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Skynliggingprogram: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Inligtingruiling"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Draadlose skermsertifisering"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiveer Wi-Fi-woordryke aanmelding"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressiewe Wi-Fi na selfoon-oordrag"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Laat altyd Wi-Fi-swerfskanderings toe"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Gebruik vorige DHCP-kliënt"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Sellulêre data altyd aktief"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Laat toe of verbied Wi-Fi-swerfskanderings op grond van die hoeveelheid dataverkeer wat op die koppelvlak teenwoordig is"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Loggerbuffer se groottes"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Kies loggergroottes per logbuffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Kies USB-opstelling"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Kies USB-opstelling"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Laat skynliggings toe"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Laat skynliggings toe"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Aktiveer aansigkenmerkinspeksie"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Gebruik eerder die DHCP-kliënt van Lollipop af as die nuwe Android DHCP-kliënt."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hou mobiele data altyd aktief, selfs wanneer Wi‑Fi aktief is (vir vinnige netwerkwisseling)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Laat USB-ontfouting toe?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-ontfouting is net vir ontwikkelingsdoeleindes bedoel. Gebruik dit om data te kopieer tussen jou rekenaar en jou toestel, programme op jou toestel te installeer sonder kennisgewing en om loglêerdata te lees."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Herroep toegang tot USB-ontfouting vanaf alle rekenaars wat jy voorheen gemagtig het?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Laat ontwikkeling-instellings toe?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Hierdie instellings is bedoel net vir ontwikkelinggebruik. Dit kan jou toestel en die programme daarop breek of vreemde dinge laat doen."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifieer programme oor USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontroleer programme wat via ADB/ADT geïnstalleer is vir skadelike gedrag."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Plaaslike terminaal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktiveer terminaalprogram wat plaaslike skermtoegang bied"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-kontrolering"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Stel HDCP-kontrolering se gedrag"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Ontfouting"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Kies ontfoutprogram"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Geen ontfoutprogram gestel nie"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Ontfoutingsprogram: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Kies program"</string>
+ <string name="no_application" msgid="2813387563129153880">"Niks"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Wag vir ontfouter"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Ontfoutde program wag vir ontfouter om te heg voordat dit uitgevoer word"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Invoer"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Skets"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardeware-versnelde lewering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitering"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strengmodus geaktiveer"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flits skerm as programme lang handelinge doen op die hoofdraad"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Wyserligging"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Skermlaag wys huidige raakdata"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Wys aanrakings"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Toon visuele terugvoer vir aanrakings"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Wys oppervlakopdaterings"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flits vensteroppervlaktes in geheel wanneer dit opdateer"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Wys GPU-aansigopdaterings"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flits aansigte binne die vensters wanneer dit met die GPU geskets is"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Wys hardewarelae se opdaterings"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Laat hardewarelae groen flits wanneer hulle opgedateer word"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ontfout GPU-oortrek"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Deaktiveer HW-oorleggers"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Gebruik altyd GPU vir skermsamestelling"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuleer kleurruimte"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Aktiveer OpenGL-spore"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Deaktiveer USB-oudioroetering"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Deaktiveer outoroetering na USB-oudiorandtoestelle"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Wys uitleg se grense"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Wys snitgrense, kantlyne, ens."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Dwing RTL-uitlegrigting"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Dwing skermuitlegrigting na RTL vir alle locales"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Wys CPU-verbruik"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Skermlaag wys huidige CPU-gebruik"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forseer GPU-lewering"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Dwing gebruik van GPU vir 2D-tekening"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Dwing 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Aktiveer 4x MSAA in OpenGL ES 2.0-programme"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Ontfout nie-reghoekige knipbedrywighede"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profiel se GPU-lewering"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Vensteranimasieskaal"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Oorganganimasieskaal"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator-tydsduurskaal"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuleer sekondêre uitstallings"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Programme"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Moenie aktiwiteite behou nie"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Vernietig elke aktiwiteit sodra die gebruiker dit verlaat"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Agtergrondproses-limiet"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Wys alle ANRe"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Wys Program reageer nie-dialoog vir agtergrond programme"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Programme verplig ekstern toegelaat"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Laat enige program na ekstern geskryf word, ongeag manifeswaardes"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Verplig verstelbare groottes vir aktiwiteite"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Maak grootte van alle aktiwiteite verstelbaar vir veelvuldige vensters, ongeag manifeswaardes."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Werkskerm-rugsteunwagwoord"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Volle rekenaarrugsteune word nie tans beskerm nie"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Raak om die wagwoord vir volledige rekenaarrugsteune te verander of te verwyder"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nuwe rugsteunwagwoord ingestel"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nuwe wagwoord en bevestiging stem nie ooreen nie"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Rugsteunwagwoord kon nie ingestel word nie"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Lewendig (verstek)"</item>
+ <item msgid="8446070607501413455">"Natuurlik"</item>
+ <item msgid="6553408765810699025">"Standaard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Verbeterde kleure"</item>
+ <item msgid="8280754435979370728">"Natuurlike kleure soos dit vir die oë lyk"</item>
+ <item msgid="5363960654009010371">"Kleure vir digitale inhoud geoptimeer"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Onaktiewe programme"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Onaktief. Raak om te wissel."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktief. Raak om te wissel."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Lopende dienste"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Sien en beheer dienste wat tans loop"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nagmodus"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Gedeaktiveer"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Altyd aan"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Outomaties"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Skakel om na lêerenkripsie"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Skakel om …"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Lêerenkripsie is reeds uitgevoer"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Skakel tans na lêer-gebaseerde enkripsie om"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Skakel dataverdeling om in lêer-gebaseerde enkripsie.\n !!Waarskuwing!! Dit sal al jou data uitvee.\n Hierdie kenmerk is alfa en sal dalk nie reg werk nie.\n Druk \'Maak skoon en skakel om …\' om voort te gaan."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Maak skoon en skakel om …"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Fotokleurmodus"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Gebruik sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Gedeaktiveer"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Totale kleurblindheid"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalie (rooi-groen)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (rooi-groen)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (blou-geel)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Kleurregstelling"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Hierdie kenmerk is eksperimenteel en kan werkverrigting beïnvloed."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Geneutraliseer deur <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index 46790d6..324ee83 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ታግዷል"</item>
<item msgid="1805837518286731242">"ለጊዜያዊነት ከደካማ ግኑኝነት በመታቀብ ላይ"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"በፍፁም አትመልከት"</item>
+ <item msgid="6042769699089883931">"የDRM ይዘት ብቻ ተመልከት"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 ኪባ"</item>
+ <item msgid="505611754508988476">"256 ኪባ"</item>
+ <item msgid="6361286924268716397">"1 ሜባ"</item>
+ <item msgid="6405203239560695266">"4 ሜባ"</item>
+ <item msgid="3025431211013424097">"16 ሜባ"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 ኪባ"</item>
+ <item msgid="3534782711045262344">"256 ኪባ"</item>
+ <item msgid="8085867209202153403">"1 ሜባ"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 ኪባ በምዝግብ ማስታወሻ ቋጥ"</item>
+ <item msgid="2822309747675758628">"256 ኪባ በምዝግብ ማስታወሻ ቋጥ"</item>
+ <item msgid="6699306198357496731">"1 ሜ በምዝግብ ማስታወሻ ቋጥ"</item>
+ <item msgid="5748528643937500349">"4 ሜ በምዝግብ ማስታወሻ ቋጥ"</item>
+ <item msgid="1978629051085111592">"16 ሜ በምዝግብ ማስታወሻ ቋጥ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"እነማ ጠፍቷል"</item>
+ <item msgid="6624864048416710414">"የእነማ ልኬት ለውጥ.5x"</item>
+ <item msgid="2219332261255416635">"የእነማ ልኬት ለውጥ1x"</item>
+ <item msgid="3544428804137048509">"የእነማ ልኬት ለውጥ1.5x"</item>
+ <item msgid="3110710404225974514">"የእነማ ልኬት ለውጥ2x"</item>
+ <item msgid="4402738611528318731">"የእነማ ልኬት ለውጥ5x"</item>
+ <item msgid="6189539267968330656">"የእነማ ልኬት ለውጥ10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"እነማ ጠፍቷል"</item>
+ <item msgid="3375781541913316411">"የእነማ ልኬት ለውጥ.5x"</item>
+ <item msgid="1991041427801869945">"የእነማ ልኬት ለውጥ1x"</item>
+ <item msgid="4012689927622382874">"የእነማ ልኬት ለውጥ1.5x"</item>
+ <item msgid="3289156759925947169">"የእነማ ልኬት ለውጥ2x"</item>
+ <item msgid="7705857441213621835">"የእነማ ልኬት ለውጥ5x"</item>
+ <item msgid="6660750935954853365">"የእነማ ልኬት ለውጥ10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"እነማ ጠፍቷል"</item>
+ <item msgid="1138649021950863198">"የእነማ ልኬት ለውጥ .5x"</item>
+ <item msgid="4394388961370833040">"የእነማ ልኬት ለውጥ 1x"</item>
+ <item msgid="8125427921655194973">"የእነማ ልኬት ለውጥ 1.5x"</item>
+ <item msgid="3334024790739189573">"የእነማ ልኬት ለውጥ 2x"</item>
+ <item msgid="3170120558236848008">"የእነማ ልኬት ለውጥ 5x"</item>
+ <item msgid="1069584980746680398">"የእነማ ልኬት ለውጥ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ምንም የለም"</item>
+ <item msgid="9033194758688161545">"480ፒክሰል"</item>
+ <item msgid="1025306206556583600">"480ፒ (የተጠበቀ)"</item>
+ <item msgid="1853913333042744661">"720ፒ"</item>
+ <item msgid="3414540279805870511">"720ፒ (የተጠበቀ)"</item>
+ <item msgid="9039818062847141551">"1080ፒ"</item>
+ <item msgid="4939496949750174834">"1080ፒ (የተጠበቀ)"</item>
+ <item msgid="1833612718524903568">"4ኬ"</item>
+ <item msgid="238303513127879234">"4ኬ (የተጠበቀ)"</item>
+ <item msgid="3547211260846843098">"4ኬ (ከፍ ተድርጎ የተመጣጠነ)"</item>
+ <item msgid="5411365648951414254">"4ኬ (ከፍ ተድርጎ የተመጣጠነ፣ የተጠበቀ)"</item>
+ <item msgid="1311305077526792901">"720ፒ፣ 1080ፒ (ሁለትዮሽ ማያ ገጽ)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ምንም"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (ግራፊክስ)"</item>
+ <item msgid="1340692776955662664">"የጥሪ ቁልል በ glGetError ላይ"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ጠፍቷል"</item>
+ <item msgid="675719912558941285">"አራት ማእዘን ያልሆነ የቅንጥብ ክልልን በሰማያዊ ይሳሉ"</item>
+ <item msgid="1064373276095698656">"የተሞከሩ የስእል ትእዛዞችን በአረንጓዴ ያድምቁ"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ጠፍቷል"</item>
+ <item msgid="2751513398307949636">"ማያ ገጽ ላይ እንደ አሞሌዎች"</item>
+ <item msgid="1851438178120770973">"በ adb shell dumpsys gfxinfo ውስጥ"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ጠፍቷል"</item>
+ <item msgid="7688197031296835369">"ስዕሉ አልፎ የፈሰሰባቸው አካባቢዎችን አሳይ"</item>
+ <item msgid="2290859360633824369">"ቀይ እና አረንጓዴ የማይለይባቸው ቦታዎች አሳይ"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"መደበኛ ወሰኖች"</item>
+ <item msgid="4071574792028999443">"ምንም የዳራ ሂደቶች የሉም"</item>
+ <item msgid="4810006996171705398">"ቢበዛ 1 ሂደት"</item>
+ <item msgid="8586370216857360863">"ቢበዛ 2 ሂደቶች"</item>
+ <item msgid="836593137872605381">"ቢበዛ 3 ሂደቶች"</item>
+ <item msgid="7899496259191969307">"ቢበዛ 4 ሂደቶች"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ኃይል በመሙላት ላይ"</item>
+ <item msgid="5220695614993094977">"MTP (የሚዲያ ማስተላለፍ ፕሮቶኮል)"</item>
+ <item msgid="2086000968159047375">"PTP (የስዕል ማስተላለፍ ፕሮቶኮል)"</item>
+ <item msgid="7398830860950841822">"RNDIS (ዩኤስቢ ኤተርኔት)"</item>
+ <item msgid="1718924214939774352">"የኦዲዮ ምንጭ"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 0e29d8e..cd604d2 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"መገለጫ ይምረጡ"</string>
<string name="category_personal" msgid="1299663247844969448">"የግል"</string>
<string name="category_work" msgid="8699184680584175622">"ስራ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"የገንቢዎች አማራጮች"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"የገንቢዎች አማራጮችን አንቃ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ለመተግበሪያ ግንባታ አማራጮች አዘጋጅ"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"የገንቢ አማራጮች ለዚህ ተጠቃሚ አይገኙም"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"የቪፒኤን ቅንብሮች ለዚህ ተጠቃሚ አይገኙም"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"የበይነመረብ ተያያዥነት ቅንብሮች ለዚህ ተጠቃሚ አይገኙም"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"የመዳረሻ ነጥብ ስም ቅንብሮች ለዚህ ተጠቃሚ አይገኙም"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"የUSB አራሚ"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB ሲያያዝ የአርም ሁኔታ"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"የዩ ኤስ ቢ ስህተት ማረም ፈቀዳዎችን ይሻሩ"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"የሳንካ ሪፖርት አቋራጭ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"የሳንካ ሪፖርት ለመውሰድ በሃይል ምናሌ ውስጥ አዝራር አሳይ"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ነቅተህ ቆይ"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ማያኃይል በመሙላት ላይበፍፁም አይተኛም"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"የብሉቱዝ HCI ስለላ ምዝግብ ማስታወሻን ያንቁ"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"በአንድ ፋይል ውስጥ ያሉትን የብሉቱዝ HCI እሽጎች ይቅረጹ"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM መክፈቻ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"የማስነሻ ተሸካሚ እንዲከፈት ፍቀድ"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"የOEM መክፈቻ ይፈቀድ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ማስጠንቀቂያ፦ ይህ ቅንብር በሚበራበት ጊዜ የመሣሪያ ጥበቃ ባህሪዎች በዚህ መሣሪያ ላይ አይሰሩም።"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"የውሸት መገኛ አካባቢ መተግበሪያ ይምረጡ"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ምንም የውሸት መገኛ አካባቢ መተግበሪያ አልተዘጋጀም"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"የውሸት የመገኛ አካባቢ መተግበሪያ፦ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"አውታረ መረብ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"የWi‑Fi ተጨማሪ ቃላት ምዝግብ ማስታወሻ መያዝ"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"አስገዳጅ የWi‑Fi ወደ ተንቀሳቃሽ ርክክብ"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ሁልጊዜ የWi‑Fi ማንቀሳቀስ ቅኝቶችን ይፍቀዱ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"የቆየ የDHCP ደንበኛ ይጠቀሙ"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"የተንቀስቃሽ ስልክ ውሂብ ሁልጊዜ ንቁ"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"በበይነገጹ ላይ ባለው የውሂብ ትራፊክ መጠን ላይ ተመስርተው የWi‑Fi ማንቀሳቀስ ቅኝቶችን ይፍቀዱ/ይከልክሉ"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"የምዝግብ ማስታወሻ ያዥ መጠኖች"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"በአንድ ምዝግብ ማስታወሻ ቋጥ የሚኖረው የምዝግብ ማስታወሻ ያዥ መጠኖች ይምረጡ"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"የዩኤስቢ መዋቅር ይምረጡ"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"የዩኤስቢ መዋቅር ይምረጡ"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"አስቂኝ ሥፍራዎችን ፍቀድ"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"አስቂኝ ሥፍራዎችን ፍቀድ"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"የእይታ አይነታ ምርመራን አንቃ"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ከአዲሱ የAndroid DHCP ደንበኛ ይልቅ የLollipop DHCP ደንበኛውን ይጠቀሙ።"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ምንም እንኳን Wi‑Fi ንቁ ቢሆንም የሞባይል ውሂብን ንቁ እንደሆነ አቆይ (ለፈጣን የአውታረ መረብ ቅይይር)።"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"የUSB ማረሚያ ይፈቀድ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"የUSB አድስ ለግንባታ አላማ ብቻ የታሰበ ነው። ከኮምፒዩተርህ ወደ መሳሪያህ ውሂብ ለመገልበጥ፣ መሣሪያህ ላይ ያለ ማሳወቂያ መተግበሪያዎችን መጫን፣ እና ማስታወሻ ውሂብ ማንበብ ለመጠቀም ይቻላል።"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"የዩ ኤስ ቢ ማረም መዳረሻ ከዚህ ቀደም ፍቃድ ከሰጧቸው ኮምፒውተሮች ላይ ይሻሩ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"የግንባታ ቅንብሮችን ፍቀድ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"እነዚህ ቅንብሮች የታሰቡት ለግንባታ አጠቃቀም ብቻ ናቸው። መሳሪያህን እና በሱ ላይ ያሉትን መተግበሪያዎች እንዲበለሹ ወይም በትክክል እንዳይሰሩ ሊያደርጉ ይችላሉ።"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"መተግበሪያዎች በUSB በኩል ያረጋግጡ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"በADB/ADT በኩል የተጫኑ መተግበሪያዎች ጎጂ ባህሪ ካላቸው ያረጋግጡ።"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"አካባቢያዊ ተርሚናል"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"የአካባቢያዊ ሼል መዳረሻ የሚያቀርብ የተርሚናል መተግበሪያ አንቃ"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"የHDCP ምልከታ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"የHDCP መመልከቻ ጠባይ አዘጋጅ"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ስህተት በማስወገድ ላይ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"የስህተት ማስወገጃ መተግበሪያ ምረጥ"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ምንም የስህተት ማስወገጃ መተግበሪያ አልተዘጋጀም"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"የስህተት ማስወገጃ መተግበሪያ፦ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"መተግበሪያ ምረጥ"</string>
+ <string name="no_application" msgid="2813387563129153880">"ምንም"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ስህተት ማስወገጃውን ጠብቅ"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ስህተቱ የተወገደለት መተግበሪያ ከመፈጸሙ በፊት የስህተት ማስወገጃው እስኪያያዝ ድረስ እየጠበቀው ነው"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ግብዓት"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ስዕል"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"የተፋጠነ የሃርድዌር አሰጣጥ"</string>
+ <string name="media_category" msgid="4388305075496848353">"ማህደረመረጃ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"ቁጥጥር"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ጥብቅ ሁነታ ነቅቷል"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"መተግበሪያዎች ረጅም ክንውኖች ወደ ዋና ክሮች ሲያካሂዱ ማያላይ ብልጭ አድርግ።"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"የአመልካች ሥፍራ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"የማያ ተደራቢ የአሁኑን የCPU አጠቃቀም እያሳየ ነው።"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ንኪዎችን አሳይ"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ለንኪዎች የሚታይ ግብረመልስ አሳይ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"የወለል ዝማኔዎችን አሳይ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"የመስኮት ወለሎች ሲዘምኑ መላ መስኮቱን አብለጭልጭ"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"የGPU እይታ ዝማኔዎችን አሳይ"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ከGPU ጋር ሲሳል መስኮቶች ውስጥ እይታዎችን አብለጭልጭ"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"የሃርድዌር ንብርብሮች ዝማኔዎችን አሳይ"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"የሃርድዌር ንብርብሮች ሲዘምኑ አረንጓዴ አብራ"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"የጂፒዩ አልፎ መሳል አርም"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"የHW ተደራቢዎችን አሰናክል"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ለማያ ገጽ ማቀናበሪያ ሁልጊዜ GPU ተጠቀም"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"የቀለም ህዋ አስመስል"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"የ OpenGL ክትትሎችን ያንቁ"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"የUSB ተሰሚ ማዛወር ያሰናክሉ"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"በራስ-ሰር ወደ የUSB ተሰሚ ተገጣሚዎች ማሳወር ያሰናክሉ"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"የአቀማመጥ ገደቦችን አሳይ"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"የቅንጥብ ገደቦች፣ ጠርዞች፣ ወዘተ አሳይ"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"የቀኝ-ወደ-ግራ አቀማመጥ አቅጣጫ አስገድድ"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ለሁሉም አካባቢዎች የማያ ገጽ አቀማመጥ ከቀኝ-ወደ-ግራ እንዲሆን አስገድድ"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"የCPU አጠቃቀም አሳይ"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"የማያ ተደራቢ የአሁኑን የCPU አጠቃቀም እያሳየ ነው።"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU ምላሽ መስጠትን አስገድድ"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"ለ2-ልኬት መሳል የGPU ስራ አስገድድ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA አስገድድ"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA በ OpenGL ES 2.0 መተግበሪያዎች ውስጥ ያንቁ"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"አራት ማእዘን ያልሆኑ የቅንጥብ ክዋኔዎችን ስህተት አርም"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"የGPU ምላሽ መስጠት መዝግብ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"የዊንዶው እነማ ልኬት ለውጥ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"የእነማ ልኬት ለውጥ ሽግግር"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"እነማ አድራጊ ቆይታ መለኪያ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ሁለተኛ ማሳያዎችን አስመስለህ ስራ"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"መተግበሪያዎች"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"እንቅስቃሴዎችን አትጠብቅ"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ተጠቃሚው እስኪተወው ድረስ እያንዳንዱን እንቅስቃሴ አስወግድ"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"የዳራ አሂድ ወሰን"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ሁሉንም ANRs አሳይ"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"ለዳራ መተግበሪያዎች ምላሽ የማይሰጥ መገናኛ ትግበራ አሳይ"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"በውጫዊ ላይ ሃይል ይፈቀዳል"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"አንጸባራቂ እሴቶች ግምት ውስጥ ሳይገቡ ማንኛውም መተግበሪያ ወደ ውጫዊ ማከማቻ ለመጻፍ ብቁ ያደርጋል።"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"እንቅስቃሴዎች ዳግመኛ እንዲመጣጠኑ አስገድድ"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"የዝርዝር ሰነድ እሴቶች ምንም ይሁኑ ምን ለበርካታ መስኮቶች ሁሉንም እንቅስቃሴዎች ዳግም የሚመጣጠኑ እንዲሆኑ ያደርጋቸዋል።"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"የዴስክቶፕ መጠባበቂያ ይለፍ ቃል"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ዴስክቶፕ ሙሉ ምትኬዎች በአሁኑ ሰዓት አልተጠበቁም"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ለዴስክቶፕ ሙሉ ምትኬዎች የይለፍ ቃል ለመለወጥ ወይም ለማስወገድ ንካ"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"አዲስ የምትኬ ይለፍ ቃል ተዋቅሯል"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"አዲሱ የይለፍ ቃል እና ማረጋገጫው አይዛመዱም"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"የምትኬ ይለፍ ቃል ማዋቀር አልተሳካም"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"ነዛሪ (ነባሪ)"</item>
+ <item msgid="8446070607501413455">"ተፈጥሯዊ"</item>
+ <item msgid="6553408765810699025">"መደበኛ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"የበለጸጉ ቀለማት"</item>
+ <item msgid="8280754435979370728">"ልክ በዓይን እንደሚታዩት የተፈጥሮ ቀለማት"</item>
+ <item msgid="5363960654009010371">"ለዲጂታል ይዘት የላቁ ቀለማት"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"ንቁ ያልሆኑ መተግበሪያዎች"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"ንቁ ያልሆነ። ለመቀያየር ነካ ያድርጉ።"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"ንቁ። ለመቀያየር ነካ ያድርጉ።"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"አሂድ አገልግሎቶች"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"በአሁኑጊዜ እየሄዱ ያሉ አገልግሎቶችን ተቆጣጠር እና እይ"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"የሌሊት ሁነታ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ተሰናክሏል"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ሁልጊዜ ይበራል"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ራስ-ሰር"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ወደ ፋይል ምሥጠራ ቀይር"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ለውጥ…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ፋይል አስቀድሞ ተመስጥሯል"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ወደ በፋይል ላይ የተመሠረተ ምስጠራን በመለወጥ ላይ"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"የውሂብ ክፍፍልን ወደ በፋይል ላይ የተመሠረተ ምሥጠራ ይቀይሩ።\n !!ማስጠንቀቂያ!! ይሄ ሁሉንም ውሂብዎን ይደመስሳል።\n ይህ ባህሪ አልፋ ላይ ነው፣ እና በትክክል ላይሠራ ይችላል።\n ለመቀጠል «ይጥረጉ እና ይለውጡ...» የሚለውን ይጫኑ።"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ይጥረጉ እና ይለውጡ…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"የስዕል ቀለም ሁነታ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ይጠቀሙ"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ተሰናክሏል"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"ሞኖክሮማሲ"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"ዲውተራኖማሊ (ቀይ-አረንጓዴ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"ፕሮታኖማሊ (ቀይ-አረንጓዴ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ትራይታኖማሊ (ሰማያዊ-ቢጫ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"የቀለም ማስተካከያ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ይህ ባህሪ የሙከራ ነውና አፈጻጸም ላይ ተጽዕኖ ሊኖረው ይችላል።"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"በ<xliff:g id="TITLE">%1$s</xliff:g> ተሽሯል"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 866959f..654759f 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"تم حظرها"</item>
<item msgid="1805837518286731242">"يتم تجنب الاتصال الضعيف مؤقتًا"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"عدم التحقق مطلقًا"</item>
+ <item msgid="6042769699089883931">"التحقق من محتوى DRM فقط"</item>
+ <item msgid="9174900380056846820">"التحقق دومًا"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"عدم استخدام التحقق من HDCP مطلقًا"</item>
+ <item msgid="3878793616631049349">"استخدام التحقق من HDCP لمحتوى DRM فقط"</item>
+ <item msgid="45075631231212732">"استخدام التحقق من HDCP دومًا"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 كيلوبايت"</item>
+ <item msgid="505611754508988476">"256 كيلوبايت"</item>
+ <item msgid="6361286924268716397">"1 ميغابايت"</item>
+ <item msgid="6405203239560695266">"4 ميغابايت"</item>
+ <item msgid="3025431211013424097">"16 ميغابايت"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 كيلوبايت"</item>
+ <item msgid="3534782711045262344">"256 كيلوبايت"</item>
+ <item msgid="8085867209202153403">"1 ميغابايت"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 كيلوبايت لكل ذاكرة تخزين مؤقت للتسجيل"</item>
+ <item msgid="2822309747675758628">"256 كيلوبايت لكل ذاكرة تخزين مؤقت للتسجيل"</item>
+ <item msgid="6699306198357496731">"1 ميغابايت لكل ذاكرة تخزين مؤقت للتسجيل"</item>
+ <item msgid="5748528643937500349">"4 ميغابايت لكل ذاكرة تخزين مؤقت للتسجيل"</item>
+ <item msgid="1978629051085111592">"16 ميغابايت لكل ذاكرة تخزين مؤقت للتسجيل"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"إيقاف الرسوم المتحركة"</item>
+ <item msgid="6624864048416710414">"حجم الرسوم المتحركة 0.5x"</item>
+ <item msgid="2219332261255416635">"حجم الرسوم المتحركة 1x"</item>
+ <item msgid="3544428804137048509">"حجم الرسوم المتحركة 1.5x"</item>
+ <item msgid="3110710404225974514">"حجم الرسوم المتحركة 2x"</item>
+ <item msgid="4402738611528318731">"حجم الرسوم المتحركة 5x"</item>
+ <item msgid="6189539267968330656">"حجم الرسوم المتحركة 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"إيقاف الرسوم المتحركة"</item>
+ <item msgid="3375781541913316411">"حجم الرسوم المتحركة 5x."</item>
+ <item msgid="1991041427801869945">"حجم الرسوم المتحركة 1x"</item>
+ <item msgid="4012689927622382874">"حجم الرسوم المتحركة 1.5x"</item>
+ <item msgid="3289156759925947169">"حجم الرسوم المتحركة 2x"</item>
+ <item msgid="7705857441213621835">"حجم الرسوم المتحركة 5x"</item>
+ <item msgid="6660750935954853365">"حجم الرسوم المتحركة 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"إيقاف الرسوم المتحركة"</item>
+ <item msgid="1138649021950863198">"حجم الرسوم المتحركة .5x"</item>
+ <item msgid="4394388961370833040">"حجم الرسوم المتحركة 1x"</item>
+ <item msgid="8125427921655194973">"حجم الرسوم المتحركة 1.5x"</item>
+ <item msgid="3334024790739189573">"حجم الرسوم المتحركة 2x"</item>
+ <item msgid="3170120558236848008">"حجم الرسوم المتحركة 5x"</item>
+ <item msgid="1069584980746680398">"حجم الرسوم المتحركة 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"لا شيء"</item>
+ <item msgid="9033194758688161545">"480 بكسل"</item>
+ <item msgid="1025306206556583600">"480 بكسل (العرض آمن)"</item>
+ <item msgid="1853913333042744661">"720 بكسل"</item>
+ <item msgid="3414540279805870511">"720 بكسل (العرض آمن)"</item>
+ <item msgid="9039818062847141551">"1080 بكسل"</item>
+ <item msgid="4939496949750174834">"1080 بكسل (العرض آمن)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (العرض آمن)"</item>
+ <item msgid="3547211260846843098">"4K (تمت زيادة دقة العرض)"</item>
+ <item msgid="5411365648951414254">"4K (تمت زيادة الدقة، والعرض آمن)"</item>
+ <item msgid="1311305077526792901">"720 بكسل، 1080 بكسل (شاشة مزدوجة)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"لا شيء"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (رسومات)"</item>
+ <item msgid="1340692776955662664">"تكدس الاستدعاءات في دالة glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"إيقاف"</item>
+ <item msgid="675719912558941285">"رسم منطقة قصاصة غير مستطيلة بالأزرق"</item>
+ <item msgid="1064373276095698656">"إبراز أوامر رسم تم اختبارها بالأخضر"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"إيقاف"</item>
+ <item msgid="2751513398307949636">"على الشاشة كأشرطة"</item>
+ <item msgid="1851438178120770973">"باستخدام adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"إيقاف"</item>
+ <item msgid="7688197031296835369">"عرض مناطق تجاوز الحد"</item>
+ <item msgid="2290859360633824369">"عرض مناطق العرض المسرحي Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"الحد القياسي"</item>
+ <item msgid="4071574792028999443">"ليست هناك عمليات بالخلفية"</item>
+ <item msgid="4810006996171705398">"عملية واحدة بحد أقصى"</item>
+ <item msgid="8586370216857360863">"عمليتان بحد أقصى"</item>
+ <item msgid="836593137872605381">"3 عمليات بحد أقصى"</item>
+ <item msgid="7899496259191969307">"4 عمليات بحد أقصى"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"الشحن"</item>
+ <item msgid="5220695614993094977">"بروتوكول نقل الوسائط (MTP)"</item>
+ <item msgid="2086000968159047375">"بروتوكول نقل الصور (PTP)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB إيثرنت)"</item>
+ <item msgid="1718924214939774352">"مصدر الصوت"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 89c661c..7fcfba8 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"اختيار ملف شخصي"</string>
<string name="category_personal" msgid="1299663247844969448">"شخصي"</string>
<string name="category_work" msgid="8699184680584175622">"العمل"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"خيارات مطور البرامج"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"تمكين خيارات المطورين"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"تعيين خيارات تطوير التطبيق"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"لا تتوفر خيارات مطوّر البرامج لهذا المستخدم"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"لا تتوفر إعدادات VPN لهذا المستخدم"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"لا تتوفر إعدادات الربط لهذا المستخدم"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"إعدادات اسم نقطة الوصول ليست متوفرة لهذا المستخدم"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"تصحيح أخطاء USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"وضع تصحيح الأخطاء عند توصيل USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"إلغاء عمليات تفويض تصحيح أخطاء USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"اختصار تقرير الأخطاء"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"عرض زر في قائمة خيارات التشغيل لإعداد تقرير بالأخطاء"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"البقاء في الوضع النشط"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"تمكين سجل تطفل بواجهة وحدة تحكم المضيف عبر بلوتوث"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"التقاط حزم واجهة وحدة تحكم المضيف في ملف عبر بلوتوث"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"إلغاء قفل المصنّع الأصلي للجهاز"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"السماح بإلغاء قفل برنامج bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"هل تريد السماح بإلغاء قفل المصنّع الأصلي للجهاز؟"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"تحذير: لن تعمل ميزات الحماية على هذا الجهاز أثناء تشغيل هذا الإعداد."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"اختيار تطبيق الموقع الزائف"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"لم يتم تعيين تطبيق موقع زائف"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"تطبيق الموقع الزائف: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"الشبكات"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"شهادة عرض شاشة لاسلكي"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"تمكين تسجيل Wi‑Fi Verbose"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"تسليم Wi-Fi حاد إلى خلوي"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"السماح دائمًا بعمليات فحص Wi-Fi للتجوال"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"استخدام برنامج DHCP القديم"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"بيانات الجوّال نشطة دائمًا"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"السماح/عدم السماح بعمليات فحص Wi-Fi للتجوال بناءً على حجم حركة البيانات في الواجهة"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"أحجام ذاكرة التخزين المؤقت للتسجيل"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"حدد أحجامًا أكبر لكل ذاكرة تخزين مؤقت للتسجيل"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"حدد تهيئة USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"حدد تهيئة USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"السماح بمواقع وهمية"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"السماح بمواقع وهمية"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"تمكين فحص سمة العرض"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"يمكنك استخدام برنامج DHCP من Lollipop بدلاً من برنامج DHCP الجديد على Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"اجعل بيانات الجوّال نشطة دائمًا، حتى عندما يكون اتصال Wi‑Fi نشطًا (لتبديل الشبكة بسرعة)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"هل تريد السماح بتصحيح أخطاء USB؟"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"تم تصميم تصحيح أخطاء USB لأغراض التطوير فقط. يمكن استخدامه لنسخ البيانات بين الكمبيوتر والجهاز، وتثبيت التطبيقات على جهازك بدون تنبيه، وقراءة بيانات السجل."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"هل تريد إلغاء إمكانية الدخول إلى تصحيح أخطاء USB من جميع أجهزة الكمبيوتر التي تم التصريح لها سابقًا؟"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"هل تريد السماح لإعدادات التطوير؟"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"هذه الإعدادات مخصصة لاستخدام التطوير فقط. قد يتسبب هذا في حدوث أعطال أو خلل في أداء الجهاز والتطبيقات المثبتة عليه."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"التحقق من التطبيقات عبر USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"التحقق من التطبيقات المثبتة عبر ADB/ADT لكشف السلوك الضار"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"تطبيق طرفي محلي"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"تمكين تطبيق طرفي يوفر إمكانية الدخول إلى واجهة النظام المحلية"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"التحقق من HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"تعيين سلوك التحقق من HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"تصحيح الأخطاء"</string>
+ <string name="debug_app" msgid="8349591734751384446">"تحديد التطبيق لتصحيحه"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"لم يتم تعيين تطبيق لتصحيحه"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"تطبيق التصحيح: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"تحديد تطبيق"</string>
+ <string name="no_application" msgid="2813387563129153880">"لا شيء"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"انتظار برنامج التصحيح"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ينتظر التطبيق قيد التصحيح انضمام برنامج التصحيح قبل التنفيذ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"الإدخال"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"رسم"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"عرض تسارع الأجهزة"</string>
+ <string name="media_category" msgid="4388305075496848353">"الوسائط"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"المراقبة"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"تم تمكين الوضع المتشدد"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"وميض الشاشة عند إجراء التطبيقات عمليات طويلة في سلسلة المحادثات الرئيسية"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"موقع المؤشر"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"عرض تراكب الشاشة لبيانات اللمس الحالية"</string>
+ <string name="show_touches" msgid="1356420386500834339">"عرض مرات اللمس"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"عرض تعليقات مرئية لمرات اللمس"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"عرض تحديثات السطح"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"وميض أسطح النوافذ بالكامل عندما يتم تحديثها"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"إظهار تحديثات عرض GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"وميض العروض داخل النوافذ عندما يتم الرسم باستخدام وحدة معالجة الرسومات"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"عرض تحديثات طبقات الأجهزة"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"تشغيل وميض بالأخضر لطبقات الأجهزة عند تحديثها"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"تصحيح تجاوز حد وحدة معالجة الرسومات"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"تعطيل تراكبات الأجهزة"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"استخدام وحدة معالجة الرسومات دائمًا لتركيب الشاشة"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"محاكاة مسافة اللون"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"تمكين عمليات تتبع OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"تعطيل توجيه الصوت عبر USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"تعطيل التوجيه التلقائي إلى أجهزة الصوت الطرفية عبر USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"عرض حدود المخطط"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"عرض حدود وهوامش المقطع وما إلى ذلك."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"فرض اتجاه التنسيق ليكون من اليمين إلى اليسار"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"فرض اتجاه تنسيق الشاشة ليكون من اليمين إلى اليسار لجميع اللغات"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"عرض استخدام CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"عرض تراكب الشاشة لاستخدام CPU الحالي"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"فرض عرض رسومات GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"فرض استخدام وحدة معالجة الرسومات للرسم ثنائي الأبعاد"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"فرض 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"تمكين 4x MSAA في تطبيقات OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"تصحيح أخطاء عمليات القصاصات غير المستطيلة"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"رسم مخطط لعرض GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"حجم الرسوم المتحركة للنافذة"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"حجم الرسوم المتحركة للنقل"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"طول مدة الرسوم المتحركة"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"محاكاة الشاشات الثانوية"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"التطبيقات"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"عدم الاحتفاظ بالأنشطة"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"مسح كل نشاط فور مغادرة المستخدم له"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"حد العمليات بالخلفية"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"عرض جميع رسائل ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"عرض مربع الحوار \"التطبيق لا يستجيب\" مع تطبيقات الخلفية"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"فرض السماح للتطبيقات على الخارجي"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"تأهيل أي تطبيق بحيث تتم كتابته على سعة تخزين خارجية، بغض النظر عن قيم البيان"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"فرض إمكانية تغيير على الأنشطة"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"لتمكين تغيير حجم جميع الأنشطة لتناسب تعدد النوافذ، بغض النظر عن قيم البيان."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"كلمة مرور احتياطية للكمبيوتر"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"النسخ الاحتياطية الكاملة لسطح المكتب غير محمية في الوقت الحالي"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"المس لتغيير كلمة مرور النسخ الاحتياطية الكاملة لسطح المكتب أو إزالتها"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"تم تعيين كلمة مرور احتياطية جديدة"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"كلمة المرور الجديدة وتأكيدها لا يتطابقان"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"أخفق تعيين كلمة مرور احتياطية"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"نابض بالحياة (افتراضي)"</item>
+ <item msgid="8446070607501413455">"طبيعي"</item>
+ <item msgid="6553408765810699025">"قياسي"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ألوان محسَّنة"</item>
+ <item msgid="8280754435979370728">"الألوان الطبيعية تراها العين"</item>
+ <item msgid="5363960654009010371">"الألوان المحسَّنة للمحتوى الرقمي"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"التطبيقات غير النشطة"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"غير نشط. المس للتبديل."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"نشط. المس للتبديل."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"الخدمات قيد التشغيل"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"عرض الخدمات قيد التشغيل في الوقت الحالي والتحكم فيها"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"الوضع الليلي"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"معطَّل"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"التشغيل دائمًا"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"تلقائيًا"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"التحويل إلى تشفير ملفات"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"تحويل…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"تم استخدام تشفير ملفات من قبل"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"التحويل إلى تشفير على الملف"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"تحويل قسم البيانات إلى تشفير على الملف.\n !!تحذير!! سيؤدي هذا إلى محو جميع بياناتك.\n لا تزال هذه الميزة في مرحلة ألفا، وقد لا تعمل على نحو سليم.\n للمتابعة، اضغط على \"مسح وتحويل…\"."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"مسح وتحويل…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"نمط لون الصورة"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"استخدام sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"معطَّل"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"عمى ألوان كامل"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"شذوذ إبصار الأخضر والأحمر (الأحمر والأخضر)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"غطش الأحمر (الأحمر والأخضر)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"غمش الأزرق (الأزرق والأصفر)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"تصحيح الألوان"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"هذه الميزة تجريبية وقد تؤثر في الأداء."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"تم الاستبدال بـ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-az-rAZ/arrays.xml b/packages/SettingsLib/res/values-az-rAZ/arrays.xml
index 442d155..c58b1c6 100644
--- a/packages/SettingsLib/res/values-az-rAZ/arrays.xml
+++ b/packages/SettingsLib/res/values-az-rAZ/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloklanıb"</item>
<item msgid="1805837518286731242">"Zəif bağlantı müvəqqəti aradan qaldırılır"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Heç vaxt yoxlama"</item>
+ <item msgid="6042769699089883931">"Yalnız DRM kontent üçün yoxlayın"</item>
+ <item msgid="9174900380056846820">"Həmişə yoxlayın"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Heç vaxt HDCP yoxlama istifadə etməyin"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"hər jurnal buferinə 64K"</item>
+ <item msgid="2822309747675758628">"hər jurnal buferinə 256K"</item>
+ <item msgid="6699306198357496731">"hər jurnal buferinə 1M"</item>
+ <item msgid="5748528643937500349">"hər jurnal buferinə 4M"</item>
+ <item msgid="1978629051085111592">"hər jurnal buferinə 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasiya deaktiv"</item>
+ <item msgid="6624864048416710414">"Animasiya miqyası .5 x"</item>
+ <item msgid="2219332261255416635">"Animasiya miqyası 1x"</item>
+ <item msgid="3544428804137048509">"Animasiya miqyası 1.5x"</item>
+ <item msgid="3110710404225974514">"2x miqyaslı animasiya"</item>
+ <item msgid="4402738611528318731">"5x miqyaslı animasiya"</item>
+ <item msgid="6189539267968330656">"Animasiya miqyası 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasiya qapalıdır"</item>
+ <item msgid="3375781541913316411">"Animasiya miqyası .5 x"</item>
+ <item msgid="1991041427801869945">"Animasiya miqyası 1x"</item>
+ <item msgid="4012689927622382874">"Animasiya miqyası 1.5x"</item>
+ <item msgid="3289156759925947169">"2x miqyaslı animasiya"</item>
+ <item msgid="7705857441213621835">"5x miqyaslı animasiya"</item>
+ <item msgid="6660750935954853365">"Animasiya miqyası 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasiya qapalıdır"</item>
+ <item msgid="1138649021950863198">"Animasiya miqyası .5x"</item>
+ <item msgid="4394388961370833040">"Animasiya miqyası 1x"</item>
+ <item msgid="8125427921655194973">"Animasiya miqyası 1.5x"</item>
+ <item msgid="3334024790739189573">"2x miqyaslı animasiya"</item>
+ <item msgid="3170120558236848008">"Animasiya miqyası 1.5x"</item>
+ <item msgid="1069584980746680398">"10x miqyaslı animasiya"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Heç biri"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (güvənli)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (güvənli)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (güvənli)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (güvənli)"</item>
+ <item msgid="3547211260846843098">"4K (geniş miqyaslı)"</item>
+ <item msgid="5411365648951414254">"4K (geniş miqyaslı, güvənli)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ikili ekran)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Heç biri"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Qrafika)"</item>
+ <item msgid="1340692776955662664">"GlGetError üzərində zəng yğını"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Deaktiv"</item>
+ <item msgid="675719912558941285">"Qeyri-düzbucaqlı regionu mavi rəngdə çəkin"</item>
+ <item msgid="1064373276095698656">"Testdən keçmiş çəkmə əmrlərini yaşıl rəng ilə vurğulayın"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Deaktiv"</item>
+ <item msgid="2751513398307949636">"Ekranda panel şəklində"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Deaktiv"</item>
+ <item msgid="7688197031296835369">"Böyütmə sahələrini göstər"</item>
+ <item msgid="2290859360633824369">"Daltonizm üçün sahələri göstərin"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standart limit"</item>
+ <item msgid="4071574792028999443">"Fon proses yoxdur"</item>
+ <item msgid="4810006996171705398">"Ən çox 1 proses"</item>
+ <item msgid="8586370216857360863">"Ən çox 2 proses"</item>
+ <item msgid="836593137872605381">"Ən çox 3 proses"</item>
+ <item msgid="7899496259191969307">"Ən çox 4 proses"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Qidalanır"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protokolu)"</item>
+ <item msgid="2086000968159047375">"PTP (Şəkil Transfer Protokolu)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio Mənbə"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az-rAZ/strings.xml
index cb73beb..4c05b27 100644
--- a/packages/SettingsLib/res/values-az-rAZ/strings.xml
+++ b/packages/SettingsLib/res/values-az-rAZ/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profil Seçin"</string>
<string name="category_personal" msgid="1299663247844969448">"Şəxsi"</string>
<string name="category_work" msgid="8699184680584175622">"İş"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Tərtibatçı seçimləri"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Tərtibatçı seçənəklərini aktiv edin"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Tətbiq inkişafı seçimlərini təyin et"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Gəlişdirici seçimləri bu istifadəçi üçün əlçatımlı deyil"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN ayarları bu istifadəçi üçün əlçatmazdır"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Modem ayarları bu istifadəçi üçün əlçatmazdır"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Giriş Nöqtəsi Ad Ayarları bu istifadəçi üçün əlçatmazdır"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB debaq prosesi"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB qoşulu olan zaman debaq rejimi"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB debaq avtorizasiyasını ləğv edin"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Baq raportu qısa yolu"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Baq raportunu götürmək üçün qidalanma menyusunda düyməni göstərin"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Oyaq qal"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Enereji doldurularkən ekran heç vaxt yuxu rejimində olmur"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI izləmə jurnalını aktivləşdir"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Bütün bluetooth HCI paketlərini fayla atın"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilidinin açılması"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Əməliyyat sistemi yükləyicisinin kilidinin açılmasına icazə ver"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilidinin açılmasına icazə verilsin?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"XƏBƏRDARLIQ: Bu parametr yanılı olduqda cihazın qorunması xüsusiyyətləri işləməyəcək."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Saxta məkan tətbiqini seçin"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ayarlanmış saxta məkan tətbiqi yoxdur"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Saxta məkan tətbiqi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Şəbəkələşmə"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz displey sertifikatlaşması"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Çoxsözlü Girişə icazə verin"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aqressiv Wi‑Fi\'dan Şəbəkə ötürməsinə"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi axtarışlarına həmişə icazə verin"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Köhnə DHCP klient istifadə edin"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil data həmişə aktivdir"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Wi‑Fi Axtarışlarına data trafikinə əsasən İcazə verin/Qadağan edin"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger bufer ölçüləri"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Hər jurnal buferinı Logger ölçüsü seçin"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB Sazlaması seçin"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB Sazlaması seçin"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Sınaq yerləşmələrə icazə verin"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Sınaq yerləşmələrə icazə verin"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Atribut inspeksiyasına baxışa icazə verin"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Android DHCP klienti əvəzinə Lollipopdan DHCP klient istifadə edin."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hətta Wi‑Fi aktiv olanda da mobil datanı həmişə aktiv saxlayın (sürətli şəbəkək keçidi üçün)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB debaq funksiyasına icazə verilsin?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB sazlanması yalnız inkişaf məqsədlidir. Kompüteriniz və cihazınız arasında datanı kopyalamaq üçün ondan istifadə edin, bildiriş olmadan tətbiqləri cihazınıza quraşdırın və qeydiyyat datasını oxuyun."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Əvvəl icazə verdiyiniz kompüterlərdən USB debaq əməliyyatına giriş ləğv olunsun?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"İnkişaf ayarlarına icazə verilsin mi?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Bu parametrlər yalnız inkişafetdirici istifadə üçün nəzərdə tutulub. Onlar cihaz və tətbiqlərinizin sınması və ya pis işləməsinə səbəb ola bilər."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB üzərindən tətbiqləri yoxlayın"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT vasitəsi ilə quraşdırılmış tətbiqləri zərərli davranış üzrə yoxlayın."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Yerli terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Yerli örtük girişini təklif edən terminal tətbiqi aktiv edin"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP yoxlanılır"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP davranış yoxlamasını ayarlayın"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Sazlama"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Debaq tətbiqi seçin"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Debaq tətbiqi ayarlanmayıb"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Tətbiq debaq olunur: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Tətbiq seçin"</string>
+ <string name="no_application" msgid="2813387563129153880">"Heç nə"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Sazlamanı gözləyin"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Sazlanmış tətbiq icradan əvvəl qoşulmaq üçün sazlayıcı gözləyir"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Daxiletmə"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Təsvir"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Avadanlıq qaldırma renderi"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorinq"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Məhdud rejim aktivdir"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Əsas axında tətbiqlərin əlavə əməliyyatlar etməsi zamanı ekran işartısı olsun"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pointer yeri"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Cari əlaqə datasını göstərən ekran örtüyü"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Toxunmaları göstər"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Toxunmalar üçün vizual cavab rəylərini göstərin"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Səth güncəlləşməsini göstər"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Güncəlləmədən sonra bütün ekranda işartı olsun"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU görünüş güncəlləməsini göstər"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ilə tərtib edildikdə işıq pəncərələr daxilində görüntülənir"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Avadanlıq düzənlərinin güncəlləşməsini göstərin"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Onlar güncəllənəndən sonra avadanlıq qatlarında işartı olsun"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU böyütməsini sazlayın"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW overlay deaktiv edin"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Həmişə ekran kompozisiyası üçün GPU istifadə edin"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Rəng sahəsini simulyasiya edin"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL izlərini aktivləşdirin"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB audio marşrutu deaktiv edin"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB audio periferiyalara avtomatik marşrutu deaktiv edin"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Düzən həddini göstər"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Klip sərhədləri, boşluqları və s. göstər"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL düzən istiqamətinə məcbur edin"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Ekran düzən istiqamətini RTL üzərinə bütün yerli variantlar üçün məcbur edin"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU istifadəsini göstər"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Ekran örtüşməsi cari CPU istifadəsini göstərir"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU renderə məcbur edin"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d rəsm üçün GPU məcburi istifadə"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA məcbur edin"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 tətbiqlərində 4x MSAA aktiv et"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Qeyri-düzbucaqlı klip əməliyyatlarını debaq edin"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil GPU render"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Pəncərə animasiya miqyası"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Animasiya keçid miqyası"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator müddət şkalası"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"İkincili displeyi imitasiya edin"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Tətbiqlər"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Fəaliyyətləri saxlamayın"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"İstifadəçinin tərk etdiyi hər fəaliyyəti dərhal məhv et"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Fon prosesi limiti"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Bütün ANRları göstər"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Arxa tətbiqlər dialoquna cavab verməyən tətbiqi göstər"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Tətbiqlərə xaricdən məcburi icazə"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Seçilmiş hər hansı tətbiqi bəyannamə dəyərlərindən aslı olmayaraq xarici yaddaşa yazılabilən edir."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Ölçü dəyişdirmək üçün məcburi fəaliyyətlər"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Bəyannamə dəyərlərindən aslı olmayaraq bütün fəaliyyətləri çoxsaylı pəncərə üçün dəyişkən ölçülü edir."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Masaüstü rezerv parolu"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Masaüstü tam rezervlər hazırda qorunmayıblar."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Masaüstünün tam rezevr kopyalanması üçün parolu dəyişmək və ya silmək üçün toxunun"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Yeni rezerv parolu ayarlandı"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Yeni parol və parolun təkrarı uyğun gəlmir"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Yedəkləmə parolu xətası"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Canlı (defolt)"</item>
+ <item msgid="8446070607501413455">"Təbii"</item>
+ <item msgid="6553408765810699025">"Standart"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Artırılmış rənglər"</item>
+ <item msgid="8280754435979370728">"Gözlə göründüyü kimi təbii rənglər"</item>
+ <item msgid="5363960654009010371">"Rəqəmsal məzmun üçün optimallaşdırılan rənglər"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"İnaktiv tətbiqlər"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"İnaktiv. Keçid etmək üçün toxunun."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Keçid etmək üçün toxunun."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"İşləyən xidmətlər"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Hazırda prosesdə olan xidmətləri görüntüləyin və onlara nəzarət edin"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Gecə rejimi"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Qeyri-aktiv"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Həmişə aktiv"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Avtomatik"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Fayl şifrələnməsinə çevirin"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Çevirin..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Fayl artıq şifrələnib"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Fayl əsaslı şifrələnməyə çevrilir"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Data bölgüsünü fayl əsaslı şifrələməyə çevirin.\n !!Xəbərdarlıq!! Bu, bütün datanızı siləcək.\n Bu xüsusiyyət alfadır və düzgün işləməyə bilər.\n Davam etmək üçün \'Silin və çevirin...\' düyməsinə basın."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Silin və çevirin..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Şəkil rəng rejimi"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB istifadə edin"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Deaktiv"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Təkrənglik"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaliya (qırmızı-yaşıl)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaliya (qırmızı-yaşıl)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaliya (göy-sarı)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Rəng düzəlişi"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Bu funksiya eksperimentaldır və performansa təsir edə bilər."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> tərəfindən qəbul edilmir"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index a754787..277800d 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Блокирано"</item>
<item msgid="1805837518286731242">"Временно се избягва лоша връзка"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Никога да не се проверява"</item>
+ <item msgid="6042769699089883931">"Проверка само за DRM съдържание"</item>
+ <item msgid="9174900380056846820">"Винаги да се проверява"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Никога да не се използва проверка с HDCP"</item>
+ <item msgid="3878793616631049349">"Да се използва проверка с HDCP само за DRM съдържание"</item>
+ <item msgid="45075631231212732">"Винаги да се използва проверка с HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 КБ"</item>
+ <item msgid="505611754508988476">"256 КБ"</item>
+ <item msgid="6361286924268716397">"1 МБ"</item>
+ <item msgid="6405203239560695266">"4 МБ"</item>
+ <item msgid="3025431211013424097">"16 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 КБ"</item>
+ <item msgid="3534782711045262344">"256 КБ"</item>
+ <item msgid="8085867209202153403">"1 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Рег. буфер – 64 КБ"</item>
+ <item msgid="2822309747675758628">"Рег. буфер – 256 КБ"</item>
+ <item msgid="6699306198357496731">"Рег. буфер – 1 МБ"</item>
+ <item msgid="5748528643937500349">"Рег. буфер – 4 МБ"</item>
+ <item msgid="1978629051085111592">"Рег. буфер – 16 МБ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Анимацията е изключена"</item>
+ <item msgid="6624864048416710414">"Скала на анимацията .5x"</item>
+ <item msgid="2219332261255416635">"Скала на анимацията 1x"</item>
+ <item msgid="3544428804137048509">"Скала на анимацията 1.5x"</item>
+ <item msgid="3110710404225974514">"Скала на анимацията 2x"</item>
+ <item msgid="4402738611528318731">"Скала на анимацията 5x"</item>
+ <item msgid="6189539267968330656">"Скала на анимацията 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Анимацията е изключена"</item>
+ <item msgid="3375781541913316411">"Скала на анимацията .5x"</item>
+ <item msgid="1991041427801869945">"Скала на анимацията 1x"</item>
+ <item msgid="4012689927622382874">"Скала на анимацията 1.5x"</item>
+ <item msgid="3289156759925947169">"Скала на анимацията 2x"</item>
+ <item msgid="7705857441213621835">"Скала на анимацията 5x"</item>
+ <item msgid="6660750935954853365">"Скала на анимацията 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Анимацията е изключена"</item>
+ <item msgid="1138649021950863198">"Скала на анимацията .5x"</item>
+ <item msgid="4394388961370833040">"Скала на анимацията 1x"</item>
+ <item msgid="8125427921655194973">"Скала на анимацията 1.5x"</item>
+ <item msgid="3334024790739189573">"Скала на анимацията 2x"</item>
+ <item msgid="3170120558236848008">"Скала на анимацията 5x"</item>
+ <item msgid="1069584980746680398">"Скала на анимацията 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Няма"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (сигурно)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (сигурно)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (сигурно)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (сигурно)"</item>
+ <item msgid="3547211260846843098">"4K (с увеличен мащаб)"</item>
+ <item msgid="5411365648951414254">"4K (с увеличен мащаб, сигурно)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (двоен екран)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Без"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Графика)"</item>
+ <item msgid="1340692776955662664">"Извикване на стека при glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Изключено"</item>
+ <item msgid="675719912558941285">"Начертаване в синьо на неправоъгълна област"</item>
+ <item msgid="1064373276095698656">"Зелено за тествани команди за начертаване"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Изкл."</item>
+ <item msgid="2751513398307949636">"На екрана като чертички"</item>
+ <item msgid="1851438178120770973">"В adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Изключено"</item>
+ <item msgid="7688197031296835369">"Области за преизчертаване: Показв."</item>
+ <item msgid="2290859360633824369">"Показване на областите за деутеранопия"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандартно ограничение"</item>
+ <item msgid="4071574792028999443">"Няма процеси на заден план"</item>
+ <item msgid="4810006996171705398">"Най-много 1 процес"</item>
+ <item msgid="8586370216857360863">"Най-много 2 процеса"</item>
+ <item msgid="836593137872605381">"Най-много 3 процеса"</item>
+ <item msgid="7899496259191969307">"Най-много 4 процеса"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Зареждане"</item>
+ <item msgid="5220695614993094977">"MTP (протокол за пренос на мултимедия)"</item>
+ <item msgid="2086000968159047375">"PTP (протокол за пренос на картини)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet през USB)"</item>
+ <item msgid="1718924214939774352">"Аудиоизточник"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 5e9eacd..105e533 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Избиране на потр. профил"</string>
<string name="category_personal" msgid="1299663247844969448">"Лични"</string>
<string name="category_work" msgid="8699184680584175622">"Служебни"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Опции на програмиста"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Активиране на опциите за програмисти"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Задаване на опции за програмиране на приложения"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Опциите за програмисти не са налице за този потребител"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Настройките за виртуална частна мрежа (VPN) не са налице за този потребител"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Настройките за тетъринг не са налице за този потребител"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Настройките за име на точка за достъп не са налице за този потребител"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"През USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Режим за отстраняване на грешки, когато е свързано USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Отмяна на упълномощ. за отстр. на грешки през USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Пряк път за сигнал за програмна грешка"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"В менюто за захранване да се показва бутон за подаване на сигнал за програмна грешка"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Да остане активен"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранът никога няма да е в спящ режим при зареждане"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Активиране на рег. файл за анализ за Bluetooth с протокола HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Заснемане на всички пакети за Bluetooth с протокола HCI във файла"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Отключване от OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешаване на първонач. зареждащата прогр. да се откл."</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Да се разреши ли отключване от OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ПРЕДУПРЕЖДЕНИЕ: Функциите за защита на устройството няма да работят, докато следната настройка е включена."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Избиране на приложение за мнимо местоположение"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Няма зададено приложение за мнимо местоположение"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Приложение за мнимо местоположение: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Мрежи"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Безжичен дисплей"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"„Многословно“ регистр. на Wi‑Fi: Актив."</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi-Fi към моб. мрежи: Агресивно предав."</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Сканирането за роуминг на Wi-Fi да е разрешено винаги"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Наследена клиентска програма за DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Винаги активни клетъчни данни"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Разрешаване/забраняване на сканирането за роуминг на Wi-Fi въз основа на посочения в интерфейса обем на трафика на данни"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Размери на регистрац. буфери"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Размер на един рег. буфер: Избор"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Избиране на конфигурация за USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Избиране на конфигурация за USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Разрешаване на измислени местоположения"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Разрешаване на измислени местоположения"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Актив. на инспектирането на атрибутите за преглед"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Използване на клиентската програма за DHCP от Lollipop вместо новата програма на Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Мобилните данни са активни винаги – дори когато функцията за Wi‑Fi е включена (за бързо превключване между мрежите)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Разрешаване на отстраняването на грешки през USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Отстраняването на грешки през USB е предназначено само за програмни цели. Използвайте го за копиране на данни между компютъра и устройството си, за инсталиране на приложения на устройството си без известяване и за четене на регистрационни данни."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Да се отмени ли достъпът до отстраняването на грешки през USB от всички по-рано упълномощени от вас компютри?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Да се разрешат ли настройките за програмиране?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Тези настройки са предназначени само за програмиране. Те могат да доведат до прекъсване на работата или неправилно функциониране на устройството ви и приложенията в него."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Потвържд. на прил. през USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Проверка на инсталираните чрез ADB/ADT приложения за опасно поведение."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локален терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Актив. на прил. за терминал с достъп до локалния команден ред"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Проверка с HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Повед. за проверка с HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Отстраняване на грешки"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Избор на прил. за отстран. на грешки"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Няма зададено приложение за отстраняване на грешки"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Отстраняване на грешки в приложението: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Избиране на приложение"</string>
+ <string name="no_application" msgid="2813387563129153880">"Няма"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Изчакване на инструмента за отстраняване на грешки"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Прил. изчаква инстр. за отстраняване на грешки да се прикачи преди изпълнение"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Въвеждане"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Начертаване"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Хардуерно ускорено изобразяване"</string>
+ <string name="media_category" msgid="4388305075496848353">"Мултимедия"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Наблюдение"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Строг режим: Активиран"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Примигване на екрана при дълги операции в главната нишка"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Mестопол. на показалеца"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Насл. на екран показва текущи данни при докосване"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Показване на докосванията"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Показване на визуална обр. връзка за докосванията"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Актуал. на повърхн: Показв."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Примигв. на целите повърхности на прозорците при актуализирането им"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Показв. на актуал. на изгледа от GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Примигв. на изгледи в прозорците при начертаване с GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Актуал. на слоевете на хардуера"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Примигв. на слоевете на хардуера в зелено при актуал."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Отстран. на проблеми с преизчертаване от GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Хардуерни наслагв.: Деактив."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Винаги да се използва GPU за изграждане на екрана"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Цвет. простр.: Симулиране"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Трасирания на OpenGL: Акт."</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Маршрут. на аудио чрез USB: Деакт."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Авт. маршрут. за периферните у-ва за аудио чрез USB: Деакт."</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Граници на оформлението"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Показв. на границите на изрязване, полетата и др."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Принуд. оформл. отдясно наляво"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Принуд. оформл. на екрана отдясно наляво за вс. локали"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Употреба на процесора"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Наслагване на екрана показва употр. на процесора"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Принудително изобразяване"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Принуд. използв. на GPU за двуизмерно начертаване"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Задаване на 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Активиране на 4x MSAA в прилож. с OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Отстр. на грешки при неправоъг. изрязване"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Профилиране на GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Скала на аним.: Прозорец"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Скала на преходната анимация"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Скала за Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Симулиране на алтерн. дисплеи"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Приложения"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Без съхран. на дейностите"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Унищож. на всяка дейност при напускане от потребител"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Лимит за фонови процеси"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Всички нереагиращи прил."</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Диалог. прозорец „НП“ за приложения на заден план"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Външно хран.: Принуд. разрешаване на приложенията"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Позволява прилож. да се записват във външ. хранил. независимо от стойностите в манифеста"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Възможност за преоразмеряване на активностите"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Дава възможност за преоразмеряване на всички активности в режима за няколко прозореца независимо от стойностите в манифеста."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Наст. комп.: Парола"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Понастоящем пълните резервни копия за настолен компютър не са защитени"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Докоснете, за да промените или премахнете паролата за пълни резервни копия на настолния компютър"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Зададена е нова парола за резервно копие"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Новата парола и въведената за потвърждаване не съвпадат"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Задаването на парола за резервно копие не бе успешно"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Ярък (по подразбиране)"</item>
+ <item msgid="8446070607501413455">"Естествен"</item>
+ <item msgid="6553408765810699025">"Стандартен"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Подобрени цветове"</item>
+ <item msgid="8280754435979370728">"Естествени цветове, без подобрения"</item>
+ <item msgid="5363960654009010371">"Цветове, оптимизирани за дигитално съдържание"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивни приложения"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Неактивно. Докоснете за превключване."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Активно. Докоснете за превключване."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Изпълнявани услуги:"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Преглед и контрол върху изпълняващите се понастоящем услуги"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Нощен режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Деактивирано"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Винаги включено"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматично"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Преобразуване към шифроване на ниво файл"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Преобразуване…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Данните вече са шифровани на ниво файл"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Преобразуване към шифроване на ниво файл"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Делът с данни ще се преобразува към шифроване на ниво файл.\n Предупреждение: Всичките ви данни ще се изтрият!\n Тази функция е в алфа версия и може да не работи правилно.\n Натиснете „Изтриване и преобразуване…“, за да продължите."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Изтриване и преобразуване…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Цветови режим за снимките"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Използване на sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Деактивирано"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монохромазия"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Деутераномалия (червено – зелено)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалия (червено – зелено)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалия (синьо – жълто)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Корекция на цветове"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Тази функция е експериментална и може да се отрази на ефективността."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Заменено от „<xliff:g id="TITLE">%1$s</xliff:g>“"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-bn-rBD/arrays.xml b/packages/SettingsLib/res/values-bn-rBD/arrays.xml
index 367e268..7729a4d 100644
--- a/packages/SettingsLib/res/values-bn-rBD/arrays.xml
+++ b/packages/SettingsLib/res/values-bn-rBD/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"অবরুদ্ধ"</item>
<item msgid="1805837518286731242">"সাময়িকরূপে দুর্বল সংযোগ এড়ানো হচ্ছে"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"কখনই চেক করবেন না"</item>
+ <item msgid="6042769699089883931">"শুধুমাত্র DRM সামগ্রীর জন্য HDCP চেক করুন"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"৬৪০০০"</item>
+ <item msgid="505611754508988476">"২৫৬০০০"</item>
+ <item msgid="6361286924268716397">"১০০০০০০"</item>
+ <item msgid="6405203239560695266">"৪০০০০০০"</item>
+ <item msgid="3025431211013424097">"১৬০০০০০০"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"৬৪০০০"</item>
+ <item msgid="3534782711045262344">"২৫৬০০০"</item>
+ <item msgid="8085867209202153403">"১০০০০০০"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"লগ বাফার প্রতি 64K"</item>
+ <item msgid="2822309747675758628">"লগ বাফার প্রতি 256K"</item>
+ <item msgid="6699306198357496731">"লগ বাফার প্রতি 1M"</item>
+ <item msgid="5748528643937500349">"লগ বাফার প্রতি 4M"</item>
+ <item msgid="1978629051085111592">"লগ বাফার প্রতি 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"অ্যানিমেশন বন্ধ করুন"</item>
+ <item msgid="6624864048416710414">"অ্যানিমেশন স্কেল .৫x"</item>
+ <item msgid="2219332261255416635">"অ্যানিমেশন স্কেল ১x"</item>
+ <item msgid="3544428804137048509">"অ্যানিমেশন স্কেল ১.৫x"</item>
+ <item msgid="3110710404225974514">"অ্যানিমেশন স্কেল ২x"</item>
+ <item msgid="4402738611528318731">"অ্যানিমেশন স্কেল ৫x"</item>
+ <item msgid="6189539267968330656">"অ্যানিমেশন স্কেল ১০x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"অ্যানিমেশন বন্ধ করুন"</item>
+ <item msgid="3375781541913316411">"অ্যানিমেশন স্কেল .৫x"</item>
+ <item msgid="1991041427801869945">"অ্যানিমেশন স্কেল ১x"</item>
+ <item msgid="4012689927622382874">"অ্যানিমেশন স্কেল ১.৫x"</item>
+ <item msgid="3289156759925947169">"অ্যানিমেশন স্কেল ২x"</item>
+ <item msgid="7705857441213621835">"অ্যানিমেশন স্কেল ৫x"</item>
+ <item msgid="6660750935954853365">"অ্যানিমেশন স্কেল ১০x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"অ্যানিমেশন বন্ধ করুন"</item>
+ <item msgid="1138649021950863198">"অ্যানিমেশন স্কেল .৫x"</item>
+ <item msgid="4394388961370833040">"অ্যানিমেশন স্কেল ১x"</item>
+ <item msgid="8125427921655194973">"অ্যানিমেশন স্কেল ১.৫x"</item>
+ <item msgid="3334024790739189573">"অ্যানিমেশন স্কেল ২x"</item>
+ <item msgid="3170120558236848008">"অ্যানিমেশন স্কেল 5x"</item>
+ <item msgid="1069584980746680398">"অ্যানিমেশন স্কেল ১০x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"কোনো কিছুই নয়"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (নিরাপদ)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (নিরাপদ)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (নিরাপদ)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (নিরাপদ)"</item>
+ <item msgid="3547211260846843098">"4K (সম্পন্ন)"</item>
+ <item msgid="5411365648951414254">"4K (সম্পন্ন, নিরাপদ)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ডুয়েল স্ক্রীন)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"কোনো কিছুই নয়"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (গ্রাফিক্স)"</item>
+ <item msgid="1340692776955662664">"glGetError উপরে স্ট্যাক কল করুন"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"বন্ধ করুন"</item>
+ <item msgid="675719912558941285">"নীল বঙের অ-আয়তক্ষেত্রাকার ক্লিপ অঞ্চল অঙ্কন করুন"</item>
+ <item msgid="1064373276095698656">"সবুজ রঙে অঙ্কন করা পরীক্ষিত কমান্ডগুলি হাইলাইট করুন"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"বন্ধ করুন"</item>
+ <item msgid="2751513398307949636">"দন্ড হিসাবে স্ক্রীনে"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo এ"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"বন্ধ করুন"</item>
+ <item msgid="7688197031296835369">"অতিবর্ণনা এলাকা দেখান"</item>
+ <item msgid="2290859360633824369">"বর্ণান্ধতার জন্য এলাকা দেখান"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"মানক সীমা"</item>
+ <item msgid="4071574792028999443">"কোন ব্যাকগ্রাউন্ড প্রক্রিয়া নেই"</item>
+ <item msgid="4810006996171705398">"১টি প্রক্রিয়ার বেশি নয়"</item>
+ <item msgid="8586370216857360863">"২টি প্রক্রিয়ার বেশী নয়"</item>
+ <item msgid="836593137872605381">"৩টি প্রক্রিয়ার বেশি নয়"</item>
+ <item msgid="7899496259191969307">"৪টি প্রক্রিয়ার বেশি নয়"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"চার্জ হচ্ছে"</item>
+ <item msgid="5220695614993094977">"MTP (মিডিয়া ট্রান্সফার প্রোটোকল)"</item>
+ <item msgid="2086000968159047375">"PTP (পিকচার ট্রান্সফার প্রোটোকল)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ইথারনেট)"</item>
+ <item msgid="1718924214939774352">"অডিও উৎস"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn-rBD/strings.xml
index 786e7d6..5c83183 100644
--- a/packages/SettingsLib/res/values-bn-rBD/strings.xml
+++ b/packages/SettingsLib/res/values-bn-rBD/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"প্রোফাইল বেছে নিন"</string>
<string name="category_personal" msgid="1299663247844969448">"ব্যক্তিগত"</string>
<string name="category_work" msgid="8699184680584175622">"কর্মক্ষেত্র"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"বিকাশকারী বিকল্পগুলি"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"বিকাশকারী বিকল্পগুলি সক্ষম করুন"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"অ্যাপ্লিকেশান উন্নয়নের জন্য বিকল্পগুলি সেট করুন"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"এই ব্যবহারকারীর জন্য বিকাশকারী বিকল্পগুলি উপলব্ধ নয়"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"এই ব্যবহারকারীর জন্য VPN সেটিংস উপলব্ধ নয়"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"এই ব্যবহারকারীর জন্য টেদারিং সেটিংস উপলব্ধ নয়"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"এই ব্যবহারকারীর জন্য অ্যাক্সেস পয়েন্ট নাম সেটিংস উপলব্ধ নয়"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ডিবাগিং"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB সংযুক্ত থাকাকালীন ডিবাগ মোড"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ডিবাগিং অনুমতিগুলি প্রত্যাহার করুন"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ত্রুটি প্রতিবেদনের শর্টকাট"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"একটি ত্রুটি প্রতিবেদন গ্রহণের জন্য পাওয়ার মেনুতে একটি বোতাম দেখান"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"জাগিয়ে রাখুন"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"চার্জ হওয়ার স্ক্রীন কখনই নিদ্রা মোডে যাবে না"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI স্নুপ লগ সক্ষম করুন"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"একটি ফাইলে সব bluetooth HCI প্যাকেট ক্যাপচার করুন"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM আনলক করা হচ্ছে"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুট-লোডার আনলক করার অনুমতি দিন"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM আনলক করার অনুমতি দিতে চান?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"সতর্কতা: এই ডিভাইসে সেটিংটি চালু থাকা অবস্থায় ডিভাইস সুরক্ষা বৈশিষ্ট্যগুলি কাজ করবে না৷"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"অনুরূপ অবস্থান অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"কোনো অনুরূপ অবস্থান অ্যাপ্লিকেশান সেট করা নেই"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"অনুরূপ অবস্থান অ্যাপ্লিকেশান: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"নেটওয়ার্কিং"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ওয়্যারলেস ডিসপ্লে সার্টিফিকেশন"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ভারবোস লগিং সক্ষম করুন"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi থেকে সেলুলারে তৎপর পরিবর্তন"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"সর্বদা Wifi রোম স্ক্যানকে অনুমতি দিন"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"লেগাসি DHCP ক্লায়েন্ট ব্যবহার করুন"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"সেলুলার ডেটা সর্বদাই সক্রিয় থাকে"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ইন্টারফেসে উপস্থিত ডেটা ট্রাফিকের পরিমাণের উপরে ভিত্তি করে Wi‑Fi রোম স্ক্যানকে অনুমোদিত/অননুমোদিত করুন"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"লগার বাফারের আকারগুলি"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"লগ বাফার প্রতি অপেক্ষাকৃত বড় আকারগুলির নির্বাচন করুন"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB কনফিগারেশন নির্বাচন করুন"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB কনফিগারেশন নির্বাচন করুন"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"নকল অবস্থানের মঞ্জুরি দিন"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"মক অবস্থানগুলি মঞ্জুর করুন"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"অ্যাট্রিবিউট পরিদর্শন দেখা সক্ষম করুন"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"নতুন Android DHCP ক্লায়েন্টের পরিবর্তে Lollipop এর থেকে DHCP ক্লায়েন্ট ব্যবহার করুন৷"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi সক্রিয় থাকার সময়েও (দ্রুত নেটওয়ার্কে পাল্টানোর জন্য) সর্বদা মোবাইল ডেটা সক্রিয় রাখুন।"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ডিবাগিং মঞ্জুর করবেন?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ডিবাগিং কেবলমাত্র বিকাশ করার উদ্দেশ্যে। আপনার কম্পিউটার এবং আপনার ডিভাইসের মধ্যে ডেটা অনুলিপি করতে এটি ব্যবহার করুন, বিজ্ঞপ্তি ছাড়া আপনার ডিভাইসে অ্যাপ্লিকেশানগুলি ইনস্টল করুন এবং ডেটা লগ পড়ুন।"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"আপনি আগে যে সব কম্পিউটার USB ডিবাগিং এর অ্যাক্সেসের অনুমতি দিয়েছিলেন তা প্রত্যাহার করবেন?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"উন্নতি সেটিংসের অনুমতি দেবেন?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"এইসব সেটিংস কেবলমাত্র উন্নত করার উদ্দেশ্য। সেগুলি কারণে আপনার ডিভাইস ভেঙ্গে এবং অ্যাপ্লিকেশানগুলি ভালো ভাবে কাজ করা নাও কারতে পারে।"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB এর অ্যাপ্লিকেশানগুলি যাচাই করুন"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ক্ষতিকারক ক্রিয়াকলাপ করছে কিনা তার জন্য ADB/ADT মারফত ইনস্টল করা অ্যাপ্লিকেশানগুলি চেক করুন।"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"স্থানীয় টার্মিনাল"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"স্থানীয় শেল অ্যাক্সেসের প্রস্তাব করে এমন টার্মিনাল অ্যাপ্লিকেশন সক্ষম করুন"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP পরীক্ষণ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP চেক করার আচরণ সেট করুন"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ডিবাগিং"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ডিবাগ অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ডিবাগ অ্যাপ্লিকেশান সেট করা নেই"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ডিবাগিং অ্যাপ্লিকেশান: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"অ্যাপ্লিকেশান নির্বাচন করুন"</string>
+ <string name="no_application" msgid="2813387563129153880">"কিছুই না"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ডিবাগারের জন্য অপেক্ষা করুন"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"চালানোর আগে সংযুক্ত করতে জন্য ডিবাগ করা অ্যাপ্লিকেশনটি ডিবাগারের জন্য অপেক্ষা করছে"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ইনপুট"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"অঙ্কন"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"হার্ডওয়্যার দ্বারা চালিত রেন্ডারিং"</string>
+ <string name="media_category" msgid="4388305075496848353">"মিডিয়া"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"পর্যবেক্ষণে রাখা"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"কঠোর মোড সক্ষম"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"মুখ্য থ্রেডে অ্যাপ্লিকেশানগুলির দীর্ঘ কার্যকলাপের সময় স্ক্রীন ফ্ল্যাশ করে"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"পয়েন্টারের অবস্থান"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"স্ক্রীন ওভারলে বর্তমান স্পর্শ ডেটা দেখাচ্ছে"</string>
+ <string name="show_touches" msgid="1356420386500834339">"স্পর্শগুলি দেখান"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"স্পর্শগুলির জন্য ভিজ্যুয়াল প্রতিক্রিয়া দেখান"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"সারফেস আপডেটগুলি দেখান"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"সম্পূর্ণ উইন্ডোর সারফেস আপডেট হয়ে গেলে সেটিকে ফ্ল্যাশ করুন"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU দৃশ্য আপডেটগুলি প্রদর্শন করুন"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU এর সহ অঙ্কনের সময় উইন্ডোগুলির মধ্যেকার দৃশ্যগুলি ফ্ল্যাশ করুন।"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"হার্ডওয়্যার স্তর আপডেটগুলি প্রদর্শন করুন"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"যখন হার্ডওয়্যার স্তরগুলি আপডেট হয় তখন সেগুলিকে সবুজ রঙে ফ্ল্যাশ করুন"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"ডিবাগ GPU ওভারড্র"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW আচ্ছাদনগুলি অক্ষম করুন"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"সর্বদা স্ক্রীন কম্পোসিটিংয়ের জন্য GPU ব্যবহার করুন"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"রঙ স্থান নকল করুন"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ট্রেসগুলি সক্ষম করুন"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB অডিও রাউটিং অক্ষম করুন"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB অডিও যন্ত্রানুষঙ্গে স্বয়ংক্রিয় রাউটিং অক্ষম করুন"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"লেআউট সীমাগুলি দেখান"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ক্লিপ বাউন্ড, মার্জিন ইত্যাদি দেখান"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL লেআউট দিকনির্দেশ জোর দিন"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"সমস্ত স্থানের জন্য RTL এ স্ক্রীন লেআউট দিকনির্দেশে জোর দেয়"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU এর ব্যবহার দেখান"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"স্ক্রীন ওভারলে বর্তমান CPU ব্যবহার দেখাচ্ছে"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"জোর করে GPU রেন্ডারিং করুন"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2D অঙ্কনের জন্য GPU-এর ব্যবহারে জোর দিন"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA এ জোর দিন"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 অ্যাপ্লিকেশানগুলির মধ্যে 4x MSAA সক্রিয় করুন"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"অ-আয়তক্ষেত্রাকার ক্লিপ কার্যকলাপ ডিবাগ করুন"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"প্রোফাইল GPU রেন্ডারিং"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"উইন্ডো অ্যানিমেশন স্কেল"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ট্র্যানজিশন অ্যানিমেশন স্কেল"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"অ্যানিমেটর সময়কাল স্কেল"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"গৌণ প্রদর্শনগুলি নকল করুন"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"অ্যাপ্লিকেশানগুলি"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"কার্যকলাপ রাখবেন না"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ব্যবহারকারী এটি ছেড়ে যাওয়ার পরে যত তাড়াতাড়ি সম্ভব প্রতিটি কার্যকলাপ ধ্বংস করুন"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"পশ্চাদপট প্রক্রিয়ার সীমা"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"সব ANR দেখান"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"পশ্চাদপটের অ্যাপ্লিকেশানগুলির জন্য অ্যাপ্লিকেশান কোনো প্রতিক্রিয়া দিচ্ছে না এমন কথোপকথন দেখান"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"বহিরাগততে বলপূর্বক মঞ্জুরি"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ম্যানিফেস্ট মানগুলি নির্বিশেষে যেকোনো অ্যাপ্লিকেশানকে বাহ্যিক সঞ্চয়স্থানে লেখার উপযুক্ত বানায়"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"আকার পরিবর্তনযোগ্য করার জন্য ক্রিয়াকলাপগুলিকে জোর করুন"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"ম্যানিফেস্ট মানগুলির নির্বিশেষে মাল্টি-উইন্ডোর জন্য সমস্ত ক্রিয়াকলাপগুলিকে আকার পরিবর্তনযোগ্য করে তোলে৷"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ডেস্কটপ ব্যাকআপ পাসওয়ার্ড"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ডেস্কটপ পূর্ণ ব্যাকআপ বর্তমানে সুরক্ষিত নয়"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ডেস্কটপ পুরো ব্যাকআপের জন্য পাসওয়ার্ড পরিবর্তন বা মুছে ফেলার জন্য স্পর্শ করুন"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"নতুন ব্যাকআপ পাসওয়ার্ড সেট করুন"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"নতুন পাসওয়ার্ড এবং নিশ্চিতকরণ মিলছে না"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ব্যাকআপ পাসওয়ার্ড সেট করা ব্যর্থ"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"ভাইব্রেন্ট (ডিফল্ট)"</item>
+ <item msgid="8446070607501413455">"প্রাকৃতিক"</item>
+ <item msgid="6553408765810699025">"সাধারণ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"উন্নত রঙ"</item>
+ <item msgid="8280754435979370728">"স্বাভাবিক ভাবে আমরা চোখে যেমনটি দেখি সেইরূপ প্রাকৃতিক রঙ"</item>
+ <item msgid="5363960654009010371">"ডিজিট্যাল সামগ্রীর জন্য অপ্টিমাইজ করা রঙগুলি"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"নিষ্ক্রিয় অ্যাপ্লিকেশানগুলি"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"নিষ্ক্রিয় রয়েছে৷ টগল করতে স্পর্শ করুন৷"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"সক্রিয় রয়েছে৷ টগল করতে স্পর্শ করুন৷"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"এখন চলছে যে পরিষেবাগুলি"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"বর্তমান চলমান পরিষেবাগুলি দেখুন এবং নিয়ন্ত্রণ করুন"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"রাতের মোড"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"অক্ষম করা রয়েছে"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"সবসময় চালু"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"স্বয়ংক্রিয়"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ফাইল এনক্রিপশান রূপান্তর করুন"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"রূপান্তর করুন..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ফাইল ইতিমধ্যেই এনক্রিপ্ট করা রয়েছে"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ফাইল ভিত্তিক এনক্রিপশানে রূপান্তর করা হচ্ছে"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ডেটা পার্টিশানকে ফাইলভিত্তিক এনক্রিপশানে রূপান্তর করুন৷ \n !!সতর্কবাণী!! এটি আপনার সমস্ত ডেটা মুছে ফেলবে৷\n এই বৈশিষ্ট্যটি আলফা এবং সঠিকভাবে কাজ নাও করতে পারে৷\n চালিয়ে যেতে \'মুছুন ও রূপান্তর করুন...\' টিপুন৷"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"মুছুন ও রূপান্তর করুন..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ছবি রঙ মোড"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ব্যবহার করুন"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"অক্ষম হয়েছে"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"মোনোক্রোমেসি"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"দেউতেরানমালি (লাল-সবুজ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"প্রতানোমালি (লাল-সবুজ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ত্রিতানোমালি (নীল-হলুদ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"রঙ সংশোধন"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"এই বৈশিষ্ট্যটি পরীক্ষামূলক এবং এটি কার্য-সম্পাদনা প্রভাবিত করতে পারে।"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> এর দ্বারা ওভাররাইড করা হয়েছে"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index 1bcbe6e..ab80ccc 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloquejada"</item>
<item msgid="1805837518286731242">"S\'està evitant temporalment una connexió feble"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"No comprovis mai"</item>
+ <item msgid="6042769699089883931">"Comprova només el contingut DRM"</item>
+ <item msgid="9174900380056846820">"Comprova sempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"No utilitzis mai la comprovació HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64.000"</item>
+ <item msgid="3534782711045262344">"256.000"</item>
+ <item msgid="8085867209202153403">"1.000.000"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/memòria intermèdia reg."</item>
+ <item msgid="2822309747675758628">"256 K/memòria intermèdia reg."</item>
+ <item msgid="6699306198357496731">"1 M/memòria intermèdia reg."</item>
+ <item msgid="5748528643937500349">"4 M/memòria intermèdia reg."</item>
+ <item msgid="1978629051085111592">"16 M/memòria intermèdia reg."</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animació desactivada"</item>
+ <item msgid="6624864048416710414">"Escala d\'animació 0,5x"</item>
+ <item msgid="2219332261255416635">"Escala d\'animació 1x"</item>
+ <item msgid="3544428804137048509">"Escala d\'animació 1,5x"</item>
+ <item msgid="3110710404225974514">"Escala d\'animació 2x"</item>
+ <item msgid="4402738611528318731">"Escala d\'animació 5x"</item>
+ <item msgid="6189539267968330656">"Escala d\'animació 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animació desactivada"</item>
+ <item msgid="3375781541913316411">"Escala d\'animació 0,5x"</item>
+ <item msgid="1991041427801869945">"Escala d\'animació 1x"</item>
+ <item msgid="4012689927622382874">"Escala d\'animació 1,5x"</item>
+ <item msgid="3289156759925947169">"Escala d\'animació 2x"</item>
+ <item msgid="7705857441213621835">"Escala d\'animació 5x"</item>
+ <item msgid="6660750935954853365">"Escala d\'animació 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animació desactivada"</item>
+ <item msgid="1138649021950863198">"Escala d\'animació 0,5x"</item>
+ <item msgid="4394388961370833040">"Escala d\'animació 1x"</item>
+ <item msgid="8125427921655194973">"Escala d\'animació 1,5x"</item>
+ <item msgid="3334024790739189573">"Escala d\'animació 2x"</item>
+ <item msgid="3170120558236848008">"Escala d\'animació 5x"</item>
+ <item msgid="1069584980746680398">"Escala d\'animació 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Cap"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (segur)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (segur)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (segur)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (segur)"</item>
+ <item msgid="3547211260846843098">"4K (ampliat)"</item>
+ <item msgid="5411365648951414254">"4K (ampliat, segur)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (pantalla doble)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Cap"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gràfics)"</item>
+ <item msgid="1340692776955662664">"Pila de trucades a glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desactivat"</item>
+ <item msgid="675719912558941285">"Dibuixa àrea retall no rectangular en blau"</item>
+ <item msgid="1064373276095698656">"Ressalta ordres de dibuix provats en verd"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desactivat"</item>
+ <item msgid="2751513398307949636">"En pantalla en forma de barres"</item>
+ <item msgid="1851438178120770973">"A adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desactiva"</item>
+ <item msgid="7688197031296835369">"Mostra les àrees superposades"</item>
+ <item msgid="2290859360633824369">"Mostra les àrees amb deuteranomalia"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Límit estàndard"</item>
+ <item msgid="4071574792028999443">"Sense processos en segon pla"</item>
+ <item msgid="4810006996171705398">"Com a màxim 1 procés"</item>
+ <item msgid="8586370216857360863">"Com a màxim 2 processos"</item>
+ <item msgid="836593137872605381">"Com a màxim 3 processos"</item>
+ <item msgid="7899496259191969307">"Com a màxim 4 processos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"S\'està carregant"</item>
+ <item msgid="5220695614993094977">"MTP (protocol de transferència de fitxers multimèdia)"</item>
+ <item msgid="2086000968159047375">"PTP (protocol de transferència d\'imatges)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Font d\'àudio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 28f196f..71a331d2 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Triar un perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Feina"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opcions per a desenvolupadors"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activa les opcions per a desenvolupadors"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Defineix les opcions per al desenvolupament d\'aplicacions"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Les opcions per a desenvolupadors no estan disponibles per a aquest usuari."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"La configuració de la VPN no està disponible per a aquest usuari."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"La configuració d\'ancoratge no està disponible per a aquest usuari."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"La configuració del nom del punt d\'accés no està disponible per a aquest usuari."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuració USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Activa el mode de depuració quan el dispositiu estigui connectat per USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autoritzacions depuració USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Drecera per a informe d\'errors"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostra un botó al menú d\'engegada per crear un informe d\'errors"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre cerca HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Captura tots els paquets HCI de Bluetooth en un fitxer"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueig d\'OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permet desbloquejar el bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permetre el desbloqueig d\'OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVERTIMENT: les funcions de protecció del dispositiu no funcionaran mentre aquesta opció estigui activada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Selecciona aplicació per simular ubicació"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Cap aplicació per simular ubicació seleccionada"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicació per simular ubicació: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Xarxes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificació de pantalla sense fil"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Activa el registre Wi‑Fi detallat"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transf. total de Wi-Fi a mòbil"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permet sempre cerca de Wi-Fi en ininerància"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Utilitza el client DHCP heretat"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dades mòbils sempre actives"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permet/No permetis cerques de xarxes Wi-Fi en itinerància basades en la quantitat de dades presents a la interfície"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Mides memòria intermèdia Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Mida Logger per memòria intermèdia"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecciona configuració USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecciona configuració USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Ubicacions simulades"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permet les ubicacions simulades"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Inspecció d\'atributs de visualització"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utilitza el client DHCP de Lollipop en lloc del nou client DHCP d\'Android"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén les dades mòbils sempre actives, fins i tot quan la Wi‑Fi està activada (per canviar de xarxa ràpidament)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Voleu permetre la depuració USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"La depuració USB només està indicada per a activitats de desenvolupament. Fes-la servir intercanviar dades entre l\'ordinador i el dispositiu, per instal·lar aplicacions al dispositiu sense rebre notificacions i per llegir dades de registre."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vols revocar l\'accés a la depuració d\'USB dels ordinadors que has autoritzat anteriorment?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vols permetre la conf. de desenvolupament?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Aquesta configuració només està prevista per a usos de desenvolupament. Pot fer que el dispositiu i que les aplicacions s\'interrompin o tinguin un comportament inadequat."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica aplicacions per USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprova les aplicacions instal·lades mitjançant ADB/ADT per detectar possibles comportaments perillosos"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Activa l\'aplicació de terminal que ofereix accés al shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprovació HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Defineix comprovació HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuració"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Aplicació per depurar"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"No s\'ha definit cap aplicació per depurar"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplicació per depurar: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selecciona una aplicació"</string>
+ <string name="no_application" msgid="2813387563129153880">"Cap"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Espera el depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Abans d\'executar-se, l\'aplicació de depuració espera que es connecti el depurador"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Dibuix"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderització accelerada per maquinari"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimèdia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisió"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Mode estricte"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Centelleja si les aplicacions triguen molt al procés principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Ubicació del punter"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superposa les dades dels tocs a la pantalla"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostra els tocs"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostra la ubicació dels tocs a la pantalla"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Canvis de superfície"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Actualitza superfícies de finestres en actualitzar-se"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Actualitzacions GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Actualitza visualitzacions de finestres creades amb GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostra actualitzacions capes"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Il·lumina capes de maquinari en verd en actualitzar-se"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depura superposició de GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desactiva superposicions HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilitza sempre GPU per combinar pantalles"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simula l\'espai de color"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activa seguiment d\'OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactiva l\'encaminament d\'àudio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desactiva l\'encaminament automàtic als perifèrics d\'àudio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostra límits de disseny"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostra els límits de clips, els marges, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Força direcció dreta-esquerra"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Força direcció de pantalla dreta-esquerra en totes les llengües"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostra l\'ús de la CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Superposa l\'ús de la CPU a la pantalla"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Força acceleració GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Força l\'ús de GPU per a dibuixos en 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Força MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activa MSAA 4x en aplicacions d\'OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depura operacions de retall no rectangulars"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Perfil de renderització de GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala d\'animació finestra"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala d\'animació transició"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de durada d\'animació"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simula pantalles secundàries"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicacions"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Destrueix activitats"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destrueix activitats quan l\'usuari deixi d\'utilitzar-les"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Límita processos en segon pla"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Tots els errors sense resposta"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Informa que una aplicació en segon pla no respon"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Força permís d\'aplicacions a l\'emmagatzem. extern"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Permet que les aplicacions es puguin escriure en un dispositiu d’emmagatzematge extern, independentment dels valors definits"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Força l\'ajust de la mida de les activitats"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permet ajustar la mida de totes les activitats per al mode multifinestra, independentment dels valors definits."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Contrasenya per a còpies d\'ordinador"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les còpies de seguretat d\'ordinador completes no estan protegides"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toca per canviar o eliminar la contrasenya per a còpies de seguretat d\'ordinador completes"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"S\'ha definit una contrasenya de seguretat nova"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"La contrasenya nova i la confirmació no coincideixen"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Error en definir la contrasenya de seguretat"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (predeterminat)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Estàndard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Colors millorats"</item>
+ <item msgid="8280754435979370728">"Colors naturals tal com els veu l\'ull humà"</item>
+ <item msgid="5363960654009010371">"Colors optimitzats per al contingut digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicacions inactives"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactiva. Toca per activar-la."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Activa. Toca per desactivar-la."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Serveis en execució"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualitza i controla els serveis en execució"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Mode nocturn"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desactivat"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre activat"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automàtic"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converteix en l\'encriptació de fitxers"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converteix…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"El fitxer ja està encriptat"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"S\'està convertint en l\'encriptació basada en fitxers"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converteix la partició de dades en una encriptació basada en fitxers.\n Advertiment: s\'esborraran totes les teves dades.\n Aquesta funció és alfa i és possible que no funcioni correctament.\n Per continuar, prem Esborra i converteix…"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Esborra i converteix…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mode de color de la imatge"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utilitza sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desactivat"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (vermell-verd)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (vermell-verd)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (blau-groc)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correcció del color"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Aquesta funció és experimental i pot afectar el rendiment."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"S\'ha substituït per <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index d990f46..d46781a 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokováno"</item>
<item msgid="1805837518286731242">"Dočasné předcházení slabému připojení"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nikdy nekontrolovat"</item>
+ <item msgid="6042769699089883931">"Kontrolovat jen obsah DRM"</item>
+ <item msgid="9174900380056846820">"Vždy kontrolovat"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nikdy nepoužívat kontrolu HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB na vyrovnávací paměť protokolů"</item>
+ <item msgid="2822309747675758628">"256 kB na vyrovnávací paměť protokolů"</item>
+ <item msgid="6699306198357496731">"1 MB na vyrovnávací paměť protokolů"</item>
+ <item msgid="5748528643937500349">"4 MB na vyrovnávací paměť protokolů"</item>
+ <item msgid="1978629051085111592">"16 MB na vyrovnávací paměť protokolů"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animace je vypnuta"</item>
+ <item msgid="6624864048416710414">"Měřítko animace 0,5x"</item>
+ <item msgid="2219332261255416635">"Měřítko animace 1x"</item>
+ <item msgid="3544428804137048509">"Měřítko animace 1,5x"</item>
+ <item msgid="3110710404225974514">"Měřítko animace 2x"</item>
+ <item msgid="4402738611528318731">"Měřítko animace 5x"</item>
+ <item msgid="6189539267968330656">"Měřítko animace 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animace je vypnuta"</item>
+ <item msgid="3375781541913316411">"Měřítko animace 0,5x"</item>
+ <item msgid="1991041427801869945">"Měřítko animace 1x"</item>
+ <item msgid="4012689927622382874">"Měřítko animace 1,5x"</item>
+ <item msgid="3289156759925947169">"Měřítko animace 2x"</item>
+ <item msgid="7705857441213621835">"Měřítko animace 5x"</item>
+ <item msgid="6660750935954853365">"Měřítko animace 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animace je vypnuta"</item>
+ <item msgid="1138649021950863198">"Měřítko animace 0,5x"</item>
+ <item msgid="4394388961370833040">"Měřítko animace 1x"</item>
+ <item msgid="8125427921655194973">"Měřítko animace 1,5x"</item>
+ <item msgid="3334024790739189573">"Měřítko animace 2x"</item>
+ <item msgid="3170120558236848008">"Měřítko animace 5x"</item>
+ <item msgid="1069584980746680398">"Měřítko animace 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Žádný"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (zabezpečeno)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (zabezpečeno)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (zabezpečeno)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (zabezpečeno)"</item>
+ <item msgid="3547211260846843098">"4K (přepočteno)"</item>
+ <item msgid="5411365648951414254">"4K (přepočteno, zabezpečeno)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (duální obrazovka)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Žádné"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Zásobník volání funkce glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Vypnuto"</item>
+ <item msgid="675719912558941285">"Vykreslit neobdélníkový výstřižek modře"</item>
+ <item msgid="1064373276095698656">"Zvýraznit testované příkazy vykreslování zeleně"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Vypnuto"</item>
+ <item msgid="2751513398307949636">"Na obrazovce ve formě sloupců"</item>
+ <item msgid="1851438178120770973">"V nástroji adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Vypnuto"</item>
+ <item msgid="7688197031296835369">"Zobrazit překreslované oblasti"</item>
+ <item msgid="2290859360633824369">"Zobrazit oblasti pro deuteranomálii"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardní limit"</item>
+ <item msgid="4071574792028999443">"Procesy na pozadí deaktivovány"</item>
+ <item msgid="4810006996171705398">"Maximálně 1 proces"</item>
+ <item msgid="8586370216857360863">"Maximálně 2 procesy"</item>
+ <item msgid="836593137872605381">"Maximálně 3 procesy"</item>
+ <item msgid="7899496259191969307">"Maximálně 4 procesy"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Nabíjení"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Zdroj zvuku"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index c14278a..8ec5e25 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Vyberte profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Osobní"</string>
<string name="category_work" msgid="8699184680584175622">"Pracovní"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Pro vývojáře"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktivovat možnosti pro vývojáře"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Umožňuje nastavit možnosti pro vývoj aplikací"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Pro tohoto uživatele jsou možnosti vývojáře nedostupné."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Nastavení sítě VPN pro tohoto uživatele není dostupné."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Nastavení sdíleného připojení pro tohoto uživatele není dostupné."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Nastavení přístupového bodu pro tohoto uživatele není dostupné."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Ladění USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Povolit režim ladění s připojeným zařízením USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Zrušit autorizace k ladění USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Zástupce hlášení chyb"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Zobrazit v hlavní nabídce tlačítko k vygenerování chybového hlášení"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Nevypínat obrazovku"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka se při nabíjení nepřepne do režimu spánku"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povolit protokol Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Zachytit všechny pakety Bluetooth HCI do souboru"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Odemknutí OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povolit odemknutí zavaděče"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povolit odemknutí OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORNĚNÍ: Pokud bude toto nastavení zapnuto, nebudou v tomto zařízení fungovat funkce ochrany zařízení."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Vybrat aplikaci k simulování polohy"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikace k simulování polohy není nastavena"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikace k simulování polohy: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Sítě"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikace bezdrát. displeje"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné protokolování Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agres. předání z Wi-Fi na mobilní síť"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povolit Wi-Fi roaming"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Použít starý klient DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilní data jsou vždy aktivní"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Povolí nebo zakáže Wi-Fi roaming na základě množství datového provozu na rozhraní."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávací paměť protokol. nástroje"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Velikost vyrovnávací paměti protokol. nástroje"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Výběr konfigurace USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Výběr konfigurace USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Povolit simulované polohy"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Povolit simulované polohy"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Kontrola atributu zobrazení"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Namísto nového klientu DHCP Android použít klient DHCP z verze Lollipop."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobilní data budou vždy ponechána aktivní, i když bude aktivní Wi-Fi (za účelem rychlého přepínání sítí)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Povolit ladění USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ladění prostřednictvím rozhraní USB je určeno pouze pro účely vývoje. Použijte je ke kopírování dat mezi počítačem a zařízením, instalaci aplikací do zařízení bez upozornění a čtení dat protokolů."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Zrušit přístup k ladění USB ze všech počítačů, které jste v minulosti autorizovali?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Povolit nastavení pro vývojáře?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tato nastavení jsou určena pouze pro vývojáře. Mohou způsobit rozbití nebo nesprávné fungování zařízení a nainstalovaných aplikací."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Ověřit aplikace z USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolovat škodlivost aplikací nainstalovaných pomocí nástroje ADB/ADT"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Místní terminál"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktivovat terminálovou aplikaci pro místní přístup k prostředí shell"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Kontrola HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Nastavit chování kontroly HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Ladění"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Vybrat aplikaci pro ladění"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Není nastavena žádná aplikace pro ladění"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikace pro ladění: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Výběr aplikace"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nic"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Počkat na ladicí program"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikace čeká na připojení ladicího programu"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Vstup"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Vykreslování"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardwarově urychlené vykreslování"</string>
+ <string name="media_category" msgid="4388305075496848353">"Média"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Sledování"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Přísný režim aktivován"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Rozblikat obrazovku při dlouhých operacích hlavního vlákna"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Umístění ukazatele"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Zobrazit překryvnou vrstvu s aktuálními daty o dotycích"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Zobrazit dotyky"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Zobrazit vizuální zpětnou vazbu pro dotyky"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Zobrazit obnovení obsahu"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Rozblikat obsah okna při aktualizaci"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Zobrazit obnovení s GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Rozblikat zobrazení v oknech při vykreslování pomocí GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Zobrazit aktual. HW vrstev"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Rozblikat zeleně hardwarové vrstvy při aktualizaci"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ladit překreslování GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Zakázat hardwarové vrstvy"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Vždy použít GPU ke skládání obrazovky"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulovat barevný prostor"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Povolit trasování OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Směrování zvuku do USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Vypnout automatické směrování zvuku do zvukových periferií USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Zobrazit ohraničení"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Zobrazit u výstřižku ohraničení, okraje atd."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Vynutit rozvržení zprava doleva"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Vynutit ve všech jazycích rozvržení obrazovky zprava doleva"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Zobrazit využití CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Překryvná vrstva s aktuálním využitím procesoru"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Vykreslování pomocí GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Vynutit použití GPU pro 2D vykreslování"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Vynutit 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Povolit 4x MSAA v aplikacích OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Ladit operace s neobdélníkovými výstřižky"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil – vykreslování GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Měřítko animace okna"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Měřítko animace přeměny"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Měřítko délky animace"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulovat sekundární obrazovky"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikace"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Neukládat aktivity"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Rušit všechny činnosti, jakmile je uživatel zavře"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Omezení procesů na pozadí"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Zobrazit všechny ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Zobrazovat dialog „Aplikace neodpovídá“ pro aplikace na pozadí"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Vynutit povolení aplikací na externím úložišti"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Každou aplikaci bude možné zapsat do externího úložiště, bez ohledu na hodnoty manifestu"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Vynutit možnost změny velikosti aktivit"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Velikost všech aktivit bude možné změnit na několik oken (bez ohledu na hodnoty manifestu)."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Heslo pro zálohy v počítači"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Úplné zálohy v počítači nejsou v současné době chráněny"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Tuto možnost vyberte, chcete-li změnit nebo odebrat heslo pro úplné zálohy v počítači"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nové heslo pro zálohy je nastaveno"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nové heslo se neshoduje s potvrzením hesla."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nastavení hesla pro zálohy selhalo"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Jasné (výchozí)"</item>
+ <item msgid="8446070607501413455">"Přirozené"</item>
+ <item msgid="6553408765810699025">"Standardní"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Vylepšené barvy"</item>
+ <item msgid="8280754435979370728">"Přirozené barvy, jak je vidí oči"</item>
+ <item msgid="5363960654009010371">"Barvy optimalizované pro digitální obsah"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktivní aplikace"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Neaktivní. Přepnete klepnutím."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktivní. Přepnete klepnutím."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Spuštěné služby"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Umožňuje zobrazit a ovládat aktuálně spuštěné služby"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Noční režim"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Vypnuto"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Vždy zapnuto"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatický"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Převést na šifrování souborů"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Převést…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Obsah je již na úrovni souborů zašifrován"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Převod na šifrování založené na souborech"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Chystáte se převést datový oddíl na šifrování založené na souborech.\n!!Upozornění!! Všechna vaše data budou vymazána.\nTato funkce je ve verzi alfa a nemusí fungovat správně.\nChcete-li pokračovat, vyberte možnost Vymazat a převést…"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Vymazat a převést…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Režim barev obrázku"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Použije se barevný prostor sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Vypnuto"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromázie"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomálie (červená a zelená)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomálie (červená a zelená)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomálie (modrá a žlutá)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Korekce barev"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Funkce je experimentální a může mít vliv na výkon."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Přepsáno nastavením <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index a8c2a45..2935489 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokeret"</item>
<item msgid="1805837518286731242">"Undgår midlertidigt dårlig forbindelse"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Kontrollér aldrig"</item>
+ <item msgid="6042769699089883931">"Kontrollér kun for DRM-indhold"</item>
+ <item msgid="9174900380056846820">"Kontrollér altid"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Brug aldrig HDCP-kontrol"</item>
+ <item msgid="3878793616631049349">"Brug kun HDCP-kontrol ved DRM-indhold"</item>
+ <item msgid="45075631231212732">"Brug altid HDCP-kontrol"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB pr. logbuffer"</item>
+ <item msgid="2822309747675758628">"256 KB pr. logbuffer"</item>
+ <item msgid="6699306198357496731">"1 MB pr. logbuffer"</item>
+ <item msgid="5748528643937500349">"4 MB pr. logbuffer"</item>
+ <item msgid="1978629051085111592">"16 MB pr. logbuffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation fra"</item>
+ <item msgid="6624864048416710414">"Animationsskala 0,5x"</item>
+ <item msgid="2219332261255416635">"Animationsskala 1x"</item>
+ <item msgid="3544428804137048509">"Animationsskala 1,5x"</item>
+ <item msgid="3110710404225974514">"Animationsskala 2x"</item>
+ <item msgid="4402738611528318731">"Animationsskala 5x"</item>
+ <item msgid="6189539267968330656">"Animationsskala 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation fra"</item>
+ <item msgid="3375781541913316411">"Animationsskala 0,5x"</item>
+ <item msgid="1991041427801869945">"Animationsskala 1x"</item>
+ <item msgid="4012689927622382874">"Animationsskala 1,5x"</item>
+ <item msgid="3289156759925947169">"Animationsskala 2x"</item>
+ <item msgid="7705857441213621835">"Animationsskala 5x"</item>
+ <item msgid="6660750935954853365">"Animationsskala 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation fra"</item>
+ <item msgid="1138649021950863198">"Animationsskala 0,5x"</item>
+ <item msgid="4394388961370833040">"Animationsskala 1x"</item>
+ <item msgid="8125427921655194973">"Animationsskala 1,5x"</item>
+ <item msgid="3334024790739189573">"Animationsskala 2x"</item>
+ <item msgid="3170120558236848008">"Animationsskala 5x"</item>
+ <item msgid="1069584980746680398">"Animationsskala 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ingen"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (sikker)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (sikker)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (sikker)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (sikker)"</item>
+ <item msgid="3547211260846843098">"4K (opskaleret)"</item>
+ <item msgid="5411365648951414254">"4K (opskaleret, sikker)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dobbelt skærm)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ingen"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafik)"</item>
+ <item msgid="1340692776955662664">"Kaldestak på glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Fra"</item>
+ <item msgid="675719912558941285">"Tegn ikke-rektangulært klippeområde med blåt"</item>
+ <item msgid="1064373276095698656">"Fremhæv testede tegnekommandoer med grønt"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Fra"</item>
+ <item msgid="2751513398307949636">"På skærmen som søjler"</item>
+ <item msgid="1851438178120770973">"I adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Fra"</item>
+ <item msgid="7688197031296835369">"Vis områder med overlap"</item>
+ <item msgid="2290859360633824369">"Vis områder for deuteranomali"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardgrænse"</item>
+ <item msgid="4071574792028999443">"Ingen baggrundsprocesser"</item>
+ <item msgid="4810006996171705398">"Højst 1 proces"</item>
+ <item msgid="8586370216857360863">"Højst 2 processer"</item>
+ <item msgid="836593137872605381">"Højst 3 processer"</item>
+ <item msgid="7899496259191969307">"Højst 4 processer"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Oplader"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Lydkilde"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index ed7d0db..747bd14 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Vælg profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personlig"</string>
<string name="category_work" msgid="8699184680584175622">"Arbejde"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Indstillinger for udviklere"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktivér indstillinger for udviklere"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Konfigurer valgmuligheder for appudvikling"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Valgmuligheder for udviklere er ikke tilgængelige for denne bruger"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-indstillingerne er ikke tilgængelige for denne bruger"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Indstillingerne for netdeling er ikke tilgængelige for denne bruger"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Indstillingerne for Adgangspunkt (APN) er ikke tilgængelige for denne bruger"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-fejlretning"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Fejlretningstilstand, når USB er tilsluttet"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Tilbagekald tilladelser for USB-fejlfinding"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Genvej til fejlrapporting"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Vis en knap til oprettelse af fejlrapporter i menu for slukknap"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Undgå dvale"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skærmen går ikke i dvale under opladning"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivér Bluetooth HCI snoop log"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Gem alle Bluetooth HCI-pakker i en fil"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-oplåsning"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillad, at startindlæseren låses op"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillade OEM-oplåsning?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVARSEL! Funktioner, der beskytter enheden, fungerer ikke på denne enhed, når denne indstilling er aktiveret."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Vælg app til falsk placering"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Der er ikke angivet nogen app til falsk placering"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App til falsk placering: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Netværk"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificering af trådløs skærm"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivér detaljeret Wi-Fi-logføring"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Gennemtving skift fra Wi-Fi til mobildata"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillad altid scanning af Wi-Fi-roaming"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Brug ældre DHCP-klient"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata altid aktiveret"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Tillad/forbyd scanning i forbindelse med Wi-Fi-roaming afhængigt af mængden af datatrafik i grænsefladen"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Størrelser for Logger-buffer"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Vælg Logger-størrelser pr. logbuffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Vælg USB-konfiguration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Vælg USB-konfiguration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Imiterede placeringer"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Tillad imiterede placeringer"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Aktivér visning af attributinspektion"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Brug DHCP-klienten fra Lollipop i stedet for den nye DHCP-klient i Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hold altid mobildata aktiveret, selv når Wi-Fi er aktiveret (for at skifte hurtigt mellem netværk)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Vil du tillade USB-fejlretning?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-fejlretning er kun beregnet til udvikling og kan bruges til at kopiere data mellem din computer og enheden, installere apps på enheden uden meddelelser og læse logdata."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vil du ophæve adgangen til USB-fejlfinding for alle computere, du tidligere har godkendt?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vil du tillade udviklingsindstillinger?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Disse indstillinger er kun beregnet til brug i forbindelse med udvikling. De kan forårsage, at din enhed og dens applikationer går ned eller ikke fungerer korrekt."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Kontrollér apps via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrollér apps, der er installeret via ADB/ADT, for skadelig adfærd."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktivér terminalappen, der giver lokal shell-adgang"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-kontrol"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Angiv HDCP-kontroladfærd"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Fejlfinding"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Vælg app til fejlfinding"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Ingen applikation til fejlfinding er angivet"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Applikation til fejlfinding: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Vælg applikation"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ingen"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Vent på fejlfinder"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Fejlrettet app venter på tilknytning af fejlfinder før udførelse"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Tegning"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware-accelereret gengivelse"</string>
+ <string name="media_category" msgid="4388305075496848353">"Medie"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Overvågning"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Striks tilstand aktiveret"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Blink med skærmen, når apps foretager handlinger på hovedtråd"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Markørens placering"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Skærmoverlejringen viser de aktuelle berøringsdata"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Vis tryk"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Vis visuel feedback for tryk"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Vis overfladeopdateringer"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Fremhæv hele vinduesoverflader, når de opdateres"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Vis opdat. af GPU-eksp."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Fremhæv visninger i vinduer, når de tegnes med GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Se opdat. af hardwarelag"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardwarelag blinker grønt, når de opdateres"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ret GPU-overlapsfejl"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Deaktiver HW-overlejring"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Brug altid GPU til skærmsammensætning"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuler farverum"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Aktivér OpenGL-spor"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Slå USB-lydhåndtering fra"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Slå autom. lydhåndtering fra for USB-lydenheder"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Vis layoutgrænser"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Vis grænser for klip, margener osv."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Tving læsning mod venstre"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Tving til højre mod venstre-layout for alle sprog"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Vis CPU-forbrug"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Skærmoverlejring viser det aktuelle CPU-forbrug"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Tving gengivelse af GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Gennemtving brug af GPU til 2D-tegning"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Tving 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Aktivér 4x MSAA i apps med OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Fejlfind på ikke-rektangulære klippehandlinger"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU-profilgengivelse"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Animationsskala for vindue"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Overgangsanimationsskala"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatorvarighedsskala"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuler sekundære skærme"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Behold ikke aktiviteter"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Luk hver aktivitet, så snart brugeren forlader den"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Grænse for baggrundsprocesser"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Vis alle \"Appen svarer ikke\""</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Vis \"Appen svarer ikke\" for baggrundsapps"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Gennemtving tilladelse til eksternt lager"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Gør det muligt at overføre enhver app til et eksternt lager uafhængigt af manifestværdier"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Tving aktiviteter til at kunne tilpasses"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Sørger for, at alle aktiviteter kan tilpasses flere vinduer uafhængigt af manifestværdier."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Kode til lokal sikkerhedskopi"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Lokale fuldstændige sikkerhedskopieringer er i øjeblikket ikke beskyttet"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Tryk for at skifte eller fjerne adgangskoden til fuld lokal sikkerhedskopiering"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Ny adgangskode til sikkerhedskopi er angivet"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Ny adgangskode og bekræftelse matcher ikke"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Fejl ved angivelse af adgangskode til sikkerhedskopi"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Klare (standard)"</item>
+ <item msgid="8446070607501413455">"Naturlige"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Forbedrede farver"</item>
+ <item msgid="8280754435979370728">"Naturlige farver, som øjet opfatter dem"</item>
+ <item msgid="5363960654009010371">"Farver, der er optimeret til digitalt indhold"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktive apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktiv. Tryk for at skifte."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Tryk for at skifte."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Kørende tjenester"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Vis og kontrollér kørende tjenester"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nattilstand"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Deaktiveret"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Altid slået til"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatisk"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertér til filkryptering"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertér…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Allerede filkrypteret"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konverterer til filbaseret kryptering"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertér datapartitionen til filbaseret kryptering.\nAdvarsel! Alle dine data vil blive slettet.\n Dette er en alfafunktion, og den fungerer muligvis ikke korrekt.\n Tryk på \"Ryd og konvertér…\" for at fortsætte."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Ryd og konvertér…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Farvetilstand for billeder"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Brug sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Deaktiveret"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromasi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranopi (rød-grøn)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanopi (rød-grøn)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanopi (blå-gul)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Korriger farver"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Denne funktion er eksperimentel og kan påvirke ydeevnen."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Tilsidesat af <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index 6772c7d..d2a7f0d 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blockiert"</item>
<item msgid="1805837518286731242">"Schlechte Internetverbindung wird vorübergehend vermieden."</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nie prüfen"</item>
+ <item msgid="6042769699089883931">"Nur auf DRM-Inhalte prüfen"</item>
+ <item msgid="9174900380056846820">"Immer prüfen"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"HDCP-Prüfung nie verwenden"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64.000"</item>
+ <item msgid="505611754508988476">"256.000"</item>
+ <item msgid="6361286924268716397">"1 Mio."</item>
+ <item msgid="6405203239560695266">"4 Mio."</item>
+ <item msgid="3025431211013424097">"16 Mio."</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64.000"</item>
+ <item msgid="3534782711045262344">"256.000"</item>
+ <item msgid="8085867209202153403">"1 Mio."</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64.000 pro Puffer"</item>
+ <item msgid="2822309747675758628">"256.000 pro Puffer"</item>
+ <item msgid="6699306198357496731">"1 Mio. pro Puffer"</item>
+ <item msgid="5748528643937500349">"4 Mio. pro Puffer"</item>
+ <item msgid="1978629051085111592">"16 Mio. pro Puffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation aus"</item>
+ <item msgid="6624864048416710414">"Animationsmaßstab: 0,5x"</item>
+ <item msgid="2219332261255416635">"Animationsmaßstab: 1x"</item>
+ <item msgid="3544428804137048509">"Animationsmaßstab: 1,5x"</item>
+ <item msgid="3110710404225974514">"Animationsmaßstab: 2x"</item>
+ <item msgid="4402738611528318731">"Animationsmaßstab: 5x"</item>
+ <item msgid="6189539267968330656">"Animationsmaßstab: 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation aus"</item>
+ <item msgid="3375781541913316411">"Animationsmaßstab: 0,5x"</item>
+ <item msgid="1991041427801869945">"Animationsmaßstab: 1x"</item>
+ <item msgid="4012689927622382874">"Animationsmaßstab: 1,5x"</item>
+ <item msgid="3289156759925947169">"Animationsmaßstab: 2x"</item>
+ <item msgid="7705857441213621835">"Animationsmaßstab: 5x"</item>
+ <item msgid="6660750935954853365">"Animationsmaßstab: 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation aus"</item>
+ <item msgid="1138649021950863198">"Animationsmaßstab: 0,5x"</item>
+ <item msgid="4394388961370833040">"Animationsmaßstab: 1x"</item>
+ <item msgid="8125427921655194973">"Animationsmaßstab: 1,5x"</item>
+ <item msgid="3334024790739189573">"Animationsmaßstab: 2x"</item>
+ <item msgid="3170120558236848008">"Animationsmaßstab: 5x"</item>
+ <item msgid="1069584980746680398">"Animationsmaßstab: 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Keine"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (sicher)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (sicher)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (sicher)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (sicher)"</item>
+ <item msgid="3547211260846843098">"4K (hochskaliert)"</item>
+ <item msgid="5411365648951414254">"4K (hochskaliert, sicher)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (Dual-Screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Keine"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafik)"</item>
+ <item msgid="1340692776955662664">"Aufrufliste für glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Aus"</item>
+ <item msgid="675719912558941285">"Nicht rechteckigen Clipbereich blau zeichnen"</item>
+ <item msgid="1064373276095698656">"Getestete Zeichenbefehle grün hervorheben"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Aus"</item>
+ <item msgid="2751513398307949636">"Auf Bildschirm als Balken"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Aus"</item>
+ <item msgid="7688197031296835369">"Überschneidungsbereiche anzeigen"</item>
+ <item msgid="2290859360633824369">"Bereiche für Deuteranomalie anzeigen"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardlimit"</item>
+ <item msgid="4071574792028999443">"Keine Hintergrundprozesse"</item>
+ <item msgid="4810006996171705398">"Höchstens 1 Prozess"</item>
+ <item msgid="8586370216857360863">"Höchstens 2 Prozesse"</item>
+ <item msgid="836593137872605381">"Höchstens 3 Prozesse"</item>
+ <item msgid="7899496259191969307">"Höchstens 4 Prozesse"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Wird aufgeladen"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB-Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audioquelle"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 6f38bb3..9b60b20 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profil auswählen"</string>
<string name="category_personal" msgid="1299663247844969448">"Nutzer"</string>
<string name="category_work" msgid="8699184680584175622">"Geschäftlich"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Entwickleroptionen"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Entwickleroptionen aktivieren"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Optionen zur App-Entwicklung festlegen"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Entwickleroptionen sind für diesen Nutzer nicht verfügbar."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Die VPN-Einstellungen sind für diesen Nutzer nicht verfügbar."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Die Tethering-Einstellungen sind für diesen Nutzer nicht verfügbar."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Die Einstellungen für den Zugangspunkt sind für diesen Nutzer nicht verfügbar."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-Debugging"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Debugmodus bei Anschluss über USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB-Debugging-Autorisierungen aufheben"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Verknüpfung zu Fehlerbericht"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Schaltfläche zum Abrufen von Fehlerberichten im Menü \"Ein/Aus\" anzeigen"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Aktiv lassen"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Display wird beim Laden nie in den Ruhezustand versetzt"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI-Snoop-Protokoll aktivieren"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Alle Bluetooth HCI-Pakete in einer Datei erfassen"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-Entsperrung"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-Entsperrung zulassen"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-Entsperrung zulassen?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"Achtung: Die Geräteschutzfunktionen funktionieren auf diesem Gerät nicht, solange diese Einstellung aktiviert ist."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"App für simulierte Standorte auswählen"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Keine App für simulierte Standorte eingerichtet"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App für simulierte Standorte: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Netzwerke"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Kabellose Übertragung"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ausführliche WLAN-Protokolle aktivieren"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressives Handover von WLAN an Mobilfunk"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"WLAN-Roamingsuchen immer zulassen"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Alten DHCP-Client verwenden"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile Datennutzung immer aktiviert"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"WLAN-Roamingsuchen je nach Umfang des Datentraffics an der Schnittstelle zulassen bzw. nicht zulassen"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger-Puffergrößen"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Größe pro Protokollpuffer wählen"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB-Konfiguration auswählen"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB-Konfiguration auswählen"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Simulierte Standorte"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Simulierte Standorte zulassen"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Inspektion der Anzeigeattribute aktivieren"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"DHCP-Client von Lollipop statt des neuen Android-DHCP-Clients verwenden"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Die mobile Datennutzung bleibt auch dann aktiviert, wenn WLAN aktiviert ist. Dies dient einem schnelleren Wechsel zwischen Netzwerken."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB-Debugging zulassen?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-Debugging ist nur für Entwicklungszwecke vorgesehen. Damit können Sie Daten zwischen Ihrem Computer und Ihrem Gerät kopieren, Apps auf Ihrem Gerät ohne Benachrichtigung installieren und Protokolldaten lesen."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Zugriff auf USB-Debugging für alle zuvor autorisierten Computer aufheben?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Entwicklungseinstellungen zulassen?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Diese Einstellungen sind ausschließlich für Entwicklungszwecke geeignet. Sie können Ihr Gerät und die darauf installierten Apps beschädigen oder zu unerwünschtem Verhalten führen."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Apps über USB bestätigen"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Überprüft installierte Apps über ADB/ADT auf schädliches Verhalten"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokales Terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Terminal-App mit Zugriff auf lokale Shell aktivieren"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-Prüfung"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP-Prüfverhalten festlegen"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Debugging-App festlegen"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Keine Debugging-App festgelegt"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Debugging-App: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"App auswählen"</string>
+ <string name="no_application" msgid="2813387563129153880">"Keine"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Auf Debugger warten"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App wartet vor der Ausführung auf den Start des Debuggers"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Eingabe"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Zeichnung"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardwarebeschleunigtes Rendering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Medien"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Überwachung"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strikter Modus aktiviert"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Bei längeren Aktionen im Hauptthread Bildschirm kurz einblenden"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Zeigerposition"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Overlay mit aktuellen Daten zu Tippaktionen"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Berührungen anzeigen"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Visuelles Feedback für Berührungen anzeigen"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Oberflächenaktualisierungen"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash für gesamte Fensteroberfläche bei Aktualisierung"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Updates mit GPU-Ansicht"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash-Ansicht im Fenster, wenn mit GPU dargestellt"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hardwareebenen-Updates"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardwareebenen blinken beim Aktualisieren grün"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debugging – GPU-Überschneidung"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW-Overlays deaktivieren"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"GPU immer für Bildschirmaufbau verwenden"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Farbraum simulieren"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL-Traces aktivieren"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB-Audiorouting deaktivieren"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Autom. Routing an externe USB-Audiogeräte deaktivieren"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Layoutgrenzen einblenden"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Clip-Begrenzungen, Ränder usw. anzeigen"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL-Layout erzwingen"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"RTL-Bildschirmlayout für alle Sprachen erzwingen"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU-Auslastung anzeigen"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Bildschirm-Overlay mit aktueller CPU-Auslastung"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU-Rendering erzwingen"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Einsatz von GPU für 2D-Zeichnung erzwingen"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA erzwingen"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA in OpenGL ES 2.0-Apps aktivieren"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Nicht rechteckige Clip-Operationen debuggen"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU-Rendering für Profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Maßstab Fensteranimation"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Maßstab Übergangsanimation"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Maßstab für Animatorzeit"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Sekundäre Displays simulieren"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Aktionen nicht speichern"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Aktivität löschen, sobald der Nutzer diese beendet"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Hintergrundprozesslimit"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Alle ANRS anzeigen"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Dialogfeld \"App antwortet nicht\" für Hintergrund-Apps anzeigen"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Externe Speichernutzung von Apps erlauben"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Ermöglicht es jeder qualifizierten App, Daten auf externen Speicher zu schreiben, unabhängig von den Manifestwerten"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Anpassen der Größe von Aktivitäten erzwingen"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Ermöglicht es, die Größe aller Aktivitäten an den Mehrfenstermodus anzupassen, unabhängig von den Manifestwerten."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop-Sicherungspasswort"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Vollständige Desktop-Sicherungen sind momentan nicht passwortgeschützt."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Zum Ändern oder Entfernen des Passworts für vollständige Desktop-Sicherungen berühren"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Neues Sicherungspasswort festgelegt"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Das neue Passwort und die Bestätigung stimmen nicht überein."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Fehler beim Festlegen des Sicherungspassworts"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Brillant (Standardeinstellung)"</item>
+ <item msgid="8446070607501413455">"Natürlich"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Verstärkte Farben"</item>
+ <item msgid="8280754435979370728">"Natürliche Farben wie vom Auge wahrgenommen"</item>
+ <item msgid="5363960654009010371">"Für digitale Inhalte optimierte Farben"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktive Apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktiv. Berühren zum Aktivieren."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Berühren zum Deaktivieren."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktive Dienste"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Momentan ausgeführte Dienste anzeigen und steuern"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nachtmodus"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Deaktiviert"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Immer an"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatisch"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Zu Dateiverschlüsselung wechseln"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Wechseln…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Dateiverschlüsselung wird bereits verwendet."</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Zu Dateiverschlüsselung wechseln"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Wechseln Sie von Datenpartitions- zu dateibasierter Verschlüsselung.\n !!Achtung!! Dadurch werden alle Ihre Daten gelöscht.\n Es handelt sich um eine Alphaversion, die möglicherweise nicht korrekt funktioniert.\n Wählen Sie \"Wischen und wechseln…\" aus, um fortzufahren."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wischen und wechseln…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Farbmodus für Bilder"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB verwenden"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Deaktiviert"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Farbenblindheit"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalie (Rot-Grün-Sehschwäche)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (Rot-Grün-Sehschwäche)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (Blau-Gelb-Sehschwäche)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Farbkorrektur"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Hierbei handelt es sich um eine experimentelle Funktion. Dies kann sich auf die Leistung auswirken."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Außer Kraft gesetzt von \"<xliff:g id="TITLE">%1$s</xliff:g>\""</string>
</resources>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index f616547..2672eec 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Αποκλεισμένο"</item>
<item msgid="1805837518286731242">"Προσωρινή αποφυγή αδύναμης σύνδεσης"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Να μην γίνεται ποτέ έλεγχος"</item>
+ <item msgid="6042769699089883931">"Έλεγχος μόνο για περιεχόμενο DRM"</item>
+ <item msgid="9174900380056846820">"Να γίνεται πάντα έλεγχος"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Να μην χρησιμοποιείται ποτέ έλεγχος HDCP"</item>
+ <item msgid="3878793616631049349">"Χρήση ελέγχου HDCP μόνο για περιεχόμενο DRM"</item>
+ <item msgid="45075631231212732">"Να χρησιμοποιείται πάντα έλεγχος HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K ανά μεγ.πρ.μν.καταγρ."</item>
+ <item msgid="2822309747675758628">"256 K ανά μεγ.πρ.μν.καταγρ."</item>
+ <item msgid="6699306198357496731">"1 Μ ανά μεγ.πρ.μν.καταγρ."</item>
+ <item msgid="5748528643937500349">"4 M ανά μεγ.πρ.μν.καταγρ."</item>
+ <item msgid="1978629051085111592">"16 M ανά μεγ.πρ.μν.καταγρ."</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Κινούμ.εικόνες απενεργοποιημένες"</item>
+ <item msgid="6624864048416710414">"Κλίμ. κινούμ. εικ. 0,5x"</item>
+ <item msgid="2219332261255416635">"Κλίμ. κινούμ. εικ. 1x"</item>
+ <item msgid="3544428804137048509">"Κλίμ. κινούμ. εικ. 1,5x"</item>
+ <item msgid="3110710404225974514">"Κλίμ. κινούμ. εικ. 2x"</item>
+ <item msgid="4402738611528318731">"Κλίμ. κινούμ. εικ. 5x"</item>
+ <item msgid="6189539267968330656">"Κλίμ. κινούμ. εικ. 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Κινούμ.εικόνες απενεργοποιημένες"</item>
+ <item msgid="3375781541913316411">"Κλίμ. κινούμ. εικ. 0,5x"</item>
+ <item msgid="1991041427801869945">"Κλίμ. κινούμ. εικ. 1x"</item>
+ <item msgid="4012689927622382874">"Κλίμ. κινούμ. εικ. 1,5x"</item>
+ <item msgid="3289156759925947169">"Κλίμ. κινούμ. εικ. 2x"</item>
+ <item msgid="7705857441213621835">"Κλίμ. κινούμ. εικ. 5x"</item>
+ <item msgid="6660750935954853365">"Κλίμ. κινούμ. εικ. 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Κινούμ. εικόνες απενεργοποιημένες"</item>
+ <item msgid="1138649021950863198">"Κλίμακα κινούμενων εικόνων 0,5x"</item>
+ <item msgid="4394388961370833040">"Κλίμακα κινούμενων εικόνων 1x"</item>
+ <item msgid="8125427921655194973">"Κλίμακα κινούμενων εικόνων 1,5x"</item>
+ <item msgid="3334024790739189573">"Κλίμακα κινούμενων εικόνων 2x"</item>
+ <item msgid="3170120558236848008">"Κλίμακα κινούμενων εικόνων 5x"</item>
+ <item msgid="1069584980746680398">"Κλίμακα κινούμενων εικόνων 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Καμία"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ασφαλής)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ασφαλής)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ασφαλής)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ασφαλής)"</item>
+ <item msgid="3547211260846843098">"4K (αναβαθμισμένη)"</item>
+ <item msgid="5411365648951414254">"4K (αναβαθμισμένη, ασφαλής)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (διπλή οθόνη)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Τίποτα"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Γραφικά)"</item>
+ <item msgid="1340692776955662664">"Κλήση στοίβας σε glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Απενεργοποίηση"</item>
+ <item msgid="675719912558941285">"Σχεδίαση μη ορθογώνιας περιοχής με μπλε χρώμα"</item>
+ <item msgid="1064373276095698656">"Επισ/ση ελεγμένων εντολών με πράσ."</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Απενεργοποιημένο"</item>
+ <item msgid="2751513398307949636">"Στην οθόνη ως ράβδοι"</item>
+ <item msgid="1851438178120770973">"Σε adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Ανενεργές"</item>
+ <item msgid="7688197031296835369">"Εμφάνιση περιοχών υπέρβασης"</item>
+ <item msgid="2290859360633824369">"Εμφάνιση περιοχών για Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Τυπικό όριο"</item>
+ <item msgid="4071574792028999443">"Δεν υπάρχουν διεργασίες παρασκηνίου"</item>
+ <item msgid="4810006996171705398">"Το πολύ 1 διεργασία"</item>
+ <item msgid="8586370216857360863">"Το πολύ 2 διεργασίες"</item>
+ <item msgid="836593137872605381">"Το πολύ 3 διαδικασίες"</item>
+ <item msgid="7899496259191969307">"Το πολύ 4 διεργασίες"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Φόρτιση σε εξέλιξη"</item>
+ <item msgid="5220695614993094977">"MTP (Πρωτόκολλο μεταφοράς πολυμέσων)"</item>
+ <item msgid="2086000968159047375">"PTP (Πρωτόκολλο μεταφοράς εικόνων)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Πηγή ήχου"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 25ab5b8..008491f 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Επιλογή προφίλ"</string>
<string name="category_personal" msgid="1299663247844969448">"Προσωπικό"</string>
<string name="category_work" msgid="8699184680584175622">"Εργασία"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Επιλογές για προγραμματιστές"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Ενεργοποίηση επιλογών για προγραμματιστές"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Ορισμός επιλογών για ανάπτυξη εφαρμογής"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Οι επιλογές για προγραμματιστές δεν είναι διαθέσιμες για αυτόν το χρήστη"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Οι ρυθμίσεις VPN δεν είναι διαθέσιμες γι\' αυτόν το χρήστη"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Οι ρυθμίσεις σύνδεσης μέσω κινητής συσκευής δεν είναι διαθέσιμες γι\' αυτόν το χρήστη"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Οι ρυθμίσεις ονόματος σημείου πρόσβασης δεν είναι διαθέσιμες γι\' αυτόν το χρήστη"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Εντοπισμός σφαλμάτων USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Λειτουργία εντοπισμού σφαλμάτων όταν το USB είναι συνδεδεμένο"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Ανάκληση εξ/σεων εντ/σμού σφ/των USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Συντόμευση αναφοράς σφαλμάτων"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Εμφάνιση κουμπιού στο μενού ενεργοποίησης για τη λήψη αναφοράς σφαλμάτων"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Παραμονή σε λειτουργία"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Η οθόνη δεν θα μεταβαίνει ποτέ σε κατάσταση αδράνειας κατά τη φόρτιση"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ενερ/ση καταγρ. Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Καταγραφή όλων των πακέτων bluetooth HCI σε ένα αρχείο"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Ξεκλείδωμα OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Να επιτρέπεται το ξεκλείδωμα λειτουργίας εκκίνησης"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Να επιτρέπεται το ξεκλείδωμα OEM;"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Οι λειτουργίες προστασίας συσκευής δεν θα λειτουργούν σε αυτήν τη συσκευή, όταν είναι ενεργοποιημένη αυτή η ρύθμιση."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Επιλογή εφ/γής τεχνητής τοπ/σίας"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Δεν ορίστηκε εφαρμογή τεχνητής τοποθεσίας"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Εφαρμογή τεχνητής τοποθεσίας: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Δικτύωση"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Πιστοποίηση ασύρματης οθόνης"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ενεργοποίηση λεπτομερ. καταγραφής Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Επιθ.μεταβ. Wi-Fi σε δίκτυο κιν.τηλ."</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Να επιτρέπεται πάντα η σάρωση Wi-Fi κατά την περιαγωγή"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Χρήση εφαρμογής-πελάτη DHCP παλαιού τύπου"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Να επιτρέπεται/να μην επιτρέπεται η σάρωση Wi-Fi κατά την περιαγωγή, βάσει της ποσότητας επισκεψιμότητας δεδομένων στη διεπαφή"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Μέγεθος προσωρινής μνήμης για τη λειτουργία καταγραφής"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Μέγεθος αρχείων κατ/φής ανά προ/νή μνήμη αρχείου κατ/φής"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Επιλογή διαμόρφωσης USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Επιλογή διαμόρφωσης USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Να επιτρέπονται ψευδείς τοποθεσίες"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Να επιτρέπονται ψευδείς τοποθεσίες"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Ενεργοποίηση του ελέγχου χαρακτηριστικών προβολής"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Χρήση εφαρμογής-πελάτη DHCP παλαιού τύπου από το Lollipop αντί για τη νέα εφαρμογή-πελάτη DHCP Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Τα δεδομένα κινητής τηλεφωνίας να διατηρούνται πάντα ενεργά, ακόμα και όταν είναι ενεργό το Wi-Fi (για γρήγορη εναλλαγή δικτύου)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Να επιτρέπεται ο εντοπισμός σφαλμάτων USB;"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ο εντοπισμός σφαλμάτων USB προορίζεται μόνο για σκοπούς προγραμματισμού. Χρησιμοποιήστε τον για αντιγραφή δεδομένων μεταξύ του υπολογιστή και της συσκευής σας, για την εγκατάσταση εφαρμογών στη συσκευή σας χωρίς προειδοποίηση και για την ανάγνωση δεδομένων καταγραφής."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Ανάκληση πρόσβασης στον εντοπισμό σφαλμάτων USB από όλους τους υπολογιστές για τους οποίους είχατε εξουσιοδότηση στο παρελθόν;"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Να επιτρέπεται η χρήση των ρυθμίσεων ανάπτυξης;"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Αυτές οι ρυθμίσεις προορίζονται για χρήση κατά την ανάπτυξη. Μπορούν να προκαλέσουν προβλήματα στη λειτουργία της συσκευής και των εφαρμογών σας."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Επαλήθευση εφαρμογών μέσω USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Έλεγχος εφαρμογών που έχουν εγκατασταθεί μέσω ADB/ADT για επιβλαβή συμπεριφορά."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Τοπική τερματική εφαρμογή"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Ενεργοπ.τερμ.εφαρμογής που προσφέρει πρόσβαση στο τοπικό κέλυφος"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Έλεγχος HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Ρύθμιση συμπεριφοράς ελέγχου HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Εντοπισμός σφαλμάτων"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Επιλέξτε εφαρμογή εντοπισμού σφαλμάτων"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Δεν έχει οριστεί εφαρμογή εντοπισμού σφαλμάτων"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Εφαρμογή εντοπισμού σφαλμάτων: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Επιλέξτε εφαρμογή"</string>
+ <string name="no_application" msgid="2813387563129153880">"Καμία"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Περιμένετε το εργαλείο εντοπισμού σφαλμάτων"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Αναμονή εφαρμογής για να συνδεθεί ο εντοπισμός σφαλμάτων"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Εισαγωγή"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Σχέδιο"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Απόδοση με επιτάχυνση από υλικό εξοπλισμό"</string>
+ <string name="media_category" msgid="4388305075496848353">"Μέσα"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Παρακολούθηση"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Ενεργ. αυστηρής λειτουργ."</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Αναβ. οθόνη σε εκτέλεση μεγάλων λειτ.σε κύριο νήμα"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Θέση δείκτη"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Επικάλ.οθόνης για προβολή τρεχόντων δεδ/νων αφής"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Εμφάνιση αγγιγμάτων"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Εμφάνιση οπτικών σχολίων για αγγίγματα"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Εμφάνιση ενημερώσεων επιφάνειας"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Προβολή Flash ολόκλ. των επιφ παραθ. όταν ενημερ."</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Εμφάνιση των ενημερώσεων προβολής GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Προβολές Flash εντός παραθύρων όταν γίνεται σχεδιασμός με το GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Εμφ. ενημ. επιπ. υλικού"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Επισήμ. επιπέδων υλικού με πράσινο κατά την ενημ."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Κατάρ.σφαλμ.υπέρβ.GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Απενεργ. επικαλύψεων HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Να γίνεται πάντα χρήση του GPU για σύνθεση οθόνης"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Προσομοίωση χρωματικού χώρου"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ενεργοποίηση ιχνών OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Απεν. δρομολ. ήχου USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Απενερ.αυτόμ. δρομολ. σε περιφερειακά ήχου USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Εμφάνιση ορίων διάταξης"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Εμφάνιση ορίων κλιπ, περιθωρίων, κλπ."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Επιβολή κατ. διάταξης RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Επιβολή διάταξης οθόν. RTL για όλες τις τοπ. ρυθμ."</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Προβολή χρήσης CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Επικάλυψη οθόνης για προβολή τρέχουσας χρήσης CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Αναγκαστική απόδοση GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Αναγκαστική χρήση του GPU για σχέδιο 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Αναγκαστικά 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Ενεργοποίηση 4x MSAA σε εφαρμογές OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Εντοπισμός σφαλμάτων σε λειτουργίες μη ορθογώνιας περιοχής"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Απόδοση GPU προφίλ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Κλίμακα κίνησης παραθύρου"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Κλίμακα κίνησης μετάβασης"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Κλίμ. διάρ. Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Προσομ. δευτερ. προβολών"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Εφαρμογές"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Μη διατήρ. δραστηριοτήτων"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Διαγραφή κάθε δραστηριότητας μετά τον τερματισμό"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Όριο διεργασ. παρασκηνίου"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Εμφάνιση όλων των ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Εμφ.του παραθ. \"Η εφαρμ.δεν αποκρ.\" για εφ.παρασκ."</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Να επιτρέπονται υποχρεωτικά εφαρμογές σε εξωτ.συσ."</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Κάνει κάθε εφαρμογή κατάλληλη για εγγραφή σε εξωτερικό χώρο αποθήκευσης, ανεξάρτητα από τις τιμές του μανιφέστου"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Αναγκαστική δυνατότητα αλλαγής μεγέθους δραστηριοτήτων"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Να έχουν όλες οι δραστηριότητες δυνατότητα αλλαγής μεγέθους για την προβολή πολλαπλών παραθύρων, ανεξάρτητα από τις τιμές του μανιφέστου."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Εφ/κός κωδικός desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Τα πλήρη αντίγραφα ασφαλείας επιφάνειας εργασίας δεν προστατεύονται αυτήν τη στιγμή"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Αγγίξτε για αλλαγή ή κατάργηση του κωδικού πρόσβασης για τα πλήρη αντίγραφα ασφαλείας επιφάνειας εργασίας"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Ορίστηκε νέος εφεδρικός κωδικός πρόσβασης"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Ο νέος κωδικός πρόσβασης και η επιβεβαίωση δεν ταιριάζουν"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Αποτυχία κατά τον ορισμό εφεδρικού κωδικού πρόσβασης"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Ζωντανό (προεπιλογή)"</item>
+ <item msgid="8446070607501413455">"Φυσικό"</item>
+ <item msgid="6553408765810699025">"Τυπικό"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Βελτιωμένα χρώματα"</item>
+ <item msgid="8280754435979370728">"Φυσικά χρώματα όπως είναι ορατά στο μάτι"</item>
+ <item msgid="5363960654009010371">"Βελτιστοποιημένα χρώματα για ψηφιακό περιεχόμενο"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Ανενεργές εφαρμογές"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Ανενεργή. Αγγίξτε για εναλλαγή."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Ενεργή. Αγγίξτε για εναλλαγή."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Υπηρεσίες που εκτελούνται"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Προβολή και έλεγχος των εφαρμογών που εκτελούνται αυτή τη στιγμή"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Λειτουργία νύχτας"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Ανενεργό"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Πάντα ενεργό"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Αυτόματο"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Μετατροπή σε κρυπτογράφηση αρχείου"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Μετατροπή…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Με κρυπτογράφηση αρχείου"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Μετατροπή σε κρυπτογράφηση βάσει αρχείου…"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Μετατροπή τμήματος δεδομένων σε κρυπτογράφηση βάσει αρχείου.\n !!Προσοχή!! Με αυτήν την ενέργεια, θα διαγραφούν όλα τα δεδομένα σας.\n Αυτή η λειτουργία βρίσκεται σε δοκιμαστικό στάδιο alpha και ενδέχεται να μην λειτουργεί σωστά.\n Πατήστε \"Εκκαθάριση και μετατροπή…\" για να συνεχίσετε."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Εκκαθάριση και μετατροπή…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Λειτουργία χρώματος εικόνας"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Χρήση sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Απενεργοποιημένο"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Πρωτανοπία"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Δευτερανοπία (κόκκινο-πράσινο)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Πρωτανοπία (κόκκινο-πράσινο)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Τριτανοπία (μπλε-κίτρινο)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Διόρθωση χρωμάτων"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Αυτή η λειτουργία είναι πειραματική και ενδεχομένως να επηρεάσει τις επιδόσεις."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Αντικαταστάθηκε από <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index 8fa3918..21340d8 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blocked"</item>
<item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Never check"</item>
+ <item msgid="6042769699089883931">"Check for DRM content only"</item>
+ <item msgid="9174900380056846820">"Always check"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Never use HDCP checking"</item>
+ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
+ <item msgid="45075631231212732">"Always use HDCP checking"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K per log buffer"</item>
+ <item msgid="2822309747675758628">"256 K per log buffer"</item>
+ <item msgid="6699306198357496731">"1 M per log buffer"</item>
+ <item msgid="5748528643937500349">"4 M per log buffer"</item>
+ <item msgid="1978629051085111592">"16 M per log buffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation off"</item>
+ <item msgid="6624864048416710414">"Animation scale .5x"</item>
+ <item msgid="2219332261255416635">"Animation scale 1x"</item>
+ <item msgid="3544428804137048509">"Animation scale 1.5x"</item>
+ <item msgid="3110710404225974514">"Animation scale 2x"</item>
+ <item msgid="4402738611528318731">"Animation scale 5x"</item>
+ <item msgid="6189539267968330656">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation off"</item>
+ <item msgid="3375781541913316411">"Animation scale .5x"</item>
+ <item msgid="1991041427801869945">"Animation scale 1x"</item>
+ <item msgid="4012689927622382874">"Animation scale 1.5x"</item>
+ <item msgid="3289156759925947169">"Animation scale 2x"</item>
+ <item msgid="7705857441213621835">"Animation scale 5x"</item>
+ <item msgid="6660750935954853365">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation off"</item>
+ <item msgid="1138649021950863198">"Animation scale .5x"</item>
+ <item msgid="4394388961370833040">"Animation scale 1x"</item>
+ <item msgid="8125427921655194973">"Animation scale 1.5x"</item>
+ <item msgid="3334024790739189573">"Animation scale 2x"</item>
+ <item msgid="3170120558236848008">"Animation scale 5x"</item>
+ <item msgid="1069584980746680398">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"None"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480p (secure)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (secure)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (secure)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (secure)"</item>
+ <item msgid="3547211260846843098">"4K (upscaled)"</item>
+ <item msgid="5411365648951414254">"4K (upscaled, secure)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"None"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+ <item msgid="1340692776955662664">"Call stack on glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Off"</item>
+ <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item>
+ <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Off"</item>
+ <item msgid="2751513398307949636">"On screen as bars"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Off"</item>
+ <item msgid="7688197031296835369">"Show overdraw areas"</item>
+ <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standard limit"</item>
+ <item msgid="4071574792028999443">"No background processes"</item>
+ <item msgid="4810006996171705398">"At most, 1 process"</item>
+ <item msgid="8586370216857360863">"At most, 2 processes"</item>
+ <item msgid="836593137872605381">"At most, 3 processes"</item>
+ <item msgid="7899496259191969307">"At most, 4 processes"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Charging"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio Source"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 0e7ebd8..dabc72ef 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Choose Profile"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Work"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorisations"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capture all Bluetooth HCI packets in a file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressive Wi‑Fi to Mobile handover"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Use legacy DHCP client"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Allow/Disallow Wi‑Fi Roam Scans based on the amount of data traffic present at the interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Use the DHCP client from Lollipop instead of the new Android DHCP client."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behaviour"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Select application"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nothing"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Show touches"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Show visual feedback for touches"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Show GPU view updates"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash views inside windows when drawn with the GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulate colour space"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Show CPU usage"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Screen overlay showing current CPU usage"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Force GPU rendering"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Force use of GPU for 2D drawing"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profile GPU rendering"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don\'t keep activities"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Makes any app eligible to be written to external storage, regardless of manifest values"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Makes all activities re-sizable for multi-window, regardless of manifest values."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren\'t currently protected"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Touch to change or remove the password for desktop full backups"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don\'t match"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (default)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Enhanced colours"</item>
+ <item msgid="8280754435979370728">"Natural colours as seen by the eye"</item>
+ <item msgid="5363960654009010371">"Colours optimised for digital content"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inactive apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactive. Touch to toggle."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Active. Touch to toggle."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file-based encryption"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file-based encryption.\n !!Warning!! This will delete all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Picture colour mode"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Colour correction"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index 8fa3918..21340d8 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blocked"</item>
<item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Never check"</item>
+ <item msgid="6042769699089883931">"Check for DRM content only"</item>
+ <item msgid="9174900380056846820">"Always check"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Never use HDCP checking"</item>
+ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
+ <item msgid="45075631231212732">"Always use HDCP checking"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K per log buffer"</item>
+ <item msgid="2822309747675758628">"256 K per log buffer"</item>
+ <item msgid="6699306198357496731">"1 M per log buffer"</item>
+ <item msgid="5748528643937500349">"4 M per log buffer"</item>
+ <item msgid="1978629051085111592">"16 M per log buffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation off"</item>
+ <item msgid="6624864048416710414">"Animation scale .5x"</item>
+ <item msgid="2219332261255416635">"Animation scale 1x"</item>
+ <item msgid="3544428804137048509">"Animation scale 1.5x"</item>
+ <item msgid="3110710404225974514">"Animation scale 2x"</item>
+ <item msgid="4402738611528318731">"Animation scale 5x"</item>
+ <item msgid="6189539267968330656">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation off"</item>
+ <item msgid="3375781541913316411">"Animation scale .5x"</item>
+ <item msgid="1991041427801869945">"Animation scale 1x"</item>
+ <item msgid="4012689927622382874">"Animation scale 1.5x"</item>
+ <item msgid="3289156759925947169">"Animation scale 2x"</item>
+ <item msgid="7705857441213621835">"Animation scale 5x"</item>
+ <item msgid="6660750935954853365">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation off"</item>
+ <item msgid="1138649021950863198">"Animation scale .5x"</item>
+ <item msgid="4394388961370833040">"Animation scale 1x"</item>
+ <item msgid="8125427921655194973">"Animation scale 1.5x"</item>
+ <item msgid="3334024790739189573">"Animation scale 2x"</item>
+ <item msgid="3170120558236848008">"Animation scale 5x"</item>
+ <item msgid="1069584980746680398">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"None"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480p (secure)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (secure)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (secure)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (secure)"</item>
+ <item msgid="3547211260846843098">"4K (upscaled)"</item>
+ <item msgid="5411365648951414254">"4K (upscaled, secure)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"None"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+ <item msgid="1340692776955662664">"Call stack on glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Off"</item>
+ <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item>
+ <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Off"</item>
+ <item msgid="2751513398307949636">"On screen as bars"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Off"</item>
+ <item msgid="7688197031296835369">"Show overdraw areas"</item>
+ <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standard limit"</item>
+ <item msgid="4071574792028999443">"No background processes"</item>
+ <item msgid="4810006996171705398">"At most, 1 process"</item>
+ <item msgid="8586370216857360863">"At most, 2 processes"</item>
+ <item msgid="836593137872605381">"At most, 3 processes"</item>
+ <item msgid="7899496259191969307">"At most, 4 processes"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Charging"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio Source"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 0e7ebd8..dabc72ef 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Choose Profile"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Work"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorisations"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capture all Bluetooth HCI packets in a file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressive Wi‑Fi to Mobile handover"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Use legacy DHCP client"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Allow/Disallow Wi‑Fi Roam Scans based on the amount of data traffic present at the interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Use the DHCP client from Lollipop instead of the new Android DHCP client."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behaviour"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Select application"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nothing"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Show touches"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Show visual feedback for touches"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Show GPU view updates"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash views inside windows when drawn with the GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulate colour space"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Show CPU usage"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Screen overlay showing current CPU usage"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Force GPU rendering"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Force use of GPU for 2D drawing"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profile GPU rendering"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don\'t keep activities"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Makes any app eligible to be written to external storage, regardless of manifest values"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Makes all activities re-sizable for multi-window, regardless of manifest values."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren\'t currently protected"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Touch to change or remove the password for desktop full backups"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don\'t match"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (default)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Enhanced colours"</item>
+ <item msgid="8280754435979370728">"Natural colours as seen by the eye"</item>
+ <item msgid="5363960654009010371">"Colours optimised for digital content"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inactive apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactive. Touch to toggle."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Active. Touch to toggle."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file-based encryption"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file-based encryption.\n !!Warning!! This will delete all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Picture colour mode"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Colour correction"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index 8fa3918..21340d8 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blocked"</item>
<item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Never check"</item>
+ <item msgid="6042769699089883931">"Check for DRM content only"</item>
+ <item msgid="9174900380056846820">"Always check"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Never use HDCP checking"</item>
+ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
+ <item msgid="45075631231212732">"Always use HDCP checking"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K per log buffer"</item>
+ <item msgid="2822309747675758628">"256 K per log buffer"</item>
+ <item msgid="6699306198357496731">"1 M per log buffer"</item>
+ <item msgid="5748528643937500349">"4 M per log buffer"</item>
+ <item msgid="1978629051085111592">"16 M per log buffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation off"</item>
+ <item msgid="6624864048416710414">"Animation scale .5x"</item>
+ <item msgid="2219332261255416635">"Animation scale 1x"</item>
+ <item msgid="3544428804137048509">"Animation scale 1.5x"</item>
+ <item msgid="3110710404225974514">"Animation scale 2x"</item>
+ <item msgid="4402738611528318731">"Animation scale 5x"</item>
+ <item msgid="6189539267968330656">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation off"</item>
+ <item msgid="3375781541913316411">"Animation scale .5x"</item>
+ <item msgid="1991041427801869945">"Animation scale 1x"</item>
+ <item msgid="4012689927622382874">"Animation scale 1.5x"</item>
+ <item msgid="3289156759925947169">"Animation scale 2x"</item>
+ <item msgid="7705857441213621835">"Animation scale 5x"</item>
+ <item msgid="6660750935954853365">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation off"</item>
+ <item msgid="1138649021950863198">"Animation scale .5x"</item>
+ <item msgid="4394388961370833040">"Animation scale 1x"</item>
+ <item msgid="8125427921655194973">"Animation scale 1.5x"</item>
+ <item msgid="3334024790739189573">"Animation scale 2x"</item>
+ <item msgid="3170120558236848008">"Animation scale 5x"</item>
+ <item msgid="1069584980746680398">"Animation scale 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"None"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480p (secure)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (secure)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (secure)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (secure)"</item>
+ <item msgid="3547211260846843098">"4K (upscaled)"</item>
+ <item msgid="5411365648951414254">"4K (upscaled, secure)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"None"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+ <item msgid="1340692776955662664">"Call stack on glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Off"</item>
+ <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item>
+ <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Off"</item>
+ <item msgid="2751513398307949636">"On screen as bars"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Off"</item>
+ <item msgid="7688197031296835369">"Show overdraw areas"</item>
+ <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standard limit"</item>
+ <item msgid="4071574792028999443">"No background processes"</item>
+ <item msgid="4810006996171705398">"At most, 1 process"</item>
+ <item msgid="8586370216857360863">"At most, 2 processes"</item>
+ <item msgid="836593137872605381">"At most, 3 processes"</item>
+ <item msgid="7899496259191969307">"At most, 4 processes"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Charging"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio Source"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 0e7ebd8..dabc72ef 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Choose Profile"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Work"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorisations"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capture all Bluetooth HCI packets in a file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressive Wi‑Fi to Mobile handover"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Always allow Wi‑Fi Roam Scans"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Use legacy DHCP client"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobile data always active"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Allow/Disallow Wi‑Fi Roam Scans based on the amount of data traffic present at the interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Use the DHCP client from Lollipop instead of the new Android DHCP client."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification and read log data."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you\'ve previously authorised?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behaviour."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behaviour"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Select application"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nothing"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Show touches"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Show visual feedback for touches"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Show GPU view updates"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash views inside windows when drawn with the GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulate colour space"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Show CPU usage"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Screen overlay showing current CPU usage"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Force GPU rendering"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Force use of GPU for 2D drawing"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profile GPU rendering"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don\'t keep activities"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Show all ANRs"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Show App Not Responding dialogue for background apps"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Makes any app eligible to be written to external storage, regardless of manifest values"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be re-sizable"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Makes all activities re-sizable for multi-window, regardless of manifest values."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren\'t currently protected"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Touch to change or remove the password for desktop full backups"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don\'t match"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (default)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Enhanced colours"</item>
+ <item msgid="8280754435979370728">"Natural colours as seen by the eye"</item>
+ <item msgid="5363960654009010371">"Colours optimised for digital content"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inactive apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactive. Touch to toggle."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Active. Touch to toggle."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file-based encryption"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file-based encryption.\n !!Warning!! This will delete all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Picture colour mode"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Colour correction"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index 5947056..52992d5 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueada"</item>
<item msgid="1805837518286731242">"Desactivando mala conexión temporalmente"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"No comprobar"</item>
+ <item msgid="6042769699089883931">"Comprobar contenido DRM solamente"</item>
+ <item msgid="9174900380056846820">"Comprobar siempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nunca utilizar comprobación HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/búfer registro"</item>
+ <item msgid="2822309747675758628">"256 K/búfer registro"</item>
+ <item msgid="6699306198357496731">"1 M/búfer registro"</item>
+ <item msgid="5748528643937500349">"4 M/búfer registro"</item>
+ <item msgid="1978629051085111592">"16 M/búfer registro"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animación desactivada"</item>
+ <item msgid="6624864048416710414">"Escala de animación 0.5x"</item>
+ <item msgid="2219332261255416635">"Escala de animación 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animación 1.5x"</item>
+ <item msgid="3110710404225974514">"Escala de animación 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animación 5x"</item>
+ <item msgid="6189539267968330656">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animación desactivada"</item>
+ <item msgid="3375781541913316411">"Escala de animación .5x"</item>
+ <item msgid="1991041427801869945">"Escala de animación 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animación 1.5x"</item>
+ <item msgid="3289156759925947169">"Escala de animación 2x"</item>
+ <item msgid="7705857441213621835">"Escala de animación 5x"</item>
+ <item msgid="6660750935954853365">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animación desactivada"</item>
+ <item msgid="1138649021950863198">"Escala de animación .5x"</item>
+ <item msgid="4394388961370833040">"Escala de animación 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animación 1.5x"</item>
+ <item msgid="3334024790739189573">"Escala de animación 2x"</item>
+ <item msgid="3170120558236848008">"Escala de animación 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ninguno"</item>
+ <item msgid="9033194758688161545">"480 píxeles"</item>
+ <item msgid="1025306206556583600">"480 píxeles (seguro)"</item>
+ <item msgid="1853913333042744661">"720 píxeles"</item>
+ <item msgid="3414540279805870511">"720 píxeles (seguro)"</item>
+ <item msgid="9039818062847141551">"1080 píxeles"</item>
+ <item msgid="4939496949750174834">"1080 píxeles (seguro)"</item>
+ <item msgid="1833612718524903568">"4 K"</item>
+ <item msgid="238303513127879234">"4 K (seguro)"</item>
+ <item msgid="3547211260846843098">"4 K (mejorado)"</item>
+ <item msgid="5411365648951414254">"4 K (mejorado, seguro)"</item>
+ <item msgid="1311305077526792901">"720 píxeles y 1080 píxeles (pantalla doble)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ninguna"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gráficos)"</item>
+ <item msgid="1340692776955662664">"Pila de llamadas en glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desactivado"</item>
+ <item msgid="675719912558941285">"Recorte no rectangular en azul"</item>
+ <item msgid="1064373276095698656">"Comandos de dib. probados en verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desactivado"</item>
+ <item msgid="2751513398307949636">"En pantalla como barras"</item>
+ <item msgid="1851438178120770973">"Dumpsys gfxinfo en adb shell"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desactivado"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas superpuestas"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas para deuteranomalía"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Límite estándar"</item>
+ <item msgid="4071574792028999443">"Sin procesos en 2.º plano"</item>
+ <item msgid="4810006996171705398">"Máximo 1 proceso"</item>
+ <item msgid="8586370216857360863">"Máximo 2 procesos"</item>
+ <item msgid="836593137872605381">"Máximo 3 procesos"</item>
+ <item msgid="7899496259191969307">"Máximo 4 procesos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"En carga"</item>
+ <item msgid="5220695614993094977">"Protocolo de transferencia multimedia (MTP)"</item>
+ <item msgid="2086000968159047375">"Protocolo de transferencia de imágenes (PTP)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Fuente de audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index 013d576..2612943 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Elegir perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabajo"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opciones del programador"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activar opciones para programador"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Establecer opciones para desarrollar aplicaciones"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Las opciones de programador no están disponibles para este usuario."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"La configuración de la red VPN no está disponible para este usuario."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"La configuración de la conexión no está disponible para este usuario."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"La configuración del nombre de punto de acceso no está disponible para este usuario."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuración por USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuración cuando se conecta el USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revocar autorizaciones de depur. USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Acceso directo para informes de errores"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar un botón en el menú de encendido para realizar un informe de errores"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer activo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca quedará inactiva mientras el dispositivo se esté cargando."</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Registro de Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Captura todos los paquetes de Bluetooth HCI en un archivo."</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que el cargador de inicio se desbloquee"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVERTENCIA: Las funciones de protección de dispositivos no funcionarán en este dispositivo mientras esta configuración esté activada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Seleccionar aplicación de ubicación de prueba"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"No se configuró aplicación de ubicación de prueba."</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicación de ubicación de prueba: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro detallado de Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transferencia intensa de Wi‑Fi a celular"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usar cliente DHCP heredado"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/no permitir las búsquedas de Wi-Fi basadas la cantidad de tráfico de datos presente en la interfaz"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Selecciona el tamaño del Logger por búfer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleccionar configuración de USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleccionar configuración de USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Ubicaciones de prueba"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir ubicaciones de prueba"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Habilitar inspección de atributos de vista"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Usar el cliente DHCP de Lollipop en lugar del nuevo cliente DHCP de Android"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Siempre mantén los datos móviles activos, incluso cuando esté activada la conexión Wi‑Fi (para cambiar de red de forma rápida)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"¿Permitir depuración por USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"La depuración por USB solo está indicada para actividades de programación. Úsala para copiar datos entre tu computadora y el dispositivo, para instalar aplicaciones en el dispositivo sin recibir notificaciones y para leer datos de registro."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"¿Quieres revocar el acceso a la depuración por USB desde todas la computadoras que autorizaste hasta ahora?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"¿Permitir configuración de desarrollo?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Estos parámetros de configuración están destinados únicamente a los programadores. Pueden hacer que el dispositivo o sus aplicaciones no funcionen correctamente."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicaciones por USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprobar que las aplicaciones instaladas mediante ADB/ADT no ocasionen daños"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Habilitar aplicac. de terminal que ofrece acceso al shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprobación HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Configurar comportamiento de la comprobación HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuración"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Seleccionar la aplicación para depurar"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"No se especificó ninguna aplicación para depurar."</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplicación para depurar: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Seleccionar una aplicación"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ninguna"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Esperar al depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Esperar que se conecte el depurador para iniciar la aplicación"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Dibujo"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Representación acelerada mediante hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoreo"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo estricto"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Destello por op. de apps en la conversación principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Ubicación del puntero"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superponer capa en pant. para mostrar puntos tocados"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostrar toques"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostrar información visual para toques"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Ver actualiz. de superficie"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Destello en superficie por actualización"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Ver actualiz. vistas GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Mostrar vistas de ventanas procesadas con GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ver actualiz. de capas de hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Luz verde en capas de hardware al actualizarse"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar superpos. de GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desactivar superpos. HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Usar GPU para combinar pantallas"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular espacio de color"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Seguimientos de OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Inhab. enrutam. audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Inhab. enrutam. automático a periféricos audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar límites de diseño"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar límites de recortes, márgenes, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forzar diseño der. a izq."</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forzar diseño pantalla der.>izq., cualquier idioma"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar el uso de CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Mostrar superposición en pantalla con uso actual de la CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forzar representación GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forzar uso de GPU para dibujar en 2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forzar MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activar MSAA 4x en aplicaciones OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operaciones de recorte no rectangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Represent. GPU del perfil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Ventana de escala de animación"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Transición de escala de animación"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duración de animador"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular pantallas secundarias"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicaciones"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Eliminar actividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Descartar todas las actividades en cuanto el usuario las abandona"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Límite de procesos en segundo plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Errores sin respuesta"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostrar diálogo cuando las aplic. en 2do plano no responden"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permisos en almacenamiento externo"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Cualquier aplicación puede escribirse en una memoria externa, independientemente de los valores del manifiesto."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar actividades para que cambien de tamaño"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permite que todas las actividades puedan cambiar de tamaño para el modo multiventana, sin importar los valores del manifiesto."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Contraseñas"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Tus copias de seguridad de escritorio no están protegidas por contraseña."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toca para cambiar o eliminar la contraseña de las copias de seguridad completas de tu escritorio."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nueva contraseña de copia de seguridad definida"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"La nueva contraseña y la de confirmación no coinciden."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Error al definir contraseña de copia de seguridad"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrante (predeterminado)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Estándar"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Colores mejorados"</item>
+ <item msgid="8280754435979370728">"Colores naturales como los ve el ojo"</item>
+ <item msgid="5363960654009010371">"Colores optimizados para contenido digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicaciones inactivas"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactiva (toca para alternar)"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Activa (toca para alternar)"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"En ejecución"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver y controlar servicios actuales en ejecución"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Inhabilitado"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Siempre activado"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convertir a encriptación de archivo"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convertir…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Ya está encriptado"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Convertir a encriptación basada en archivos"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convierte la partición de datos en una encriptación basada en archivos.\n Advertencia: Esta acción borrará todos los datos.\n Esta función se encuentra en fase Alfa y es posible que no funcione correctamente.\n Para continuar, presiona la opción para borrar y convertir."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Borrar y convertir…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de color de la imagen"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Usa sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Inhabilitado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Acromatopsia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteronomalía (rojo-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalía (rojo-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalía (azul-amarillo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Corrección de color"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Esta función es experimental y puede afectar el rendimiento."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Reemplazado por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index ba51a81..0493217 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueada"</item>
<item msgid="1805837518286731242">"Inhabilitando conexión inestable temporalmente..."</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"No comprobar"</item>
+ <item msgid="6042769699089883931">"Comprobar solo contenido con DRM"</item>
+ <item msgid="9174900380056846820">"Comprobar siempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"No utilizar comprobación de HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/búfer registro"</item>
+ <item msgid="2822309747675758628">"256 K/búfer registro"</item>
+ <item msgid="6699306198357496731">"1 M/búfer registro"</item>
+ <item msgid="5748528643937500349">"4 M/búfer registro"</item>
+ <item msgid="1978629051085111592">"16 M/búfer registro"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animación desactivada"</item>
+ <item msgid="6624864048416710414">"Escala de animación 0,5x"</item>
+ <item msgid="2219332261255416635">"Escala de animación 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animación 1,5x"</item>
+ <item msgid="3110710404225974514">"Escala de animación 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animación 5x"</item>
+ <item msgid="6189539267968330656">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animación desactivada"</item>
+ <item msgid="3375781541913316411">"Escala de animación 0,5x"</item>
+ <item msgid="1991041427801869945">"Escala de animación 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animación 1,5x"</item>
+ <item msgid="3289156759925947169">"Escala de animación 2x"</item>
+ <item msgid="7705857441213621835">"Escala de animación 5x"</item>
+ <item msgid="6660750935954853365">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animación desactivada"</item>
+ <item msgid="1138649021950863198">"Escala de animación 0,5x"</item>
+ <item msgid="4394388961370833040">"Escala de animación 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animación 1,5x"</item>
+ <item msgid="3334024790739189573">"Escala de animación 2x"</item>
+ <item msgid="3170120558236848008">"Escala de animación 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ninguna"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (seguro)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (seguro)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (seguro)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (seguro)"</item>
+ <item msgid="3547211260846843098">"4K (mejorado)"</item>
+ <item msgid="5411365648951414254">"4K (mejorado, seguro)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (pantalla doble)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Desactivado"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gráficos)"</item>
+ <item msgid="1340692776955662664">"Pila de llamadas en glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"No"</item>
+ <item msgid="675719912558941285">"Dibujar región de recorte no rectangular en azul"</item>
+ <item msgid="1064373276095698656">"Resaltar comandos de dibujo probados en verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"No"</item>
+ <item msgid="2751513398307949636">"En pantalla como barras"</item>
+ <item msgid="1851438178120770973">"En adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"No"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas sobredibujadas"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas para deuteranomalía"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Límite estándar"</item>
+ <item msgid="4071574792028999443">"Sin procesos en segundo plano"</item>
+ <item msgid="4810006996171705398">"Máximo 1 proceso"</item>
+ <item msgid="8586370216857360863">"Máximo 2 procesos"</item>
+ <item msgid="836593137872605381">"Máximo 3 procesos"</item>
+ <item msgid="7899496259191969307">"Máximo 4 procesos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Carga"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Fuente de audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 317b37a..02a8306 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Seleccionar perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabajo"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opciones de desarrollo"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Habilitar opciones para desarrolladores"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Establecer opciones de desarrollo de aplicaciones"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Las opciones de desarrollador no están disponibles para este usuario"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Los ajustes de VPN no están disponibles para este usuario"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Los ajustes para compartir Internet no están disponibles para este usuario"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Los ajustes del nombre de punto de acceso no están disponibles para este usuario"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuración por USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Activar el modo de depuración cuando el dispositivo esté conectado por USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revocar autorizaciones depur. USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atajo a informe de errores"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar un botón en el menú de encendido para crear un informe de errores"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Registro de búsqueda de HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturar todos los paquetes de HCI de Bluetooth HCI en un archivo"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir desbloquear el bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVERTENCIA: Las funciones de protección no funcionarán en este dispositivo mientras esta opción esté activada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Elegir aplicación para simular ubicación"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplicación para simular ubicación no establecida"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicación para simular ubicación: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro Wi-Fi detallado"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transferencia total de Wi‑Fi a móvil"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir siempre búsquedas de Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usar cliente DHCP heredado"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móviles siempre activos"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/No permitir búsquedas de Wi-Fi basadas en la cantidad de tráfico de datos presente en la interfaz"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños del búfer de Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Elige el tamaño del Logger por búfer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleccionar configuración de USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleccionar configuración de USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Ubicaciones simuladas"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir ubicaciones simuladas"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Inspección de atributos de vista"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utiliza el cliente DHCP de Lollipop en lugar del nuevo cliente DHCP de Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén los datos móviles siempre activos, aunque la conexión Wi‑Fi esté activada (para cambiar de red rápidamente)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"¿Permitir depuración por USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"La depuración por USB solo está indicada para actividades de desarrollo. Puedes utilizarla para intercambiar datos entre el ordenador y el dispositivo, para instalar aplicaciones en el dispositivo sin recibir notificaciones y para leer datos de registro."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"¿Quieres revocar el acceso a la depuración por USB de todos los ordenadores que has autorizado?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"¿Permitir ajustes de desarrollo?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Estos ajustes están destinados únicamente a los desarrolladores. Pueden provocar que el dispositivo o las aplicaciones no funcionen correctamente."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicaciones por USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprueba las aplicaciones instaladas mediante ADB/ADT para detectar comportamientos dañinos"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Habilitar aplicación de terminal que ofrece acceso a shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprobación de HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Establecer comprobación HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuración"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Aplicación para depurar"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Aplicación de depuración no configurada"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplicación de depuración: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selecciona una aplicación"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ninguna"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Esperar al depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"La aplicación depurada espera a que se active el depurador para ejecutarse"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Dibujo"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderización acelerada por hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisión"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo estricto"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Parpadear si las aplicaciones tardan mucho en el thread principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Ubicación del puntero"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superponer los datos de las pulsaciones en la pantalla"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostrar pulsaciones"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostrar la ubicación de las pulsaciones en la pantalla"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Cambios de superficie"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Actualizar superficies de ventana al actualizarse"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Actualizaciones GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Actualizar vistas de las ventanas creadas con GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ver actualizaciones capas HW"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Iluminar capas de hardware en verde al actualizarse"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar sobredibujos de GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Inhabilitar superposiciones HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Usar siempre la GPU para combinar pantallas"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular espacio de color"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Habilitar seguimiento OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Sin enrutamiento audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Inhabilitar el enrutamiento automático a periféricos de audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar límites de diseño"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar límites de vídeo, márgenes, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forzar dirección diseño RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forzar dirección (RTL) para todas configuraciones"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar uso de la CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Suporponer el uso de la CPU en la pantalla"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forzar aceleración GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forzar uso de GPU para dibujos en 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forzar MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Habilitar MSAA 4x en aplicaciones de OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operaciones de recorte no rectangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Perfil de renderización de GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de animación de ventana"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de transición-animación"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duración de animación"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular pantallas secundarias"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicaciones"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Destruir actividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruir actividades cuando el usuario deje de usarlas"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Límitar procesos en segundo plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Errores sin respuesta"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Informar de que una aplicación en segundo plano no responde"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permiso de aplicaciones de forma externa"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Hace que cualquier aplicación se pueda escribir en un dispositivo de almacenamiento externo, independientemente de los valores definidos"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar el ajuste de tamaño de las actividades"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permite que se pueda ajustar el tamaño de todas las actividades para el modo multiventana, independientemente de los valores establecidos."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Contraseña para copias de ordenador"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Las copias de seguridad completas de ordenador no están protegidas"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Tocar para cambiar o quitar la contraseña para las copias de seguridad completas de ordenador"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nueva contraseña de seguridad establecida"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"La nueva contraseña y la de confirmación no coinciden"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Error al establecer la contraseña de seguridad"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrante (predeterminado)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Estándar"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Colores mejorados"</item>
+ <item msgid="8280754435979370728">"Colores naturales como en la vida real"</item>
+ <item msgid="5363960654009010371">"Colores optimizados para contenido digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicaciones inactivas"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactiva. Toca para cambiar."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Activa. Toca para cambiar."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Servicios en ejecución"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver y controlar los servicios en ejecución"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Inhabilitado"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Siempre activado"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convertir a cifrado de archivo"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convertir…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Ya está cifrado"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Convirtiendo a un cifrado basado en archivos"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convierte la partición de datos en un cifrado basado en archivos.\n Advertencia: Este proceso borrará todos los datos.\n Esta función es alpha y es posible que no funcione correctamente.\n Pulsa la opción Borrar y convertir… para continuar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Borrar y convertir…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de color de imagen"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utiliza sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Inhabilitado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Acromatopsia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteronomalía (rojo-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalía (rojo-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalía (azul-amarillo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Corrección del color"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Esta función es experimental y puede afectar al rendimiento."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Anulado por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-et-rEE/arrays.xml b/packages/SettingsLib/res/values-et-rEE/arrays.xml
index 2a8f69b..5bf13bb 100644
--- a/packages/SettingsLib/res/values-et-rEE/arrays.xml
+++ b/packages/SettingsLib/res/values-et-rEE/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokeeritud"</item>
<item msgid="1805837518286731242">"Kehva ühenduse ajutine vältimine"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ära kunagi kontrolli"</item>
+ <item msgid="6042769699089883931">"Kontrolli ainult DRM-sisu"</item>
+ <item msgid="9174900380056846820">"Pidev kontrollimine"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ära kunagi kasuta HDCP-kontrollimist"</item>
+ <item msgid="3878793616631049349">"Kasuta HDCP-kontrolli ainult DRM-sisu korral"</item>
+ <item msgid="45075631231212732">"Kasuta alati HDCP-kontrollimist"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 000"</item>
+ <item msgid="505611754508988476">"256 000"</item>
+ <item msgid="6361286924268716397">"1 000 000"</item>
+ <item msgid="6405203239560695266">"4 000 000"</item>
+ <item msgid="3025431211013424097">"16 000 000"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 000"</item>
+ <item msgid="3534782711045262344">"256 000"</item>
+ <item msgid="8085867209202153403">"1 000 000"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 k / logipuhver"</item>
+ <item msgid="2822309747675758628">"256 k / logipuhver"</item>
+ <item msgid="6699306198357496731">"1 mln / logipuhver"</item>
+ <item msgid="5748528643937500349">"4 mln / logipuhver"</item>
+ <item msgid="1978629051085111592">"16 mln / logipuhver"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animatsioon väljas"</item>
+ <item msgid="6624864048416710414">"Animatsiooni skaala 0,5 korda"</item>
+ <item msgid="2219332261255416635">"Animatsiooni skaala 1 kord"</item>
+ <item msgid="3544428804137048509">"Animatsiooni skaala 1,5 korda"</item>
+ <item msgid="3110710404225974514">"Animatsiooni skaala 2 korda"</item>
+ <item msgid="4402738611528318731">"Animatsiooni skaala 5 korda"</item>
+ <item msgid="6189539267968330656">"Animatsiooni skaala 10 korda"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animatsioon väljas"</item>
+ <item msgid="3375781541913316411">"Animatsiooni skaala 0,5 korda"</item>
+ <item msgid="1991041427801869945">"Animatsiooni skaala 1 kord"</item>
+ <item msgid="4012689927622382874">"Animatsiooni skaala 1,5 korda"</item>
+ <item msgid="3289156759925947169">"Animatsiooni skaala 2 korda"</item>
+ <item msgid="7705857441213621835">"Animatsiooni skaala 5 korda"</item>
+ <item msgid="6660750935954853365">"Animatsiooni skaala 10 korda"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animatsioon väljas"</item>
+ <item msgid="1138649021950863198">"0,5-kordne animatsiooni skaala"</item>
+ <item msgid="4394388961370833040">"1-kordne animatsiooni skaala"</item>
+ <item msgid="8125427921655194973">"1,5-kordne animatsiooni skaala"</item>
+ <item msgid="3334024790739189573">"2-kordne animatsiooni skaala"</item>
+ <item msgid="3170120558236848008">"5-kordne animatsiooni skaala"</item>
+ <item msgid="1069584980746680398">"10-kordne animatsiooni skaala"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Puudub"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (turvaline)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (turvaline)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (turvaline)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (turvaline)"</item>
+ <item msgid="3547211260846843098">"4K (üles skaleeritud)"</item>
+ <item msgid="5411365648951414254">"4K (üles skaleeritud, turvaline)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (kahel ekraanil)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Puudub"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (graafika)"</item>
+ <item msgid="1340692776955662664">"Helistamise virn glGetErrori kohta"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Väljas"</item>
+ <item msgid="675719912558941285">"Joonista mittetäisnurkne osa siniselt"</item>
+ <item msgid="1064373276095698656">"Muuda testitud käsud roheliseks"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Väljas"</item>
+ <item msgid="2751513398307949636">"Ekraanil ribadena"</item>
+ <item msgid="1851438178120770973">"Adb-kestas dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Väljas"</item>
+ <item msgid="7688197031296835369">"Kuva ülejoonistatud alad"</item>
+ <item msgid="2290859360633824369">"Deuteranomaly jaoks alade kuvamine"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardpiir"</item>
+ <item msgid="4071574792028999443">"Taustaprotsessideta"</item>
+ <item msgid="4810006996171705398">"Maksimaalselt 1 protsess"</item>
+ <item msgid="8586370216857360863">"Maksimaalselt 2 protsessi"</item>
+ <item msgid="836593137872605381">"Maksimaalselt 3 protsessi"</item>
+ <item msgid="7899496259191969307">"Maksimaalselt 4 protsessi"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Laadimine"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Heliallikas"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et-rEE/strings.xml
index 366c336..5fb55eb 100644
--- a/packages/SettingsLib/res/values-et-rEE/strings.xml
+++ b/packages/SettingsLib/res/values-et-rEE/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profiili valimine"</string>
<string name="category_personal" msgid="1299663247844969448">"Isiklik"</string>
<string name="category_work" msgid="8699184680584175622">"Töö"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Arendaja valikud"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Arendaja valikute lubamine"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Rakenduse arenduse valikute määramine"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Arendaja valikud pole selle kasutaja jaoks saadaval"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-i seaded pole selle kasutaja jaoks saadaval"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Vahendamisseaded pole selle kasutaja jaoks saadaval"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Pääsupunkti nime seaded pole selle kasutaja jaoks saadaval"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB silumine"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Silumisrežiim, kui USB on ühendatud"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Tühista USB silumisvolitused"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Veaaruande otsetee"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Kuva toitemenüüs veaaruande jäädvustamise nupp"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Jää sisselülitatuks"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekraan ei lähe kunagi laadimise ajal unerežiimi"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Luba Bluetoothi HCI jälgimise logi"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Hõiva kõik faili Bluetoothi HCI paketid"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-i avamine"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Luba buudilaadur avada"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Kas lubada OEM-i avamine?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"HOIATUS! Kui see seade on sisse lülitatud, ei toimi seadme turvafunktsioonid."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Valige asukohateavet imiteeriv rakendus"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Asukohateavet imiteeriv rakendus on määramata"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Asukohateavet imiteeriv rakendus: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Võrgustik"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Juhtmeta ekraaniühenduse sertifitseerimine"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Luba WiFi paljusõnaline logimine"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agressiivne WiFi-lt mobiilile üleminek"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Luba alati WiFi-rändluse skannimine"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"DHCP pärandkliendi kasutamine"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilne andmeside on alati aktiivne"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Luba/keela WiFi-rändluse skannimine liidese andmeliikluse põhjal"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logija puhvri suurused"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Vali logija suur. logipuhvri kohta"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB-seadistuse valimine"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB-seadistuse valimine"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Luba võltsasukohti"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Luba võltsasukohti"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Luba kuva atribuudi hindamine"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Kasutage uue Androidi DHCP-kliendi asemel Lollipopi DHCP-klienti."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hoidke mobiilne andmeside alati aktiivsena, isegi kui WiFi on aktiivne (võrkude kiireks vahetamiseks)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Luban USB silumise?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-silumine on mõeldud ainult arendamiseks. Kasutage seda andmete kopeerimiseks oma arvuti ja seadme vahel, seadmesse rakenduste installimiseks ilma teatisteta ning logiandmete lugemiseks."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Kas tühistada juurdepääs USB silumisele kõikides arvutites, mille olete varem volitanud?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Kas lubada arendajaseaded?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Need seaded on mõeldud ainult arendajatele. Need võivad põhjustada seadme ja seadmes olevate rakenduste rikkeid või valesti toimimist."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Kinnita rakendus USB kaudu"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolli, kas ADB/ADT-ga installitud rakendused on ohtlikud."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Kohalik terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Luba kohalikku turvalist juurdepääsu pakkuv terminalirakendus"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-kontrollimine"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP käitumise määramine"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Silumine"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Valige silumisrakendus"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Ühtegi silumisrakendust pole määratud"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Silumisrakendus: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Rakenduse valimine"</string>
+ <string name="no_application" msgid="2813387563129153880">"Mitte ühtegi"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Oodake silurit"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Silutud rakendus ootab toimimiseks siluri lisamist"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Sisend"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Joonis"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Tarkvarakiirendusega renderdamine"</string>
+ <string name="media_category" msgid="4388305075496848353">"Meedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Jälgimine"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Range režiim on lubatud"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Ekr. vilgub, kui rakend. teevad peateemal toiming."</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Kursori asukoht"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Praegusi puuteandmeid kuvav ekraani ülekate"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Näita puuteid"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Kuva visuaalset tagasisidet puudete kohta"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Näita pinna värskendusi"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Akna pinna värskendamiseks kirjuta kogu akna pind üle"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Näita GPU kuva värskend."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU-ga joonistades kirjuta akende kuvad üle"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Kuva riistv. kiht. värsk."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Riistvara kihid vilguvad värskendamisel roheliselt"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Silu GPU ülejoonistust"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Keela HW ülekatted"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Kasuta alati GPU-d kuva koostamisel"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Modelleeri värviruumi"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Luba OpenGL-i jälgimine"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB-heli mars. keelamine"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Auto. marsruut. keelamine väl. USB-heliseadmetesse"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Näita paigutuse piire"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Kuva klipi piirid, veerised jms"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Paremalt vasakule paig."</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Määra lokaatides ekraanipaig. paremalt vasakule"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU-kasutuse kuvamine"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Praegust CPU-kasutust kuvav ekraani ülekate"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Jõusta GPU renderdamine"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Jõusta GPU kasutam. kahemõõtmeliste jooniste puhul"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Jõusta 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Luba 4x MSAA OpenGL ES 2.0 rakendustes"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Silu klipi mittetäisnurksed toimingud"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profiili GPU renderdamine"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Akna animatsiooni skaala"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Ülemineku animats. skaala"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animaatori kestuse skaala"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Modelleeri teisi ekraane"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Rakendused"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ära hoia tegevusi alles"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Kõigi tegev. hävit. kohe, kui kasutaja neist lahk."</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Taustaprotsesside piir"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Näita kõiki ANR-e"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Kuva taustarakendustele dial. Rakendus ei reageeri"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Luba rakendused välises salvestusruumis"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Lubab rakendusi kirjutada välisesse salvestusruumi olenemata manifesti väärtustest"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Muuda tegevuste suurused muudetavaks"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Muudab kõigi tegevuste suurused mitme aknaga vaates olenemata manifesti väärtustest muudetavaks."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Arvutivarunduse parool"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Täielikud arvutivarundused pole praegu kaitstud"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Puudutage, et muuta või eemaldada täielike arvutivarunduste parool"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Uus varuparool on määratud"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Uus parool ja kinnitus ei ühti"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Varuparooli määramine ebaõnnestus"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Ere (vaikeseade)"</item>
+ <item msgid="8446070607501413455">"Loomulik"</item>
+ <item msgid="6553408765810699025">"Tavaline"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Täiustatud värvid"</item>
+ <item msgid="8280754435979370728">"Silmadele loomulikuna tunduvad värvid"</item>
+ <item msgid="5363960654009010371">"Digitaalse sisu jaoks optimeeritud värvid"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktiivsed rakendused"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktiivne. Puudutage ümberlülitamiseks."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiivne. Puudutage ümberlülitamiseks."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Käitatud teenused"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Praegu käitatud teenuste vaatamine ja juhtimine"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Öörežiim"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Keelatud"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Alati sees"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automaatne"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Teisendamine failikrüpteeringuga andmeteks"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Teisenda …"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Juba failikrüpteeringuga"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Teisendamine failipõhiseks krüpteeringuks"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Teisendage andmete sektsioon failipõhiseks krüpteeringuks.\n !!Hoiatus!! See kustutab kõik teie andmed.\n See funktsioon on alfaversioonis ega pruugi õigesti töötada.\n Jätkamiseks vajutage käsku „Kustuta ja teisenda …”."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Kustuta ja teisenda …"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Pildi värvirežiim"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB kasutamine"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Keelatud"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokroomsus"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaalia (punane-roheline)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaalia (punane-roheline)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaalia (sinine-kollane)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Värviparandus"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"See funktsioon on katseline ja võib mõjutada toimivust."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Alistas <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-eu-rES/arrays.xml b/packages/SettingsLib/res/values-eu-rES/arrays.xml
index 7746f01..707ace5 100644
--- a/packages/SettingsLib/res/values-eu-rES/arrays.xml
+++ b/packages/SettingsLib/res/values-eu-rES/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokeatuta"</item>
<item msgid="1805837518286731242">"Konexio ahula aldi baterako saihesten"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ez egiaztatu inoiz"</item>
+ <item msgid="6042769699089883931">"Egiaztatu DRM edukirako soilik"</item>
+ <item msgid="9174900380056846820">"Egiaztatu beti"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ez erabili inoiz HDCP egiaztapena"</item>
+ <item msgid="3878793616631049349">"Erabili HDCP egiaztapena DRM edukirako soilik"</item>
+ <item msgid="45075631231212732">"Erabili beti HDCP egiaztapena"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K erregistroen bufferreko"</item>
+ <item msgid="2822309747675758628">"256 K erregistroen bufferreko"</item>
+ <item msgid="6699306198357496731">"1 M erregistroen bufferreko"</item>
+ <item msgid="5748528643937500349">"4 M erregistroen bufferreko"</item>
+ <item msgid="1978629051085111592">"16 M erregistroen bufferreko"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animazioa desaktibatuta"</item>
+ <item msgid="6624864048416710414">"Animazio-eskala: 0,5x"</item>
+ <item msgid="2219332261255416635">"Animazio-eskala: 1x"</item>
+ <item msgid="3544428804137048509">"Animazio-eskala: 1,5x"</item>
+ <item msgid="3110710404225974514">"Animazio-eskala 2x"</item>
+ <item msgid="4402738611528318731">"Animazio-eskala: 5x"</item>
+ <item msgid="6189539267968330656">"Animazio-eskala: 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animazioa desaktibatuta"</item>
+ <item msgid="3375781541913316411">"Animazio-eskala: 0,5x"</item>
+ <item msgid="1991041427801869945">"Animazio-eskala: 1x"</item>
+ <item msgid="4012689927622382874">"Animazio-eskala: 1,5x"</item>
+ <item msgid="3289156759925947169">"Animazio-eskala: 2x"</item>
+ <item msgid="7705857441213621835">"Animazio-eskala: 5x"</item>
+ <item msgid="6660750935954853365">"Animazio-eskala: 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animazioa desaktibatuta"</item>
+ <item msgid="1138649021950863198">"Animazio-eskala: 0,5x"</item>
+ <item msgid="4394388961370833040">"Animazio-eskala: 1x"</item>
+ <item msgid="8125427921655194973">"Animazio-eskala: 1,5x"</item>
+ <item msgid="3334024790739189573">"Animazio-eskala: 2x"</item>
+ <item msgid="3170120558236848008">"Animazio-eskala: 5x"</item>
+ <item msgid="1069584980746680398">"Animazio-eskala: 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Bat ere ez"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480 p (segurua)"</item>
+ <item msgid="1853913333042744661">"720 p"</item>
+ <item msgid="3414540279805870511">"720 p (segurua)"</item>
+ <item msgid="9039818062847141551">"1080 p"</item>
+ <item msgid="4939496949750174834">"1080 p (segurua)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (segurua)"</item>
+ <item msgid="3547211260846843098">"4K (hobetua)"</item>
+ <item msgid="5411365648951414254">"4K (hobetua, segurua)"</item>
+ <item msgid="1311305077526792901">"720 p, 1080 p (bi pantaila)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Bat ere ez"</item>
+ <item msgid="9089630089455370183">"Logcat-a"</item>
+ <item msgid="5397807424362304288">"Systrace (grafikoak)"</item>
+ <item msgid="1340692776955662664">"Dei-pila glGetError funtzioan"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desaktibatuta"</item>
+ <item msgid="675719912558941285">"Marraztu ez-angeluzuzena urdinez"</item>
+ <item msgid="1064373276095698656">"Nabarmendu agindu probatuak berdez"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desaktibatuta"</item>
+ <item msgid="2751513398307949636">"Pantailan barra gisa"</item>
+ <item msgid="1851438178120770973">"ADB shell dumpsys gfxinfo aginduan"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desaktibatuta"</item>
+ <item msgid="7688197031296835369">"Erakutsi gainidatzi diren eremuak"</item>
+ <item msgid="2290859360633824369">"Erakutsi daltonismorako eremuak"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Muga estandarra"</item>
+ <item msgid="4071574792028999443">"Ez dago atzeko planoko prozesurik"</item>
+ <item msgid="4810006996171705398">"1 prozesu gehienez"</item>
+ <item msgid="8586370216857360863">"2 prozesu gehienez"</item>
+ <item msgid="836593137872605381">"3 prozesu gehienez"</item>
+ <item msgid="7899496259191969307">"4 prozesu gehienez"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Kargatzen"</item>
+ <item msgid="5220695614993094977">"MTP (multimedia-elementuak transferitzeko protokoloa)"</item>
+ <item msgid="2086000968159047375">"PTP (irudiak transferitzeko protokoloa)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB bidezko Ethernet konexioa)"</item>
+ <item msgid="1718924214939774352">"Audio-iturburua"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu-rES/strings.xml
index 68591cf..9f62710 100644
--- a/packages/SettingsLib/res/values-eu-rES/strings.xml
+++ b/packages/SettingsLib/res/values-eu-rES/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Aukeratu profila"</string>
<string name="category_personal" msgid="1299663247844969448">"Pertsonalak"</string>
<string name="category_work" msgid="8699184680584175622">"Lanekoak"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Garatzaileen aukerak"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Gaitu garatzaileen aukerak"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Ezarri aplikazioak garatzeko aukerak"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Erabiltzaile honek ez ditu garatzaileen aukerak"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Erabiltzaile honek ezin ditu VPN ezarpenak atzitu"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Erabiltzaile honek ezin ditu konexioa partekatzeko ezarpenak atzitu"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Erabiltzaile honek ezin ditu APN ezarpenak atzitu"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB arazketa"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Gaitu arazketa modua USBa konektatzean"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Baliogabetu USB arazketarako baimenak"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Akatsen txostenerako lasterbidea"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Bateriaren menuan, erakutsi akatsen txostena sortzeko botoia"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Mantendu aktibo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Pantaila ez da inoiz inaktibo ezarriko kargatu bitartean"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gaitu Bluetooth HCI miatze-erregistroa"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Bildu Bluetooth HCI pakete guztiak fitxategi batean"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM desblokeoa"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Onartu abiarazlea desblokeatzea"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM desblokeoa onartu nahi duzu?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ABISUA: ezarpen hau aktibatuta dagoen bitartean, gailuaren babes-eginbideek ez dute gailu honetan funtzionatuko."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Hautatu kokapen faltsuen aplikazioa"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ez da ezarri kokapen faltsuen aplikaziorik"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Kokapen faltsuen aplikazioa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Sareak"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Hari gabeko bistaratze-egiaztatzea"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Gaitu Wi-Fi sareetan saioa hasteko modu xehatua"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Behartu Wi-Fi konexiotik datuenera aldatzera"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Onartu beti ibiltaritzan Wi-Fi sareak bilatzea"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Erabili aurreko bertsioko DHCP bezeroa"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mugikorreko datuak beti aktibo"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Onartu edo debekatu ibiltaritzan Wi-Fi sareak bilatzea, interfazeko datu-trafikoaren arabera"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Erregistroen buffer-tamainak"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Hautatu erregistroen buffer-tamainak"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Hautatu USB konfigurazioa"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Hautatu USB konfigurazioa"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Onartu kokapen faltsuak"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Onartu kokapen faltsuak"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Gaitu ikuspegiaren atributuak ikuskatzeko aukera"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Erabili Lollipop bertsioko DHCP bezeroa eta ez Android DHCP bezero berria."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantendu mugikorreko datuak beti aktibo, baita Wi-Fi konexioa aktibo dagoenean ere (sarez bizkor aldatu ahal izateko)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB arazketa onartu?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB arazketa garapen-xedeetarako soilik dago diseinatuta. Erabil ezazu ordenagailuaren eta gailuaren artean datuak kopiatzeko, aplikazioak gailuan jakinarazi gabe instalatzeko eta erregistro-datuak irakurtzeko."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Aurretik baimendutako ordenagailu guztiei USB arazketarako sarbidea baliogabetu nahi diezu?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Baimendu garapenerako ezarpenak?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ezarpen hauek garapen-xedeetarako pentsatu dira soilik. Baliteke ezarpenen eraginez gailua matxuratzea edo funtzionamendu okerra izatea."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Egiaztatu USBko aplikazioak."</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Egiaztatu ADB/ADT bidez instalatutako aplikazioak portaera kaltegarriak antzemateko."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Tokiko terminala"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Gaitu tokiko shell-sarbidea duen terminal-aplikazioa"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP egiaztapena"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Ezarri HDCP egiaztapen-portaera"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Arazketa"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Hautatu arazteko aplikazioa"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Ez da arazteko aplikaziorik ezarri"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Arazteko aplikazioa: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Hautatu aplikazioa"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ezer ez"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Itxaron araztaileari"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Araztutako aplikazioa araztailea erantsi arte itxaroten ari da exekutatu aurretik"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Sarrera"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Marrazkia"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware bidez bizkortutako errendatzea"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia-edukia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Kontrola"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modu zorrotza gaituta"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Distira hari nagusian eragiketa luzeak egitean"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Erakuslearen kokapena"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Ukipen-datuak erakusteko pantaila-gainjartzea"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Erakutsi ukitutakoa"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Erakutsi ukitutako elementuak"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Erakutsi azaleko egunera."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Distiratu leiho osoen azalak eguneratzen direnean"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ikuspegi-eguneratzeak"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ikuspegi-distira leiho barrutik GPUz marraztean"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hardware-geruzen eguneratzeak"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Eguneratu bitartean, hardware-geruzak berdez"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Araztu GPU gainidazketa"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desgaitu HW gainjartzeak"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Erabili beti GPU pantaila-muntaietarako"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulatu kolore-espazioa"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Gaitu OpenGL aztarnak"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desgaitu USB audio-bideratzea"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desgaitu USB audio-gailuetara automatikoki bideratzea"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Erakutsi diseinuaren mugak"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Erakutsi kliparen mugak, marjinak, etab."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Behartu eskuin-ezker norabidea."</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Behartu pantaila-diseinuaren norabidea eskuinetik ezkerrerakoa izatera eskualdeko ezarpen guztiekin."</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Erakutsi PUZ erabilera"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"PUZ erabilera erakusten duen pantaila-gainjartzea"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Behartu GPU errendatzea"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Behartu GPUa erabiltzera 2 dimentsioko marrazkietan."</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Behartu 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Gaitu 4x MSAA, OpenGL ES 2.0 aplikazioetan."</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Araztu angeluzuzenak ez diren klip-eragiketak."</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Egin GPU errendatzearen profila"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Leihoen animazio-eskala"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Trantsizio-animazio eskala"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatzailearen iraupena"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulatu bigarren mailako bistaratzeak"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikazioak"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ez mantendu jarduerak"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Ezabatu jarduerak erabiltzailea haietatik irtetean"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Atzeko planoko prozesuen muga"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Erakutsi ANR guztiak"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"\"Erantzunik ez\" mezua atz. planoko aplikazioetarako"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Behartu aplikazioak onartzea kanpoko biltegian"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Aplikazioek kanpoko memorian idatz dezakete, manifestuaren balioak kontuan izan gabe"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Behartu jardueren tamaina doitu ahal izatea"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Manifestuan jartzen duena jartzen duela ere, jarduera guztien tamaina doitzeko aukera ematen du, hainbat leihotan erabili ahal izan daitezen."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Tokiko babeskop. pasahitza"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Une honetan, ordenagailuko babeskopia osoak ez daude babestuta."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Ukitu ordenagailuko babeskopia osoak egiteko pasahitza aldatzeko edo kentzeko"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Babeskopiaren pasahitz berria ezarri da"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Pasahitz berria eta berrespena ez datoz bat"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Ezin izan da babeskopiaren pasahitza ezarri"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Bizia (balio lehenetsia)"</item>
+ <item msgid="8446070607501413455">"Naturala"</item>
+ <item msgid="6553408765810699025">"Estandarra"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Kolore hobetuak"</item>
+ <item msgid="8280754435979370728">"Kolore naturalak, bizitza errealean bezala"</item>
+ <item msgid="5363960654009010371">"Eduki digitalerako optimizatutako koloreak"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplikazio inaktiboak"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktibo. Aldatzeko, ukitu hau."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktibo. Aldatzeko, ukitu hau."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Abian diren zerbitzuak"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ikusi eta kontrolatu unean abian diren zerbitzuak"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Gau modua"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desgaituta"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Beti aktibatuta"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatikoa"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Eman fitxategietan oinarritutako enkriptatzea"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Enkriptatu…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Fitxategietan oinarritutako enkriptatzea dauka dagoeneko"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Fitxategietan oinarritutako enkriptatzea ematea"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Eman datuen partizioari fitxategietan oinarritutako enkriptatzea.\n Kontuz!! Ekintza horrek ezabatu egingo ditu datu guztiak.\n Eginbidearen alpha bertsioa da; beraz, baliteke behar bezala ez funtzionatzea.\n Aurrera egiteko, sakatu \"Ezabatu eduki guztia eta enkriptatu…\"."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Ezabatu eduki guztia eta enkriptatu…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Irudiaren kolore modua"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Erabili sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desgaituta"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Ikusmen-monokromia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Daltonismoa (gorri-berdeak)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanopia (gorri-berdeak)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanopia (urdin-horia)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Kolore-zuzenketa"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Eginbidea esperimentala da eta eragina izan dezake funtzionamenduan."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> hobespena gainjarri zaio"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 1781c79..d75280b 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"مسدود شده"</item>
<item msgid="1805837518286731242">"جلوگیری موقت از اتصال ضعیف"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"هرگز بررسی نشود"</item>
+ <item msgid="6042769699089883931">"فقط بررسی محتوای DRM"</item>
+ <item msgid="9174900380056846820">"همیشه بررسی شود"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"هرگز از بررسی HDCP استفاده نشود"</item>
+ <item msgid="3878793616631049349">"استفاده از بررسی HDCP فقط برای محتوای DRM"</item>
+ <item msgid="45075631231212732">"همیشه از بررسی HDCP استفاده شود"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"۶۴ کیلوبایت"</item>
+ <item msgid="505611754508988476">"۲۵۶ کیلوبایت"</item>
+ <item msgid="6361286924268716397">"۱ مگابایت"</item>
+ <item msgid="6405203239560695266">"۴ مگابایت"</item>
+ <item msgid="3025431211013424097">"۱۶ مگابایت"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"۶۴ کیلوبایت"</item>
+ <item msgid="3534782711045262344">"۲۵۶ کیلوبایت"</item>
+ <item msgid="8085867209202153403">"۱ مگابایت"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"۶۴K در حافظه موقت ثبت"</item>
+ <item msgid="2822309747675758628">"۲۵۶Kدر حافظه موقت ثبت"</item>
+ <item msgid="6699306198357496731">"۱Mدر حافظه موقت ثبت"</item>
+ <item msgid="5748528643937500349">"۴M در حافظه موقت ثبت"</item>
+ <item msgid="1978629051085111592">"۱۶M در حافظه موقت ثبت"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"پویانمایی خاموش"</item>
+ <item msgid="6624864048416710414">"مقیاس پویانمایی 0.5x"</item>
+ <item msgid="2219332261255416635">"مقیاس پویانمایی 1x"</item>
+ <item msgid="3544428804137048509">"مقیاس پویانمایی 1.5x"</item>
+ <item msgid="3110710404225974514">"مقیاس پویانمایی 2x"</item>
+ <item msgid="4402738611528318731">"مقیاس پویانمایی 5x"</item>
+ <item msgid="6189539267968330656">"مقیاس پویانمایی 10X"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"پویانمایی خاموش"</item>
+ <item msgid="3375781541913316411">"مقیاس پویانمایی 0.5x"</item>
+ <item msgid="1991041427801869945">"مقیاس پویانمایی 1x"</item>
+ <item msgid="4012689927622382874">"مقیاس پویانمایی 1.5x"</item>
+ <item msgid="3289156759925947169">"مقیاس پویانمایی 2x"</item>
+ <item msgid="7705857441213621835">"مقیاس پویانمایی 5x"</item>
+ <item msgid="6660750935954853365">"مقیاس پویانمایی 10X"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"پویانمایی خاموش"</item>
+ <item msgid="1138649021950863198">"مقیاس پویانمایی 0.5 برابر"</item>
+ <item msgid="4394388961370833040">"مقیاس پویانمایی 1 برابر"</item>
+ <item msgid="8125427921655194973">"مقیاس پویانمایی 1.5 برابر"</item>
+ <item msgid="3334024790739189573">"مقیاس پویانمایی 2 برابر"</item>
+ <item msgid="3170120558236848008">"مقیاس پویانمایی 5 برابر"</item>
+ <item msgid="1069584980746680398">"مقیاس پویانمایی 10 برابر"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"هیچکدام"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ایمن)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ایمن)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ایمن)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ایمن)"</item>
+ <item msgid="3547211260846843098">"4K (ارتقا یافته)"</item>
+ <item msgid="5411365648951414254">"4K (ارتقا یافته، ایمن)"</item>
+ <item msgid="1311305077526792901">"720p، 1080p (صفحهنمایش دوتایی)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"هیچکدام"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (تصاویر گرافیکی)"</item>
+ <item msgid="1340692776955662664">"فراخوانی پشته در glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"غیرفعال"</item>
+ <item msgid="675719912558941285">"کشیدن کلیپ قسمت غیر مربعی آبی"</item>
+ <item msgid="1064373276095698656">"هایلایت کردن دستورات کشیدن تستشده به رنگ سبز"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"خاموش"</item>
+ <item msgid="2751513398307949636">"روی صفحه نمایش بهصورت میلهای"</item>
+ <item msgid="1851438178120770973">"در adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"غیرفعال"</item>
+ <item msgid="7688197031296835369">"نمایش نواحی بازنویسی"</item>
+ <item msgid="2290859360633824369">"نمایش مناطق برای مبتلایان به سبزدشواربینی"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"حد استاندارد"</item>
+ <item msgid="4071574792028999443">"بدون پردازش در پسزمینه"</item>
+ <item msgid="4810006996171705398">"حداکثر 1 پردازش"</item>
+ <item msgid="8586370216857360863">"حداکثر 2 پردازش"</item>
+ <item msgid="836593137872605381">"حداکثر 3 پردازش"</item>
+ <item msgid="7899496259191969307">"حداکثر 4 پردازش"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"در حال شارژ شدن"</item>
+ <item msgid="5220695614993094977">"MTP (پروتکل انتقال رسانه)"</item>
+ <item msgid="2086000968159047375">"PTP (پروتکل انتقال تصویر)"</item>
+ <item msgid="7398830860950841822">"RNDIS (اترنت USB)"</item>
+ <item msgid="1718924214939774352">"منبع صوتی"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index fa9983a..2551ba5 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"انتخاب نمایه"</string>
<string name="category_personal" msgid="1299663247844969448">"شخصی"</string>
<string name="category_work" msgid="8699184680584175622">"محل کار"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"گزینههای برنامهنویسان"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"فعال کردن گزینههای برنامهنویس"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"تنظیم گزینههای مربوط به طراحی برنامه"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"گزینههای برنامهنویس برای این کاربر موجود نیست"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"تنظیمات VPN برای این کاربر در دسترس نیست"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"تنظیمات تترینگ برای این کاربر در دسترس نیست"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"تنظیمات نام تقطه دسترسی برای این کاربر در دسترس نیست"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"اشکالزدایی USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"با اتصال USB، حالت اشکالزدایی فعال شود"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"لغو مجوزهای اشکالزدایی USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"میانبر گزارش مشکل"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"نمایش دکمهای در منوی روشن/خاموش برای گرفتن گزارش اشکال"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"بیدار ماندن"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"صفحه هرگز در حین شارژ شدن به حالت خواب نمیرود"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"فعال کردن گزارش تجسس Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ذخیره تمامی بستههای HCI بلوتوث در یک فایل"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"بازکردن سازنده تجهیزات اصلی"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"اجازه دهید قفل بوتلودر باز شود"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"بازکردن سازنده تجهیزات اصلی مجاز (OEM) است؟"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"اخطار: قابلیتهای حفاظتی دستگاه وقتی این تنظیم روشن است در این دستگاه کار نمیکند."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"انتخاب برنامه موقعیت مکانی ساختگی"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"هیچ برنامه موقعیت مکانی ساختگی تنظیم نشده است"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"برنامه موقعیت مکانی ساختگی: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"شبکه"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"گواهینامه نمایش بیسیم"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"فعال کردن گزارشگیری طولانی Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi فعال برای واگذاری به شبکه سلولی"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"اسکنهای رومینگ Wi‑Fi همیشه مجاز است"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"استفاده از کلاینت DHCP قدیمی"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"داده سلولی همیشه فعال"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"مجاز/غیرمجاز کردن اسکنهای رومینگ Wi‑Fi براساس مقدار ترافیک داده موجود در واسط"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"اندازههای حافظه موقت ثبتکننده"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"انتخاب اندازه ثبتکننده در حافظه موقت ثبت"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"انتخاب پیکربندی USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"انتخاب پیکربندی USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"مکانهای کاذب مجاز هستند"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"مکانهای کاذب مجاز هستند"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"فعال کردن بازبینی ویژگی بازدید"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"به جای کلاینت Android DHCP جدید، از کلاینت Lollipop DHCP استفاده کنید."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"داده سلولی همیشه فعال نگه داشته میشود، حتی وقتی Wi-Fi فعال است (برای جابهجایی سریع شبکه)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"اشکالزدایی USB انجام شود؟"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"اشکالزدایی USB فقط برای اهداف برنامهنویسی در نظر گرفته شده است. از آن برای رونوشتبرداری داده بین رایانه و دستگاهتان، نصب برنامهها در دستگاهتان بدون اعلان و خواندن دادههای گزارش استفاده کنید."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"دسترسی به اشکالزدایی USB از تمام رایانههایی که قبلاً مجاز دانستهاید لغو شود؟"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"تنظیمات برنامهنویسی مجاز باشد؟"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"این تنظیمات فقط برای برنامهنویسی در نظر گرفته شده است. ممکن است استفاده از این تنظیمات موجب خرابی یا عملکرد نادرست دستگاه یا برنامههای شما شود."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"تأیید برنامههای نصب شده از طریق USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"برنامههای نصب شده از طریق ADB/ADT را ازنظر رفتار مخاطرهآمیز بررسی کنید."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ترمینال محلی"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"فعال کردن ترمینال برنامه کاربردی که دسترسی به برنامه محلی را پیشنهاد میکند"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"بررسی HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"تنظیم عملکرد بررسی HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"اشکالزدایی"</string>
+ <string name="debug_app" msgid="8349591734751384446">"انتخاب برنامه اشکالزدایی"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"هیچ برنامه اشکالزداییای تنظیم نشده است"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"در حال اشکالزدایی برنامه: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"انتخاب برنامه"</string>
+ <string name="no_application" msgid="2813387563129153880">"هیچ چیز"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"انتظار برای اشکالزدا"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"برنامه اشکالزدایی شده منتظر پیوست شدن اشکالزدا قبل از اجرا است"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ورودی"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"طراحی"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"پردازش سختافزاری سریع"</string>
+ <string name="media_category" msgid="4388305075496848353">"رسانه"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"نظارت"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"حالت شدید فعال شد"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"چشمک زدن صفحه هنگام انجام عملیات طولانی توسط برنامهها در رشته اصلی"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"محل اشارهگر"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"همپوشانی صفحهٔ نمایش با نمایش داده لمسی فعلی"</string>
+ <string name="show_touches" msgid="1356420386500834339">"نمایش تعداد لمسها"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"نمایش بازخورد دیداری برای لمسها"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"نمایش بهروزرسانی سطح"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"هنگام بهروزرسانی سطوح پنجره همه فلش شوند"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"نمایش به روزرسانیهای نمای GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"در طراحی با GPU، نماها در داخل پنجرهها فلش شوند"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"نمایش بهروزرسانیهای لایههای سختافزار"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"وقتی لایههای سختافزاری بهروزرسانی میشوند، به رنگ سبز درآیند"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"اشکالزدایی بازنویسی GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"غیر فعال کردن پوشش HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"همیشه از GPU در ترکیب صفحه استفاده شود"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"شبیهسازی فضای رنگ"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"فعال کردن ردیابیهای OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"غیرفعال کردن مسیریابی صوتی USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"غیرفعال کردن مسیریابی خودکار به وسایل جانبی صوتی USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"نمایش محدودههای طرحبندی"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"نمایش مرزها، حاشیهها و ویژگیهای دیگر کلیپ."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"اجباری کردن چیدمان RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"اجباری کردن چیدمان RTL صفحه برای همه زبانها"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"نمایش میزان استفاده از CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"همپوشانی صفحهٔ نمایش میزان استفاده از CPU فعلی"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"پردازش اجباری GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"استفاده اجباری از GPU برای طراحی دوم"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"اجبار 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"فعال کردن 4X MSAA در برنامههای OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"اشکالزدایی عملکردهای کلیپ غیرمربعی"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"پردازش GPU نمایه"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"مقیاس پویانمایی پنجره"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"مقیاس پویانمایی انتقالی"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"مقیاس طول مدت انیماتور"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"شبیهسازی نمایشگر ثانویه"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"برنامهها"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"فعالیتها نگه داشته نشوند"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"از بین بردن هر فعالیت به محض خروج کاربر از آن"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"محدودیت پردازش در پسزمینه"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"نمایش تمام ANRها"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"نمایش گفتگوی \"برنامه پاسخ نمیدهد\" برای برنامههای پسزمینه"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"اجازه اجباری به برنامههای دستگاه ذخیره خارجی"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"بدون توجه به مقادیر مانیفست، هر برنامهای را برای نوشتن در حافظه خارجی واجد شرایط میکند"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"اجبار فعالیتها به قابل تغییر اندازه بودن"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"بدون درنظر گرفتن مقادیر مانیفست، همه فعالیتها را برای چندپنجره قابل تغییر اندازه میکند."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"گذرواژه پشتیبانگیری محلی"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"پشتیبانگیری کامل رایانه درحال حاضر محافظت نمیشود"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"برای تغییر یا حذف گذرواژه برای نسخههای پشتیبان کامل دسکتاپ لمس کنید"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"گذرواژه جدید نسخهٔ پشتیبان تنظیم شد"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"گذرواژه جدید و تأیید آن با یکدیگر مطابقت ندارند"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"گذرواژه پشتیبانگیری تنظیم نشد"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"پرطروات (پیشفرض)"</item>
+ <item msgid="8446070607501413455">"طبیعی"</item>
+ <item msgid="6553408765810699025">"استاندارد"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"رنگهای پیشرفته"</item>
+ <item msgid="8280754435979370728">"رنگهای طبیعی بههمان صورتی که با چشم دیده میشوند"</item>
+ <item msgid="5363960654009010371">"رنگهای بهینهشده برای محتوای دیجیتالی"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"برنامههای غیرفعال"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"غیرفعال. برای تغییر حالت لمس کنید."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"فعال. برای تغییر حالت لمس کنید."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"سرویسهای در حال اجرا"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"مشاهده و کنترل سرویسهای در حال اجرای فعلی"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"حالت شب"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"غیرفعال است"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"همیشه روشن"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"خودکار"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"تبدیل به رمزگذاری برحسب فایل"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"تبدیل…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"از قبل به رمزگذاری بر حسب فایل تبدیل شده است"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"تبدیل به رمزگذاری مبتنی بر فایل"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"تبدیل پارتیشن دادهای به رمزگذاری مبتنی بر فایل.\n !!هشدار!! این کار تمام دادههایتان را پاک میکند.\n این قابلیت در نسخه آلفا قرار دارد و ممکن است به درستی کار نکند.\n برای ادامه، «پاک کردن و تبدیل…» را فشار دهید."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"پاک کردن و تبدیل…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"حالت رنگ عکس"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"استفاده از sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"غیر فعال"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"تکرنگبینی"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"سبزدشواربینی (قرمز-سبز)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"قرمزدشواربینی (قرمز-سبز)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"آبیدشواربینی (آبی-زرد)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"تصحیح رنگ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"این قابلیت آزمایشی است و ممکن است عملکرد را تحت تأثیر قرار دهد."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"توسط <xliff:g id="TITLE">%1$s</xliff:g> لغو شد"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 76cf49b..40d0787 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Estetty"</item>
<item msgid="1805837518286731242">"Vältetään huonoa yhteyttä tilapäisesti"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Älä tarkista koskaan"</item>
+ <item msgid="6042769699089883931">"Tarkista vain DRM-suojattu sisältö"</item>
+ <item msgid="9174900380056846820">"Tarkista aina"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Älä koskaan käytä HDCP-tarkistusta"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kt"</item>
+ <item msgid="505611754508988476">"256 kt"</item>
+ <item msgid="6361286924268716397">"1 Mt"</item>
+ <item msgid="6405203239560695266">"4 Mt"</item>
+ <item msgid="3025431211013424097">"16 Mt"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kt"</item>
+ <item msgid="3534782711045262344">"256 kt"</item>
+ <item msgid="8085867209202153403">"1 Mt"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kt / lokipuskuri"</item>
+ <item msgid="2822309747675758628">"256 kt / lokipuskuri"</item>
+ <item msgid="6699306198357496731">"1 Mt / lokipuskuri"</item>
+ <item msgid="5748528643937500349">"4 Mt / lokipuskuri"</item>
+ <item msgid="1978629051085111592">"16 Mt / lokipuskuri"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animaatio pois käytöstä"</item>
+ <item msgid="6624864048416710414">"Animaatioasteikko 0,5-kertainen"</item>
+ <item msgid="2219332261255416635">"Animaatioasteikko 1-kertainen"</item>
+ <item msgid="3544428804137048509">"Animaatioasteikko 1,5-kertainen"</item>
+ <item msgid="3110710404225974514">"Animaatioasteikko 2-kertainen"</item>
+ <item msgid="4402738611528318731">"Animaatioasteikko 5-kertainen"</item>
+ <item msgid="6189539267968330656">"Animaatioasteikko 10-kertainen"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animaatio pois käytöstä"</item>
+ <item msgid="3375781541913316411">"Animaatioasteikko 0,5-kertainen"</item>
+ <item msgid="1991041427801869945">"Animaatioasteikko 1-kertainen"</item>
+ <item msgid="4012689927622382874">"Animaatioasteikko 0,5-kertainen"</item>
+ <item msgid="3289156759925947169">"Animaatioasteikko 2-kertainen"</item>
+ <item msgid="7705857441213621835">"Animaatioasteikko 5-kertainen"</item>
+ <item msgid="6660750935954853365">"Animaatioasteikko 10-kertainen"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animaatio pois käytöstä"</item>
+ <item msgid="1138649021950863198">"Animaatioasteikko 0,5-kertainen"</item>
+ <item msgid="4394388961370833040">"Animaatioasteikko 1-kertainen"</item>
+ <item msgid="8125427921655194973">"Animaatioasteikko 1,5-kertainen"</item>
+ <item msgid="3334024790739189573">"Animaatioasteikko 2-kertainen"</item>
+ <item msgid="3170120558236848008">"Animaatioasteikko 5-kertainen"</item>
+ <item msgid="1069584980746680398">"Animaatioasteikko 10-kertainen"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ei mitään"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (turvallinen)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (turvallinen)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (turvallinen)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (turvallinen)"</item>
+ <item msgid="3547211260846843098">"4K (skaalattu)"</item>
+ <item msgid="5411365648951414254">"4K (skaalattu, turvallinen)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (kaksoisnäyttö)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ei mitään"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafiikka)"</item>
+ <item msgid="1340692776955662664">"Kutsu pinoa, jos glGetError tapaht."</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Pois"</item>
+ <item msgid="675719912558941285">"Piirrä ei-suorakulm. leikealue sinisellä"</item>
+ <item msgid="1064373276095698656">"Korosta testatut piirtokom. vihreällä"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Pois käytöstä"</item>
+ <item msgid="2751513398307949636">"Ruudulla palkkeina"</item>
+ <item msgid="1851438178120770973">"Adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Ei käytössä"</item>
+ <item msgid="7688197031296835369">"Näytä päällekkäiset alueet"</item>
+ <item msgid="2290859360633824369">"Näytä alueet puna-vihersokeille näkyvinä"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Vakioraja"</item>
+ <item msgid="4071574792028999443">"Ei taustaprosesseja"</item>
+ <item msgid="4810006996171705398">"Enintään 4 prosessia"</item>
+ <item msgid="8586370216857360863">"Enintään 2 prosessia"</item>
+ <item msgid="836593137872605381">"Enintään 3 prosessia"</item>
+ <item msgid="7899496259191969307">"Enintään 4 prosessia"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Lataaminen"</item>
+ <item msgid="5220695614993094977">"MTP (median siirtoprotokolla)"</item>
+ <item msgid="2086000968159047375">"PTP (kuvan siirtoprotokolla)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB-ethernet)"</item>
+ <item msgid="1718924214939774352">"Äänilähde"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 2037885..8a0e3b5 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Valitse profiili"</string>
<string name="category_personal" msgid="1299663247844969448">"Henkilökohtainen"</string>
<string name="category_work" msgid="8699184680584175622">"Työ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Kehittäjäasetukset"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Ota kehittäjäasetukset käyttöön"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Valitse sovellusten kehittämisasetukset"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Tämä käyttäjä ei voi käyttää kehittäjäasetuksia"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Tämä käyttäjä ei voi käyttää VPN-asetuksia"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tämä käyttäjä ei voi käyttää yhteyden jakamisasetuksia"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Tämä käyttäjä ei voi käyttää APN-asetuksia"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-vianetsintä"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Vianetsintätila USB-liitännän ollessa käytössä"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Peruuta USB-vianetsinnän käyttöoikeudet"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Virheraportin pikakuvake"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Näytä virheraporttipainike virtavalikossa"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Pysy käynnissä"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Näyttö ei sammu puhelimen latautuessa"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ota Bluetoothin HCI-tarkkailuloki käyttöön"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Tallenna kaikki Bluetoothin HCl-paketit tiedostoon"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM:n lukituksen avaus"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Salli käynnistysohjelman lukituksen avaaminen"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Sallitaanko OEM:n lukituksen avaus?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"VAROITUS: laitteen suojaustoiminnot eivät toimi tämän asetuksen ollessa käytössä."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Valitse valesijaintisovellus"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Valesijaintisovellusta ei ole valittu"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Valesijaintisovellus: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Yhteysominaisuudet"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Langattoman näytön sertifiointi"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Käytä Wi-Fin laajennettua lokikirjausta"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressiivinen handover: Wi-Fi-matkapuh."</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Salli Wi-Fi-verkkovierailuskannaus aina"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Käytä vanhaa DHCP-asiakassovellusta"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiilidata on aina käytössä"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Salli/estä Wi-Fi-verkkovierailuskannaus liittymässä esiintyvän dataliikenteen perusteella."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Lokipuskurien koot"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Valitse puskurikohtaiset lokikoot"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Valitse USB-määritykset"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Valitse USB-määritykset"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Salli sijaintien imitointi"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Salli sijaintien imitointi"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Ota attribuuttinäkymän tarkistus käyttöön"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Käytä Lollipopin DHCP-asiakassovellusta Androidin uuden DHCP-asiakassovelluksen sijasta."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Pidä mobiilidata aina käytössä, vaikka Wi-Fi olisi aktiivinen. Tämä mahdollistaa nopeamman vaihtelun verkkojen välillä."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Sallitaanko USB-vianetsintä?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-vianetsintä on tarkoitettu vain kehittäjien käyttöön. Sen avulla voidaan kopioida tietoja tietokoneesi ja laitteesi välillä, asentaa laitteeseesi sovelluksia ilmoittamatta siitä sinulle ja lukea lokitietoja."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Haluatko peruuttaa USB-vianetsinnän käyttöoikeuden kaikilta tietokoneilta, joille olet antanut luvan aiemmin?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Sallitaanko kehittäjäasetukset?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Nämä asetukset on tarkoitettu vain kehityskäyttöön, ja ne voivat aiheuttaa haittaa laitteellesi tai sen sovelluksille."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Tarkista USB:n kautta asennetut"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Tarkista ADB:n/ADT:n kautta asennetut sovellukset haitallisen toiminnan varalta."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Paikallinen pääte"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Ota käyttöön päätesov. joka mahdollistaa paikall. liittymäkäytön"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-tarkistus"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Aseta HDCP-tarkistus"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Vianetsintä"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Valitse vianetsintäsovellus"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Vianetsintäsovellusta ei ole asetettu"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Vianetsintäsovellus: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Valitse sovellus"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ei mitään"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Odota vianetsintää"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Sovellus odottaa vianetsinnän lisäämistä, ja käynnistyy sen jälkeen."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Syöte"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Piirustus"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Laitteistokiihdytetty hahmonnus"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Valvonta"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Tiukka tila käytössä"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Vilkuta näyttöä sovellusten tehdessä pitkiä toimia"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Osoittimen sijainti"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Näytön peittokuva näyttää nykyiset kosketustiedot"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Näytä kosketukset"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Näytä kosketukset visuaalisesti"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Näytä pintapäivitykset"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Väläytä koko ikkunoiden pinnat päivitettäessä"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Näytä GPU:n näytön päiv."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Väläytä ikkunoiden sisältö GPU:lla piirrettäessä"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Näytä laitt.tason päiv."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Näytä laitteistotasot vihreinä niiden päivittyessä"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU-objektien päällekkäisyys"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Poista HW-peittok. käyt."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Käytä GPU:ta näytön koostamiseen"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuloi väriavaruus"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ota OpenGL-jälj. käyttöön"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB-äänireititys pois"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Automaattireititys USB-äänilaitteisiin pois päältä"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Näytä asettelun rajat"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Näytä leikkeiden rajat, marginaalit jne."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Pakota RTL-ulkoasun suunta"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Pakota kaikkien kielten näytön ulkoasun suunnaksi RTL"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Näytä suorittimen käyttö"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Näytön peittokuva näyttää nykyisen suoritinkäytön"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Pakota GPU-hahmonnus"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Käytä GPU:ta 2d-piirtämiseen"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Pakota 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Ota käyttöön 4x MSAA OpenGL ES 2.0 -sovelluksissa"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Korjaa ei-suorakulmaisten leiketoimintojen virheet"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profiilin GPU-hahmonnus"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Ikkuna"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Siirtymä"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animaattori"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuloi toissijaiset näytöt"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Sovellukset"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Älä säilytä toimintoja"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Tuhoa kaikki toiminnot, kun käyttäjä poistuu"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Taustaprosessi"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Näytä kaikki ANR:t"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Näytä Sovellus ei vastaa -ikkuna taustasovell."</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Salli aina ulkoinen tallennus"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Mahdollistaa sovellusten tallentamisen ulkoiseen tall.tilaan luettelosta riippumatta"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Pakota kaikki toiminnot hyväksymään koon muutos"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Pakottaa kaikki toiminnot hyväksymään koon muuttamisen rinnakkaisnäkymään luettelon arvoista riippumatta."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Varmuuskop. salasana"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Tietokoneen kaikkien tietojen varmuuskopiointia ei ole tällä hetkellä suojattu"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Muuta tai vaihda tietokoneen kaikkien tietojen varmuuskopioinnin salasana koskettamalla"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Uusi varasalasana asetettiin"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Uusi salasana ja vahvistus eivät täsmää"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Varasalasanan asetus epäonnistui"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Voimakas (oletus)"</item>
+ <item msgid="8446070607501413455">"Luonnollinen"</item>
+ <item msgid="6553408765810699025">"Normaali"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Tehostetut värit"</item>
+ <item msgid="8280754435979370728">"Ihmissilmän näkemät luonnolliset värit"</item>
+ <item msgid="5363960654009010371">"Digitaaliselle sisällölle parhaiten sopivat värit"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Epäaktiiviset sovellukset"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Epäaktiivinen. Ota käyttöön tai poista käytöstä koskettamalla."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiivinen. Ota käyttöön tai poista käytöstä koskettamalla."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Käynnissä olevat palvelut"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Tarkastele ja hallitse käynnissä olevia palveluita"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Yötila"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Ei käytössä"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Aina käytössä"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automaattinen"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Muunna tiedostojen salaukseksi"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Muunna…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Tiedostot on jo salattu."</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Muunnetaan tiedostopohjaiseksi salaukseksi"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Muunna dataosio tiedostopohjaiseksi salaukseksi.\n Varoitus! Kaikki tiedot poistetaan.\n Tämä ominaisuus on alfavaiheessa eikä välttämättä toimi oikein.\n Jatka painamalla Poista ja muunna…"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Poista ja muunna…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Kuvien värit"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Ota sRGB käyttöön"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Poistettu käytöstä"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromatismi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (puna-vihersokeus)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (puna-vihersokeus)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (sini-keltasokeus)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Värikorjaus"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Tämä ominaisuus on kokeellinen ja voi vaikuttaa suorituskykyyn."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Tämän ohittaa <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 991d824..714dbe4 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqué"</item>
<item msgid="1805837518286731242">"Mauvaise connexion évitée momentanément"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ne jamais vérifier"</item>
+ <item msgid="6042769699089883931">"Vérifier le contenu GDN uniquement"</item>
+ <item msgid="9174900380056846820">"Toujours vérifier"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ne jamais utiliser la vérification HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 ko"</item>
+ <item msgid="505611754508988476">"256 ko"</item>
+ <item msgid="6361286924268716397">"1 Mo"</item>
+ <item msgid="6405203239560695266">"4 Mo"</item>
+ <item msgid="3025431211013424097">"16 Mo"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 ko"</item>
+ <item msgid="3534782711045262344">"256 ko"</item>
+ <item msgid="8085867209202153403">"1 Mo"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"1 ko/tampon journal"</item>
+ <item msgid="2822309747675758628">"256 Ko/tampon journal"</item>
+ <item msgid="6699306198357496731">"1 Mo/tampon journal"</item>
+ <item msgid="5748528643937500349">"4 Mo/tampon journal"</item>
+ <item msgid="1978629051085111592">"16 Mo/tampon journal"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation désactivée"</item>
+ <item msgid="6624864048416710414">"Échelle d\'animation 0,5x"</item>
+ <item msgid="2219332261255416635">"Échelle d\'animation 1x"</item>
+ <item msgid="3544428804137048509">"Échelle d\'animation 1,5x"</item>
+ <item msgid="3110710404225974514">"Échelle d\'animation 2x"</item>
+ <item msgid="4402738611528318731">"Échelle d\'animation 5x"</item>
+ <item msgid="6189539267968330656">"Échelle d\'animation 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation désactivée"</item>
+ <item msgid="3375781541913316411">"Échelle d\'animation 0,5x"</item>
+ <item msgid="1991041427801869945">"Échelle d\'animation 1x"</item>
+ <item msgid="4012689927622382874">"Échelle d\'animation 1,5x"</item>
+ <item msgid="3289156759925947169">"Échelle d\'animation 2x"</item>
+ <item msgid="7705857441213621835">"Échelle d\'animation 5x"</item>
+ <item msgid="6660750935954853365">"Échelle d\'animation 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation désactivée"</item>
+ <item msgid="1138649021950863198">"Échelle d\'animation 0,5x"</item>
+ <item msgid="4394388961370833040">"Échelle d\'animation 1x"</item>
+ <item msgid="8125427921655194973">"Échelle d\'animation 1,5x"</item>
+ <item msgid="3334024790739189573">"Échelle d\'animation 2x"</item>
+ <item msgid="3170120558236848008">"Échelle d\'animation 5x"</item>
+ <item msgid="1069584980746680398">"Échelle d\'animation 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Aucun"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (sécurisé)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (sécurisé)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (sécurisé)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (sécurisé)"</item>
+ <item msgid="3547211260846843098">"4K (adapté à la haute résolution)"</item>
+ <item msgid="5411365648951414254">"4K (adapté haute rés., sécurisé)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (double écran)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Aucun"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (graphismes)"</item>
+ <item msgid="1340692776955662664">"Appeler une pile sur glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Désactivé"</item>
+ <item msgid="675719912558941285">"Dessiner zone de découpage non rectangulaire en bleu"</item>
+ <item msgid="1064373276095698656">"Surligner en vert les commandes de dessin testées"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Désactivé"</item>
+ <item msgid="2751513398307949636">"À l\'écran sous forme de barres"</item>
+ <item msgid="1851438178120770973">"Dans adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Désactivé"</item>
+ <item msgid="7688197031296835369">"Afficher les zones de conflit"</item>
+ <item msgid="2290859360633824369">"Afficher les zones de deutéranomalie"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite standard"</item>
+ <item msgid="4071574792028999443">"Aucun processus en arrière-plan"</item>
+ <item msgid="4810006996171705398">"Un processus maximum"</item>
+ <item msgid="8586370216857360863">"Deux processus maximum"</item>
+ <item msgid="836593137872605381">"Trois processus maximum"</item>
+ <item msgid="7899496259191969307">"Quatre processus maximum"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Charge en cours"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol, protocole de transfert de fichiers multimédias)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol, protocole de transfert d\'images)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Source audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index da22cf9..f2c79de 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Sélectionnez un profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personnel"</string>
<string name="category_work" msgid="8699184680584175622">"Travail"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Options pour les développeurs"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activer les options pour les développeurs"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Définir les options pour le développement de l\'application"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Les options proposées aux développeurs ne sont pas disponibles pour cet utilisateur."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Les paramètres de RPV ne sont pas disponibles pour cet utilisateur"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Les paramètres de partage de connexion ne sont pas disponibles pour cet utilisateur"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Débogage USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Mode débogage lorsqu\'un câble USB est connecté"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Annuler les autorisations relatives au débogage USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Raccourci de rapport de bogue"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afficher un bouton permettant d\'établir un rapport de bogue dans le menu de démarrage"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer le journal HCI Snoop Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturer tous les paquets HCI Bluetooth dans un fichier"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage par le fabricant"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du fichier d\'amorce"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permettre le déverrouillage par le fabricant?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVERTISSEMENT : Les fonctions de protection de l\'appareil ne fonctionneront pas sur cet appareil lorsque ce paramètre est activé."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Sélectionner l\'application de localisation factice"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aucune application de localisation factice définie"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Application de localisation factice : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Réseautage"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certification de l\'affichage sans fil"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. données Wi-Fi détaillées"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Passage forcé du Wi-Fi aux données cellulaires"</string>
+ <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="legacy_dhcp_client" msgid="694426978909127287">"Utiliser l\'ancien client DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Données cellulaires toujours actives"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Autoriser ou non la détection de réseaux Wi-Fi en itinérance en fonction de l\'importance du transfert de données dans l\'interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles des mémoires tampons d\'enregistreur"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Tailles enreg. par tampon journal"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Sélectionnez une configuration USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Sélectionnez une configuration USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Autoriser les positions fictives"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Autoriser les positions fictives"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Activer l\'inspection d\'attribut d\'affichage"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utiliser le client DHCP de Lollipop au lieu du nouveau client DHCP Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Toujours garder les données cellulaires actives, même lorsque le Wi-Fi est activé (pour la commutation rapide entre les réseaux)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Autoriser le débogage USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Le débogage USB est conçu uniquement pour le développement. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données de journal."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Voulez-vous vraiment désactiver l\'accès au débogage USB de tous les ordinateurs précédemment autorisés?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Activer les paramètres de développement?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ces paramètres sont en cours de développement. Ils peuvent endommager votre appareil et les applications qui s\'y trouvent, ou provoquer leur dysfonctionnement."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Vérifier les applis via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifiez que les applications installées par ADB/ADT ne présentent pas de comportement dangereux."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Activer l\'application Terminal permettant l\'accès au shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Vérification HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Config. vérification HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Débogage"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Sélectionner une application à déboguer"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Aucune application à déboguer définie"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Application à déboguer : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Sél. application"</string>
+ <string name="no_application" msgid="2813387563129153880">"Aucune"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Attendre l\'intervention du débogueur"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Avant de s\'exécuter, l\'application déboguée doit attendre que le débogueur soit attaché."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrée"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Dessin"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Accélération matérielle"</string>
+ <string name="media_category" msgid="4388305075496848353">"Médias"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Surveillance"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Mode Strict activé"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Afficher un cadre rouge si le thread principal reste occupé"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Emplacement du curseur"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superposition écran indiquant données actuelles"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Afficher élément sélectionné"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Afficher repère visuel pour éléments sélectionnés"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Affich. mise à jour surface"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Faire clignoter les surfaces à chaque mise à jour"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Afficher mises à jour GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Faire clignoter les éléments dessinés avec le GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mises à jour couches mat."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Couches matérielles en vert une fois mises à jour"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Déboguer les conflits GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Désact. superpos. matér."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Toujours utiliser le GPU pour la composition écran"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuler esp. colorimétrique"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Désact. routage audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Désactiver routage automatique appareils audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Afficher les contours"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Afficher les limites, les marges de clip, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forcer orient. : g. à d."</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forcer l\'orientation: g. à droite (toutes langues)"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Afficher mém. CPU utilisée"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Superposition écran indiquant mémoire CPU utilisée"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forcer le rendu GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forcer l\'utilisation du GPU pour le dessin 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forcer MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Déboguer opérations de découpage non rectangulaire"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Rendu GPU du profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Échelle animation fenêtres"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Échelle anim. transitions"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Échelle durée animation"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simul. affich. secondaires"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Applications"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne pas conserver activités"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Supprimer immédiatement les activités abandonnées"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processus arr.-plan"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Afficher tous les messages «L\'application ne répond pas»"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Afficher « L\'application ne répond plus » pour applis en arrière-plan"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forcer l\'autor. d\'applis sur stockage externe"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Permet enreg. d\'applis sur espace stockage externe"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forcer les activités à être redimensionnables"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permet de redimensionner toutes les activités pour le mode multifenêtre, indépendamment des valeurs du fichier manifeste."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Mot de passe sauvegarde PC"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les sauvegardes complètes sur PC ne sont pas protégées actuellement."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Appuyez pour modifier ou supprimer le mot de passe utilisé pour les sauvegardes complètes sur PC."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Le nouveau mot de passe de secours a bien été défini."</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Le nouveau mot de passe et sa confirmation ne correspondent pas."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Échec de la définition du mot de passe de secours."</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrantes (par défaut)"</item>
+ <item msgid="8446070607501413455">"Naturelles"</item>
+ <item msgid="6553408765810699025">"Standards"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Couleurs améliorées"</item>
+ <item msgid="8280754435979370728">"Couleurs naturelles, comme l\'œil les voit"</item>
+ <item msgid="5363960654009010371">"Couleurs optimisées pour le contenu numérique"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Applications inactives"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactif. Touchez pour changer l\'état."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Actif. Touchez pour changer l\'état."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Services en cours d\'exécution"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Afficher et contrôler les services en cours d\'exécution"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Mode Nuit"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Désactivé"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Toujours actif"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatique"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convertir en chiffrement basé sur un fichier"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convertir..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Déjà chiffré par un fichier"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Conversion en chiffrement basé sur un fichier en cours"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convertir la partition de données en chiffrement basé sur un fichier.\n Avertissement! Cette opération supprimera toutes vos données. \nCette fonctionnalité est en version alpha et peut ne pas fonctionner correctement. \nTouchez « Effacer et convertir » pour continuer."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Effacer et convertir..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mode couleur des images"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utiliser sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Désactivé"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromatisme"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deutéranomalie (rouge/vert)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (rouge/vert)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (bleu/jaune)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correction des couleurs"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Cette fonctionnalité est expérimentale et peut toucher les performances."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Remplacé par <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 050793b..a8bed69 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqué"</item>
<item msgid="1805837518286731242">"Mauvaise connexion évitée momentanément"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ne jamais vérifier"</item>
+ <item msgid="6042769699089883931">"Vérifier le contenu GDN uniquement"</item>
+ <item msgid="9174900380056846820">"Toujours vérifier"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ne jamais utiliser la vérification HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 Ko"</item>
+ <item msgid="505611754508988476">"256 Ko"</item>
+ <item msgid="6361286924268716397">"1 Mo"</item>
+ <item msgid="6405203239560695266">"4 Mo"</item>
+ <item msgid="3025431211013424097">"16 Mo"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 Ko"</item>
+ <item msgid="3534782711045262344">"256 Ko"</item>
+ <item msgid="8085867209202153403">"1 Mo"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 Ko/tampon journal"</item>
+ <item msgid="2822309747675758628">"256 Ko/tampon journal"</item>
+ <item msgid="6699306198357496731">"1 Mo/tampon journal"</item>
+ <item msgid="5748528643937500349">"4 Mo/tampon journal"</item>
+ <item msgid="1978629051085111592">"16 Mo/tampon journal"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animation désactivée"</item>
+ <item msgid="6624864048416710414">"Échelle d\'animation x 0,5"</item>
+ <item msgid="2219332261255416635">"Échelle d\'animation x 1"</item>
+ <item msgid="3544428804137048509">"Échelle d\'animation x 1,5"</item>
+ <item msgid="3110710404225974514">"Échelle d\'animation x 2"</item>
+ <item msgid="4402738611528318731">"Échelle d\'animation x 5"</item>
+ <item msgid="6189539267968330656">"Échelle d\'animation x 10"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animation désactivée"</item>
+ <item msgid="3375781541913316411">"Échelle d\'animation x 0,5"</item>
+ <item msgid="1991041427801869945">"Échelle d\'animation x 1"</item>
+ <item msgid="4012689927622382874">"Échelle d\'animation x 1,5"</item>
+ <item msgid="3289156759925947169">"Échelle d\'animation x 2"</item>
+ <item msgid="7705857441213621835">"Échelle d\'animation x 0,5"</item>
+ <item msgid="6660750935954853365">"Échelle d\'animation x 10"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animation désactivée"</item>
+ <item msgid="1138649021950863198">"Échelle d\'animation x 0,5"</item>
+ <item msgid="4394388961370833040">"Échelle d\'animation x 1"</item>
+ <item msgid="8125427921655194973">"Échelle d\'animation x 1,5"</item>
+ <item msgid="3334024790739189573">"Échelle d\'animation x 2"</item>
+ <item msgid="3170120558236848008">"Échelle d\'animation x 5"</item>
+ <item msgid="1069584980746680398">"Échelle d\'animation x 10"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Aucun"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (sécurisé)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (sécurisé)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (sécurisé)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (sécurisé)"</item>
+ <item msgid="3547211260846843098">"4K (adapté à la haute résolution)"</item>
+ <item msgid="5411365648951414254">"4K (adapté haute résolution, sécu.)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (double écran)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Aucun"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (graphismes)"</item>
+ <item msgid="1340692776955662664">"Appeler une pile sur glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Désactivé"</item>
+ <item msgid="675719912558941285">"Dessiner zone de découpage non rectangulaire en bleu"</item>
+ <item msgid="1064373276095698656">"Surligner en vert les commandes de dessin testées"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Désactivé"</item>
+ <item msgid="2751513398307949636">"À l\'écran sous forme de barres"</item>
+ <item msgid="1851438178120770973">"Dans adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Désactivé"</item>
+ <item msgid="7688197031296835369">"Afficher les zones de conflit"</item>
+ <item msgid="2290859360633824369">"Afficher couleurs de zones adaptées à deutéranomalie"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite standard"</item>
+ <item msgid="4071574792028999443">"Aucun processus en arrière-plan"</item>
+ <item msgid="4810006996171705398">"Un processus maximum"</item>
+ <item msgid="8586370216857360863">"Deux processus maximum"</item>
+ <item msgid="836593137872605381">"Trois processus maximum"</item>
+ <item msgid="7899496259191969307">"Quatre processus maximum"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"En charge"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Source audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index 9609ff9..95e8804 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Sélectionner un profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personnel"</string>
<string name="category_work" msgid="8699184680584175622">"Professionnel"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Options pour les développeurs"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activer les options pour les développeurs"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Définir les options pour le développement de l\'application"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Les options proposées aux développeurs ne sont pas disponibles pour cet utilisateur."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Les paramètres VPN ne sont pas disponibles pour cet utilisateur."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Les paramètres de partage de connexion ne sont pas disponibles pour cet utilisateur."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Les paramètres de point d\'accès ne sont pas disponibles pour cet utilisateur."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Débogage USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Mode débogage lorsqu\'un câble USB est connecté"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Annuler autorisations pour débog. USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Raccourci vers rapport d\'erreur"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afficher un bouton dans le menu de démarrage permettant de créer un rapport d\'erreur"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement."</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer journaux HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Enregistrer tous les paquets HCI Bluetooth dans un fichier"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du chargeur d\'amorçage"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Autoriser le déverrouillage OEM ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVERTISSEMENT : Les fonctionnalités de protection de l\'appareil sont désactivées tant que ce paramètre est activé."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Sélectionner l\'application de position fictive"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aucune application de position fictive définie"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Application de position fictive : \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Mise en réseau"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certification affichage sans fil"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. infos Wi-Fi détaillées"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Passage forcé du Wi-Fi aux données mobiles"</string>
+ <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="legacy_dhcp_client" msgid="694426978909127287">"Utiliser l\'ancien client DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Données mobiles toujours actives"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Autoriser ou non la détection de réseaux Wi-Fi en itinérance en fonction de l\'importance du trafic de données dans l\'interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles mémoires tampons enregistr."</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Tailles enreg. par tampon journal"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Sélectionner une configuration USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Sélectionner une configuration USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Positions fictives"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Autoriser les positions fictives"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Activer inspect. attribut affich."</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utiliser le client DHCP de Lollipop au lieu du nouveau client DHCP Android"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Maintenir l\'état actif des données mobiles, même lorsque le Wi‑Fi est actif (pour changer rapidement de réseau)"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Autoriser le débogage USB ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Le débogage USB est conçu uniquement pour le développement. Utilisez-le pour copier des données entre votre ordinateur et votre appareil, installer des applications sur votre appareil sans notification et lire les données de journal."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Voulez-vous vraiment désactiver l\'accès au débogage USB de tous les ordinateurs précédemment autorisés ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Activer les paramètres de développement ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ces paramètres sont en cours de développement. Ils peuvent endommager votre appareil et les applications qui s\'y trouvent, ou provoquer leur dysfonctionnement."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Vérifier les applis via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Vérifiez que les applications installées par ADB/ADT ne présentent pas de comportement dangereux."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Activer l\'application Terminal permettant l\'accès au shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Vérification HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Config. vérification HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Débogage"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Sélectionner une application à déboguer"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Aucune application à déboguer définie"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Application à déboguer : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Sélectionner une appli"</string>
+ <string name="no_application" msgid="2813387563129153880">"Aucune"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Attendre l\'intervention du débogueur"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Avant de s\'exécuter, l\'application déboguée doit attendre que le débogueur soit attaché."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Saisie"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Tracé"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Accélération matérielle"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimédia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Suivi"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Mode Strict activé"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Afficher un cadre rouge si le thread principal reste occupé"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Emplacement du curseur"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superposition écran indiquant données actuelles"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Afficher élément sélectionné"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Afficher repère visuel pour éléments sélectionnés"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Affich. mise à jour surface"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Faire clignoter les surfaces à chaque mise à jour"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Afficher mises à jour GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Faire clignoter les éléments dessinés avec le GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mises à jour couches matérielles"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Couches matérielles en vert une fois mises à jour"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Déboguer les conflits GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Désactiver superpos. matér."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Toujours utiliser le GPU pour la composition écran"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuler espace colori."</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activer les traces OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Désact. routage audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Désactiver routage auto vers périph. audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Afficher les contours"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Afficher les limites de coupe, les marges, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forcer droite à gauche"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forcer orient. droite à gauche pour toutes langues"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Afficher mém. CPU utilisée"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Superposition écran indiquant mémoire CPU utilisée"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forcer le rendu GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forcer l\'utilisation du GPU pour le dessin 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forcer MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activer MSAA 4x dans les applications OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Déboguer opé. de découpage non rect."</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Rendu GPU du profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Échelle animation fenêtres"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Échelle anim. transitions"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Échelle durée animation"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuler des écrans secondaires"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Applications"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne pas conserver activités"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Supprimer immédiatement les activités abandonnées"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processus arr.-plan"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Afficher tous les messages ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Afficher \"L\'application ne répond plus\" pour applis en arrière-plan"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forcer disponibilité stockage externe pour applis"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Rend possible enregistrement de toute appli sur espace stockage externe, indépendamment valeurs fichier manifeste."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forcer possibilité de redimensionner les activités"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permet de redimensionner toutes les activités pour le mode multifenêtre, indépendamment des valeurs du fichier manifeste."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Mot de passe sauvegarde PC"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Les sauvegardes complètes sur PC ne sont pas protégées actuellement."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Appuyez pour modifier ou supprimer le mot de passe utilisé pour les sauvegardes complètes sur PC."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Le nouveau mot de passe de secours a bien été défini."</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Le nouveau mot de passe et sa confirmation ne correspondent pas."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Échec de la définition du mot de passe de secours."</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Couleurs éclatantes (par défaut)"</item>
+ <item msgid="8446070607501413455">"Couleurs naturelles"</item>
+ <item msgid="6553408765810699025">"Couleurs normales"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Couleurs améliorées"</item>
+ <item msgid="8280754435979370728">"Couleurs naturelles vues par l\'œil"</item>
+ <item msgid="5363960654009010371">"Couleurs optimisées pour les contenus numériques"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Applications inactives"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Application inactive. Appuyez ici pour l\'activer."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Application active. Appuyez ici pour la désactiver."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Services en cours d\'exécution"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Afficher et contrôler les services en cours d\'exécution"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Mode Nuit"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Désactivé"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Toujours activé"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatique"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convertir en chiffrement basé sur un fichier"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convertir…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Déjà chiffré via un fichier"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Conversion en chiffrement basé sur un fichier en cours"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convertir la partition de données en chiffrement basé sur un fichier\n Avertissement ! Cette opération supprimera toutes vos données.\n Cette fonctionnalité est en version alpha et peut ne pas fonctionner correctement.\n Appuyez sur \"Effacer et convertir\" pour continuer."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Effacer et convertir…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mode de couleur des images"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utiliser sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Désactivé"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromatisme"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deutéranomalie (rouge/vert)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (rouge/vert)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (bleu-jaune)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correction couleur"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Cette fonctionnalité est expérimentale et peut affecter les performances."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Remplacé par <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gl-rES/arrays.xml b/packages/SettingsLib/res/values-gl-rES/arrays.xml
index 8122efb..606e6f6 100644
--- a/packages/SettingsLib/res/values-gl-rES/arrays.xml
+++ b/packages/SettingsLib/res/values-gl-rES/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueada"</item>
<item msgid="1805837518286731242">"Evitando conexión deficiente temporalmente"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Non comprobar nunca"</item>
+ <item msgid="6042769699089883931">"Comprobar só contidos DRM"</item>
+ <item msgid="9174900380056846820">"Comprobar sempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Non utilizar nunca a comprobación HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Búfer 64 K rexistro"</item>
+ <item msgid="2822309747675758628">"Búfer 256 K rexist."</item>
+ <item msgid="6699306198357496731">"Búfer 1 M rexistro"</item>
+ <item msgid="5748528643937500349">"Búfer 4 M rexistro"</item>
+ <item msgid="1978629051085111592">"Búfer 16 M rexistro"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animación desactivada"</item>
+ <item msgid="6624864048416710414">"Escala de animación 0,5x"</item>
+ <item msgid="2219332261255416635">"Escala de animación 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animación 1,5x"</item>
+ <item msgid="3110710404225974514">"Escala de animación 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animación 5x"</item>
+ <item msgid="6189539267968330656">"Escala de animación 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animación desactivada"</item>
+ <item msgid="3375781541913316411">"Escala de animación 0,5x"</item>
+ <item msgid="1991041427801869945">"Escala da animación de 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animación 1,5x"</item>
+ <item msgid="3289156759925947169">"Escala de animación 2x"</item>
+ <item msgid="7705857441213621835">"Escala da animación de 5x"</item>
+ <item msgid="6660750935954853365">"Escala da animación de 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animación desactivada"</item>
+ <item msgid="1138649021950863198">"Escala de animación de 0,5x"</item>
+ <item msgid="4394388961370833040">"Escala de animación de 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animación de 1,5x"</item>
+ <item msgid="3334024790739189573">"Escala de animación de 2x"</item>
+ <item msgid="3170120558236848008">"Escala da animación de 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animación de 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ningunha"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480 p (seguro)"</item>
+ <item msgid="1853913333042744661">"720 p"</item>
+ <item msgid="3414540279805870511">"720 p (seguro)"</item>
+ <item msgid="9039818062847141551">"1080 p"</item>
+ <item msgid="4939496949750174834">"1080 p (seguro)"</item>
+ <item msgid="1833612718524903568">"4 K"</item>
+ <item msgid="238303513127879234">"4 K (seguro)"</item>
+ <item msgid="3547211260846843098">"4 K (mellorado)"</item>
+ <item msgid="5411365648951414254">"4 K (mellorado e seguro)"</item>
+ <item msgid="1311305077526792901">"720 p, 1080 p (pantalla dual)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ningún"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gráficos)"</item>
+ <item msgid="1340692776955662664">"Pilla de chamadas en glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desactivado"</item>
+ <item msgid="675719912558941285">"Área recorte non rectangular azul"</item>
+ <item msgid="1064373276095698656">"Resaltar comandos debuxo en verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desactivado"</item>
+ <item msgid="2751513398307949636">"En pantalla en forma de barras"</item>
+ <item msgid="1851438178120770973">"En adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desactivado"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas sobredebuxadas"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas de deuteranomalía"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Límite estándar"</item>
+ <item msgid="4071574792028999443">"Ningún proceso en segundo plano"</item>
+ <item msgid="4810006996171705398">"Como moito 1 proceso"</item>
+ <item msgid="8586370216857360863">"Como moito 2 procesos"</item>
+ <item msgid="836593137872605381">"Como moito 3 procesos"</item>
+ <item msgid="7899496259191969307">"Como moito 4 procesos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Cargando"</item>
+ <item msgid="5220695614993094977">"MTP (protocolo de transferencia multimedia)"</item>
+ <item msgid="2086000968159047375">"PTP (protocolo de transferencia de imaxes)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Fonte de audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl-rES/strings.xml
index ffede7e..d7ef503 100644
--- a/packages/SettingsLib/res/values-gl-rES/strings.xml
+++ b/packages/SettingsLib/res/values-gl-rES/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Seleccionar perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Persoal"</string>
<string name="category_work" msgid="8699184680584175622">"Traballo"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opcións de programador"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activar opcións de programador"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Definir as opcións de desenvolvemento de aplicacións"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"As opcións do programador non están dispoñibles para este usuario"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"A configuración da VPN non está dispoñible para este usuario"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"A configuración da ancoraxe non está dispoñible para este usuario"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"A configuración do nome do punto de acceso non está dispoñible para este usuario"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuración de USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuración de erros cando o USB está conectado"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar as autorizacións de depuración USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atallo do informe de erros"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar un botón no menú de acendido para crear un informe de erros"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"A pantalla nunca estará en modo de suspensión durante a carga"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activar rexistro de busca HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturar todos os paquetes HCI Bluetooth nun ficheiro"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo do OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que se desbloqueo o cargador de inicio"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Queres permitir o desbloqueo do OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVISO: As funcións de protección do dispositivo non funcionarán neste dispositivo se está activada esta configuración."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Seleccionar aplicación de localización simulada"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Non se definiu aplicación de localización simulada"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicación de localización simulada: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificado de visualización sen fíos"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Activar rexistro detallado da wifi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Entrega agresiva de wifi a móbil"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre buscas de itinerancia da wifi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usar cliente DHCP herdado"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Datos móbiles sempre activados"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/Non permitir buscas de itinerancia da wifi baseadas na cantidade de tráfico de datos presente na interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de rexistrador"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Seleccionar tamaños por búfer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleccionar configuración USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleccionar configuración USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Permitir localizacións falsas"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permite localizacións falsas"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Activar a inspección de atributos de visualización"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utiliza o cliente DHCP de Lollipop en lugar do novo cliente DHCP de Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantén sempre os datos móbiles activos, aínda que a wifi estea activada (para un rápido cambio de rede)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Queres permitir a depuración USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"A depuración de erros USB está deseñada unicamente para fins de programación. Utilízaa para copiar datos entre o ordenador e o dispositivo, instalar aplicacións no dispositivo sen enviar notificacións e ler os datos do rexistro."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Queres revogar o acceso á depuración USB desde todos os ordenadores que autorizaches previamente?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Permitir a configuración de programación?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Esta configuración só está destinada á programación. Esta pode provocar que o dispositivo e as aplicacións fallen ou se comporten incorrectamente."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicacións por USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Comprobar as aplicacións instaladas a través de ADB/ADT para detectar comportamento perigoso."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Activa a aplicación terminal que ofrece acceso ao shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Comprobación HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Definir comprobación HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuración"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Seleccionar aplicación de depuración"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Non hai ningunha aplicación de depuración definida"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplicación de depuración: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Seleccionar aplicación"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nada"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Agardar polo depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"A aplicación depurada agarda a que o depurador se conecte antes de executarse"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Debuxo"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Procesamento acelerado mediante hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Supervisión"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo estrito activado"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Pestanexa se aplicacións tardan moito no proceso principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Localización do punteiro"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Superpoñer datos dos toques na pantalla"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostrar toques"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostra a información visual dos toques"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Cambios de superficie"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Iluminar superficies de ventás ao actualizarse"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Actualizacións GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Iluminar vistas das ventás creadas con GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ver actualizacións capas"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Iluminar capas hardware en verde ao actualizarse"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar sobredebuxo GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desact. superposicións HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizar sempre GPU para a composición da pantalla"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular o espazo da cor"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Activar rastros OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desactivar enr. audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desactivar enrutamento aut. a periférico audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar límites de deseño"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostra os límites dos clips, as marxes, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forzar dirección do deseño RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forza a dirección de pantalla a RTL (dereita a esquerda) para todas as configuración rexionais"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar uso da CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Superpoñer o uso da CPU na pantalla"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forzar procesamento GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forzar o uso de GPU para o debuxo en 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forzar MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activar MSAA 4x en aplicacións OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operacións recorte non rectangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Perfil procesamento GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala animación da ventá"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. transición"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala duración animador"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular pantallas secundarias"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicacións"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Non manter actividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruír actividades cando o usuario non as use"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Límite proceso 2º plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Informa que aplicación segundo plano non responde"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forzar permiso de aplicacións de forma externa"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Fai que calquera aplicación se poida escribir nun almacenamento externo, independentemente dos valores expresados"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forzar o axuste do tamaño das actividades"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permite axustar o tamaño de todas as actividades para o modo de varias ventás, independentemente dos valores definidos."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Contrasinal para copias"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"As copias de seguridade de ordenador completas non están protexidas"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toca para cambiar ou eliminar o contrasinal para as copias de seguranza completas do escritorio"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Novo contrasinal de copia de seguranza definido"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"O contrasinal novo e a confirmación non coinciden"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Erro ao definir un contrasinal de copia de seguranza"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Brillante (predeterminado)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Estándar"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Cores melloradas"</item>
+ <item msgid="8280754435979370728">"Cores naturais tal e o como se ven"</item>
+ <item msgid="5363960654009010371">"Cores optimizadas para contido dixital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicacións inactivas"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Aplicación inactiva. Toca para activala."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aplicación activa. Toca para desactivala."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Servizos en execución"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver e controlar servizos actualmente en execución"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desactivado"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre activada"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converter no encriptado baseado en ficheiros"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converter..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Xa se encriptou o ficheiro"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Convertendo no encriptado baseado en ficheiros"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converte a partición de datos nun encriptado baseado en ficheiros.\n Advertencia: Esta acción borrará todos os datos.\n Esta función é alfa e quizais non funcione correctamente.\n Toca Borrar e converter... para continuar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Borrar e converter..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de cor da imaxe"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utiliza sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desactivado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromía"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalía (vermello-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalía (vermello-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalía (azul-amarelo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Corrección da cor"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Esta función é experimental e pode afectar ao rendemento."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Anulado por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-gu-rIN/arrays.xml b/packages/SettingsLib/res/values-gu-rIN/arrays.xml
index 0c9e673..c7d62c5 100644
--- a/packages/SettingsLib/res/values-gu-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-gu-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"અવરોધિત"</item>
<item msgid="1805837518286731242">"અસ્થાયી રૂપે નબળા કનેક્શનને ટાળી રહ્યું છે"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ક્યારેય તપાસશો નહીં"</item>
+ <item msgid="6042769699089883931">"ફક્ત DRM સામગ્રી માટે તપાસો"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"લૉગ બફર દીઠ 64K"</item>
+ <item msgid="2822309747675758628">"લૉગ દીઠ 256K બફર"</item>
+ <item msgid="6699306198357496731">"લૉગ બફર દીઠ 1M"</item>
+ <item msgid="5748528643937500349">"લૉગ બફર દીઠ 4M"</item>
+ <item msgid="1978629051085111592">"પ્રતિ લૉગ બફર 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"એનિમેશન બંધ"</item>
+ <item msgid="6624864048416710414">"એનિમેશન સ્કેલ .5x"</item>
+ <item msgid="2219332261255416635">"એનિમેશન સ્કેલ 1x"</item>
+ <item msgid="3544428804137048509">"એનિમેશન સ્કેલ 1.5x"</item>
+ <item msgid="3110710404225974514">"એનિમેશન સ્કેલ 2x"</item>
+ <item msgid="4402738611528318731">"એનિમેશન સ્કેલ 5x"</item>
+ <item msgid="6189539267968330656">"એનિમેશન સ્કેલ 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"એનિમેશન બંધ"</item>
+ <item msgid="3375781541913316411">"એનિમેશન સ્કેલ .5x"</item>
+ <item msgid="1991041427801869945">"એનિમેશન સ્કેલ 1x"</item>
+ <item msgid="4012689927622382874">"એનિમેશન સ્કેલ 1.5x"</item>
+ <item msgid="3289156759925947169">"એનિમેશન સ્કેલ 2x"</item>
+ <item msgid="7705857441213621835">"એનિમેશન સ્કેલ 5x"</item>
+ <item msgid="6660750935954853365">"એનિમેશન સ્કેલ 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"એનિમેશન બંધ"</item>
+ <item msgid="1138649021950863198">"એનિમેશન સ્કેલ .5x"</item>
+ <item msgid="4394388961370833040">"એનિમેશન સ્કેલ 1x"</item>
+ <item msgid="8125427921655194973">"એનિમેશન સ્કેલ 1.5x"</item>
+ <item msgid="3334024790739189573">"એનિમેશન સ્કેલ 2x"</item>
+ <item msgid="3170120558236848008">"એનિમેશન સ્કેલ 5x"</item>
+ <item msgid="1069584980746680398">"એનિમેશન સ્કેલ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"કોઈ નહીં"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (સુરક્ષિત)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (સુરક્ષિત)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (સુરક્ષિત)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (સુરક્ષિત)"</item>
+ <item msgid="3547211260846843098">"4K (ઉચ્ચ સ્તરીય)"</item>
+ <item msgid="5411365648951414254">"4K (ઉચ્ચ સ્તરીય, સુરક્ષિત)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (દ્વિ સ્ક્રીન)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"કોઈ નહીં"</item>
+ <item msgid="9089630089455370183">"લૉગકેટ"</item>
+ <item msgid="5397807424362304288">"Systrace (ગ્રાફિક્સ)"</item>
+ <item msgid="1340692776955662664">"glGetError પર સ્ટેકને કૉલ કરો"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"બંધ"</item>
+ <item msgid="675719912558941285">"બિન-લંબચોરસ ક્લિપ પ્રદેશને વાદળીમાં દોરો"</item>
+ <item msgid="1064373276095698656">"પરીક્ષણ કરેલ ડ્રોઇંગ આદેશો લીલામાં હાઇલાઇટ કરો"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"બંધ"</item>
+ <item msgid="2751513398307949636">"બાર્સ તરીકે સ્ક્રીન પર"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo માં"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"બંધ"</item>
+ <item msgid="7688197031296835369">"ઓવરડ્રો ક્ષેત્રો બતાવો"</item>
+ <item msgid="2290859360633824369">"Deuteranomaly માટેના ક્ષેત્રો બતાવો"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"માનક સીમા"</item>
+ <item msgid="4071574792028999443">"કોઈ પૃષ્ઠભૂમિ પ્રક્રિયાઓ નથી"</item>
+ <item msgid="4810006996171705398">"સૌથી વધુ 1 પ્રક્રિયા"</item>
+ <item msgid="8586370216857360863">"સૌથી વધુ 2 પ્રક્રિયા"</item>
+ <item msgid="836593137872605381">"વધુમાં વધુ 3 પ્રક્રિયાઓ"</item>
+ <item msgid="7899496259191969307">"વધુમાં વધુ 4 પ્રક્રિયાઓ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ચાર્જિંગ"</item>
+ <item msgid="5220695614993094977">"MTP (મીડિયા ટ્રાન્સફર પ્રોટોકોલ)"</item>
+ <item msgid="2086000968159047375">"PTP (પિક્ચર ટ્રાન્સફર પ્રોટોકોલ)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ઇથરનેટ)"</item>
+ <item msgid="1718924214939774352">"ઑડિઓ સ્રોત"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu-rIN/strings.xml
index d515899..d4db078 100644
--- a/packages/SettingsLib/res/values-gu-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-gu-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"પ્રોફાઇલ પસંદ કરો"</string>
<string name="category_personal" msgid="1299663247844969448">"વ્યક્તિગત"</string>
<string name="category_work" msgid="8699184680584175622">"કાર્યાલય"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"વિકાસકર્તાનાં વિકલ્પો"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"વિકાસકર્તાનાં વિકલ્પો સક્ષમ કરો"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"એપ્લિકેશન વિકાસ માટે વિકલ્પો સેટ કરો"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"આ વપરાશકર્તા માટે વિકાસકર્તા વિકલ્પો ઉપલબ્ધ નથી"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"આ વપરાશકર્તા માટે VPN સેટિંગ્સ ઉપલબ્ધ નથી"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"આ વપરાશકર્તા માટે ટિથરિંગ સેટિંગ્સ ઉપલબ્ધ નથી"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"અૅક્સેસ પોઇન્ટનું નામ સેટિંગ્સ આ વપરાશકર્તા માટે ઉપલબ્ધ નથી"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ડીબગિંગ"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"જ્યારે USB કનેક્ટ કરેલ હોય ત્યારે ડીબગ મોડ"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ડીબગિંગ પ્રમાણીકરણોને રદબાતલ કરો"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"બગ રિપોર્ટ શોર્ટકટ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"બગ રિપોર્ટ લેવા માટે પાવર મેનૂમાં એક બટન બતાવો"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"જાગૃત રહો"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ચાર્જિંગ દરમિયાન સ્ક્રીન ક્યારેય નિષ્ક્રિય થશે નહીં"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI સ્નૂપ લૉગ સક્ષમ કરો"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ફાઇલમાં તમામ Bluetooth HCI પૅકેટ્સ કેપ્ચર કરો"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM અનલૉકિંગ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"બુટલોડર અનલૉક કરવાની મંજૂરી આપો"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ને અનલૉક કરવાની મંજૂરી આપીએ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ચેતવણી: જ્યારે આ સેટિંગ ચાલુ હોય ત્યારે આ ઉપકરણ પર ઉપકરણ સંરક્ષણ સુવિધાઓ કાર્ય કરશે નહીં."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"મોક સ્થાન એપ્લિકેશન પસંદ કરો"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"કોઈ મોક સ્થાન એપ્લિકેશન સેટ કરાયેલ નથી"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"મોક સ્થાન એપ્લિકેશન: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"નેટવર્કિંગ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"બિનતારી પ્રદર્શન પ્રમાણન"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi વર્બોઝ લૉગિંગ સક્ષમ કરો"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"સેલ્યુલર હેન્ડઓવર પર એગ્રેસિવ Wi‑Fi"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"હંમેશા Wi‑Fi રોમ સ્કૅન્સને મંજૂરી આપો"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"લેગેસી DHCP ક્લાઇન્ટનો ઉપયોગ કરો"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"સેલ્યુલર ડેટા હંમેશા સક્રિય"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ઇન્ટરફેસ પર હાજર ડેટા ટ્રાફિકના પ્રમાણનાં આધારે Wi‑Fi રોમ સ્કૅન્સને મંજૂરી આપો/નામંજૂર કરો"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"લોગર બફર કદ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"લૉગ દીઠ લૉગર કદ બફર પસંદ કરો"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB ગોઠવણી પસંદ કરો"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB ગોઠવણી પસંદ કરો"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"મોક સ્થાનોની મંજૂરી આપો"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"મોક સ્થાનોની મંજૂરી આપો"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"લક્ષણ નિરીક્ષણ જોવાનું સક્ષમ કરો"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"નવા Android DHCP ક્લાઇન્ટને બદલે Lollipop પરના DHCP ક્લાઇન્ટનો ઉપયોગ કરો."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi સક્રિય હોય ત્યારે પણ, હંમેશા મોબાઇલ ડેટાને સક્રિય રાખો (ઝડપી નેટવર્ક સ્વિચિંગ માટે)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ડિબગિંગને મંજૂરી આપીએ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ડિબગીંગ ફક્ત વિકાસ હેતુઓ માટે જ બનાવાયેલ છે. તેનો ઉપયોગ તમારા કમ્પ્યુટર અને તમારા ઉપકરણ વચ્ચે ડેટાને કૉપિ કરવા, સૂચના વગર તમારા ઉપકરણ પર એપ્લિકેશનો ઇન્સ્ટોલ કરવા અને લૉગ ડેટા વાંચવા માટે કરો."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"તમે અગાઉ અધિકૃત કરેલા તમામ કમ્પ્યુટર્સમાંથી USB ડિબગિંગ પરની અૅક્સેસ રદબાતલ કરીએ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"વિકાસ સેટિંગ્સને મંજૂરી આપીએ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"આ સેટિંગ્સ ફક્ત વિકાસનાં ઉપયોગ માટે જ હેતુબદ્ધ છે. તે તમારા ઉપકરણ અને તેના પરની એપ્લિકેશન્સનાં ભંગ થવા અથવા ખરાબ વર્તનનું કારણ બની શકે છે."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB પર એપ્લિકેશનો ચકાસો"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"હાનિકારક વર્તણૂંક માટે ADB/ADT મારફતે ઇન્સ્ટોલ કરવામાં આવેલી એપ્લિકેશનો તપાસો."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"સ્થાનિક ટર્મિનલ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"સ્થાનિક શેલ અૅક્સેસની ઑફર કરતી ટર્મિનલ એપ્લિકેશનને સક્ષમ કરો"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP તપાસણી"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP તપાસણીની વર્તણૂક બદલો"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ડીબગિંગ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ડીબગ એપ્લિકેશન પસંદ કરો"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"કોઇ ડીબગ એપ્લિકેશન સેટ કરેલી નથી"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"એપ્લિકેશનને ડીબગ કરી રહ્યું છે: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"એપ્લિકેશન પસંદ કરો"</string>
+ <string name="no_application" msgid="2813387563129153880">"કંઈ નહીં"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ડીબગર માટે રાહ જુઓ"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ડીબગ કરેલ એપ્લિકેશનો ક્રિયાન્વિત થતા પહેલાં ડીબગર જોડાઈ તેની રાહ જુએ છે"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ઇનપુટ"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"રેખાંકન"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"હાર્ડવેર પ્રવેગક રેન્ડરિંગ"</string>
+ <string name="media_category" msgid="4388305075496848353">"મીડિયા"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"નિરિક્ષણ કરી રહ્યું છે"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"સ્ટ્રિક્ટ મોડ સક્ષમ કરેલ છે"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"જ્યારે મુખ્ય થ્રેડ પર એપ્લિકેશનો લાંબી કામગીરીઓ કરે ત્યારે સ્ક્રીનને ફ્લેશ કરો"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"પોઇન્ટર સ્થાન"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"વર્તમાન ટચ ડેટા દર્શાવતું સ્ક્રીન ઓવરલે"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ટચ બતાવો"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ટચેઝ માટે દૃશ્યાત્મક પ્રતિસાદ બતાવો"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"સપાટી અપડેટ્સ બતાવો"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"જ્યારે તે અપડેટ થાય ત્યારે સમગ્ર વિંડો સપાટીને ફ્લેશ કરો"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU દૃશ્ય અપડેટ્સ બતાવો"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU સાથે દોરાઈ ત્યારે વિંડોઝની અંદરના દ્રશ્યોને પ્રકાશિત કરો"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"હાર્ડવેર સ્તરોનાં અપડેટ્સ બતાવો"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"હાર્ડવેર સ્તરો અપડેટ થાય ત્યારે તેને લીલા રંગથી પ્રકાશિત કરો"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ઓવરડ્રો ડીબગ કરો"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ઓવરલે અક્ષમ કરો"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"સ્ક્રીન જોડવા માટે હંમેશાં GPU નો ઉપયોગ કરો"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"રંગ સ્થાનનું અનુકરણ કરો"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ટ્રેસેસ સક્ષમ કરો"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ઑડિઓ રૂટિંગ અક્ષમ કરો"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ઑડિઓ પેરિફિરલ્સ પર સ્વચલિત રાઉટિંગને અક્ષમ કરો"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"લેઆઉટ બાઉન્ડ્સ બતાવો"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ક્લિપ બાઉન્ડ્સ, હાંસિયાં વગેરે બતાવો."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL લેઆઉટ દિશા નિર્દેશની ફરજ પાડો"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"તમામ લૉકેલ્સ માટે સ્ક્રીન લેઆઉટ દિશા નિર્દેશને RTL ની ફરજ પાડો"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU સંગ્રહ બતાવો"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"વર્તમાન CPU વપરાશ દર્શાવતું સ્ક્રીન ઓવરલે"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU રેન્ડરિંગની ફરજ પાડો"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2જા રેખાંકન માટે GPU ના ઉપયોગની ફરજ પાડો"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ને ફરજ પાડો"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 એપ્લિકેશન્સમાં 4x MSAA સક્ષમ કરો"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"બિન-લંબચોરસ ક્લિપ કામગીરી ડીબગ કરો"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"પ્રોફાઇલ GPU પ્રદર્શિત થાય છે"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"વિંડો એનિમેશન સ્કેલ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"સંક્રમણ એનિમેશન સ્કેલ"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"એનિમેટર અવધિ સ્કેલ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ગૌણ ડિસ્પ્લેનુ અનુકરણ કરો"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"એપ્લિકેશનો"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"પ્રવૃત્તિઓ રાખશો નહીં"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"જેવો વપરાશકર્તા તેને છોડે, તરત જ દરેક પ્રવૃત્તિ નષ્ટ કરો"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"પૃષ્ઠભૂમિ પ્રક્રિયા સીમા"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"બધા ANR બતાવો"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"પૃષ્ઠભૂમિ એપ્લિકેશનો માટે એપ્લિકેશન પ્રતિસાદ આપતી નથી સંવાદ બતાવો"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"બાહ્ય પર એપ્લિકેશનોને મંજૂરી આપવાની ફરજ પાડો"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"મેનિફેસ્ટ મૂલ્યોને ધ્યાનમાં લીધા સિવાય, કોઈપણ એપ્લિકેશનને બાહ્ય સ્ટોરેજ પર લખાવા માટે લાયક બનાવે છે"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"પ્રવૃત્તિઓને ફરીથી કદ યોગ્ય થવા માટે ફરજ પાડો"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"તમામ પ્રવૃત્તિઓને મલ્ટી-વિંડો માટે ફરીથી કદ બદલી શકે તેવી બનાવે છે, મેનીફેસ્ટ મુલ્યોને ધ્યાનમાં લીધા સિવાય."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ડેસ્કટૉપ બેકઅપ પાસવર્ડ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ડેસ્કટૉપ સંપૂર્ણ બેકઅપ હાલમાં સુરક્ષિત નથી"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ડેસ્કટૉપ સંપૂર્ણ બેકઅપ્સ માટેનો પાસવર્ડ બદલવા અથવા દૂર કરવા માટે ટચ કરો"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"નવો બેકઅપ પાસવર્ડ સેટ કર્યો છે"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"નવો પાસવર્ડ અને પુષ્ટિકરણ મેળ ખાતા નથી"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"નિષ્ફળતા સેટિંગ બેકઅપ પાસવર્ડ"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"વાઇબ્રન્ટ (ડિફોલ્ટ)"</item>
+ <item msgid="8446070607501413455">"કુદરતી"</item>
+ <item msgid="6553408765810699025">"માનક"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"વધારેલ રંગો"</item>
+ <item msgid="8280754435979370728">"આંખો વડે જોઈ શકાતાં કુદરતી રંગો"</item>
+ <item msgid="5363960654009010371">"ડિજિટલ સામગ્રી માટે ઓપ્ટિમાઇઝ કરાયેલા રંગો"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"નિષ્ક્રિય એપ્લિકેશનો"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"નિષ્ક્રિય. ટોગલ કરવા માટે ટચ કરો."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"સક્રિય. ટોગલ કરવા માટે ટચ કરો."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"ચાલુ સેવાઓ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"હાલમાં ચાલતી સેવાઓ જુઓ અને નિયંત્રિત કરો"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"રાત્રિ મોડ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"અક્ષમ કરેલ"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"હંમેશાં ચાલુ"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"સ્વચલિત"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ફાઇલ એન્ક્રિપ્શનમાં રૂપાંતરિત કરો"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"રૂપાંતરિત કરો..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ફાઇલ પહેલેથી જ એન્ક્રિપ્ટ કરેલ છે"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ફાઇલ આધારિત એન્ક્રિપ્શનમાં રૂપાંતરિત કરી રહ્યાં છીએ"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ડેટા પાર્ટિશનને ફાઇલ આધારિત એન્ક્રિપ્શનમાં રૂપાંતરિત કરો.\n !!ચેતવણી!! આ તમારો બધો ડેટા કાઢી નાખશે.\n આ સુવિધા આલ્ફા છે અને યોગ્ય રીતે કામ ન કરે તેવું બની શકે.\n ચાલુ રાખવા માટે ‘સાફ અને રૂપાંતરિત કરો...’ દબાવો."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"સાફ અને રૂપાંતરિત કરો..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ચિત્ર રંગ મોડ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB નો ઉપયોગ કરો"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"અક્ષમ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"મોનોક્રોમેસી"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"ડીયુટેરેનોમલી (લાલ-લીલો)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"પ્રોટેનોમલી (લાલ-લીલો)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ટ્રિટાનોમેલી(વાદળી-પીળો)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"રંગ સુધારણા"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"આ સુવિધા પ્રાયોગિક છે અને કામગીરી પર અસર કરી શકે છે."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> દ્વારા ઓવરરાઇડ થયું"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index ec1c57f..883e997 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"अवरोधित"</item>
<item msgid="1805837518286731242">"खराब कनेक्शन को अस्थायी रूप से अनदेखा कर रहा है"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"कभी नही जांचें"</item>
+ <item msgid="6042769699089883931">"केवल DRM सामग्री जांचें"</item>
+ <item msgid="9174900380056846820">"हमेशा जांचें"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"कभी भी HDCP जांच का उपयोग न करें"</item>
+ <item msgid="3878793616631049349">"HDCP जांच का उपयोग केवल DRM सामग्री के लिए करें"</item>
+ <item msgid="45075631231212732">"हमेशा HDCP जांच का उपयोग करें"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K प्रति लॉग बफ़र"</item>
+ <item msgid="2822309747675758628">"256K प्रति लॉग बफ़र"</item>
+ <item msgid="6699306198357496731">"1M प्रति लॉग बफ़र"</item>
+ <item msgid="5748528643937500349">"4M प्रति लॉग बफ़र"</item>
+ <item msgid="1978629051085111592">"16M प्रति लॉग बफ़र"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"एनिमेशन बंद"</item>
+ <item msgid="6624864048416710414">"एनिमेशन स्केल .5x"</item>
+ <item msgid="2219332261255416635">"एनिमेशन स्केल 1x"</item>
+ <item msgid="3544428804137048509">"एनिमेशन स्केल 1.5x"</item>
+ <item msgid="3110710404225974514">"एनिमेशन स्केल 2x"</item>
+ <item msgid="4402738611528318731">"एनिमेशन स्केल 5x"</item>
+ <item msgid="6189539267968330656">"एनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"एनिमेशन बंद"</item>
+ <item msgid="3375781541913316411">"एनिमेशन स्केल .5x"</item>
+ <item msgid="1991041427801869945">"एनिमेशन स्केल 1x"</item>
+ <item msgid="4012689927622382874">"एनिमेशन स्केल 1.5x"</item>
+ <item msgid="3289156759925947169">"एनिमेशन स्केल 2x"</item>
+ <item msgid="7705857441213621835">"एनिमेशन स्केल 5x"</item>
+ <item msgid="6660750935954853365">"एनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"एनिमेशन बंद"</item>
+ <item msgid="1138649021950863198">"एनिमेशन स्केल .5x"</item>
+ <item msgid="4394388961370833040">"एनिमेशन स्केल 1x"</item>
+ <item msgid="8125427921655194973">"एनिमेशन स्केल 1.5x"</item>
+ <item msgid="3334024790739189573">"एनिमेशन स्केल 2x"</item>
+ <item msgid="3170120558236848008">"एनिमेशन स्केल 5x"</item>
+ <item msgid="1069584980746680398">"एनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"कोई नहीं"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (सुरक्षित)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (सुरक्षित)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (सुरक्षित)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (सुरक्षित)"</item>
+ <item msgid="3547211260846843098">"4K (बेहतर)"</item>
+ <item msgid="5411365648951414254">"4K (बेहतर, सुरक्षित)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ड्यूअल स्क्रीन)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"कोई नहीं"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (ग्राफ़िक)"</item>
+ <item msgid="1340692776955662664">"glGetError पर स्टैक कॉल करें"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"बंद"</item>
+ <item msgid="675719912558941285">"गैर-आयताकार क्लिप क्षेत्र नीले रंग से बनाएं"</item>
+ <item msgid="1064373276095698656">"परीक्षित ड्रॉइंग आदेशों को हरे रंग से हाइलाइट करें"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"बंद"</item>
+ <item msgid="2751513398307949636">"बार के रूप में स्क्रीन पर"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo में"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"बंद"</item>
+ <item msgid="7688197031296835369">"ओवरड्रॉ क्षेत्रों को दिखाएं"</item>
+ <item msgid="2290859360633824369">"हरा रंग पहचानने में कमी के क्षेत्र दिखाएं"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"मानक सीमा"</item>
+ <item msgid="4071574792028999443">"कोई पृष्ठभूमि प्रक्रियाएं नहीं"</item>
+ <item msgid="4810006996171705398">"अधिकतम 1 प्रक्रिया"</item>
+ <item msgid="8586370216857360863">"अधिकतम 2 प्रक्रियाएं"</item>
+ <item msgid="836593137872605381">"अधिकतम 3 प्रक्रियाएं"</item>
+ <item msgid="7899496259191969307">"अधिकतम 4 प्रक्रियाएं"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"चार्ज हो रहा है"</item>
+ <item msgid="5220695614993094977">"MTP (मीडिया ट्रांसफर प्रोटोकॉल)"</item>
+ <item msgid="2086000968159047375">"PTP (पिक्चर ट्रांसफर प्रोटोकॉल)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ईथरनेट)"</item>
+ <item msgid="1718924214939774352">"ऑडियो स्रोत"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index abcbdbd..b6e5d7d 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"प्रोफ़ाइल चुनें"</string>
<string name="category_personal" msgid="1299663247844969448">"व्यक्तिगत"</string>
<string name="category_work" msgid="8699184680584175622">"कार्यालय"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"डेवलपर विकल्प"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"डेवलपर विकल्प सक्षम करें"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ऐप्स विकास के लिए विकल्प सेट करें"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"इस उपयोगकर्ता के लिए डेवलपर विकल्प उपलब्ध नहीं हैं"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"टेदरिंग सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"एक्सेस पॉइंट नाम सेटिंग इस उपयोगकर्ता के लिए उपलब्ध नहीं हैं"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB डीबग करना"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"डीबग मोड जब USB कनेक्ट किया गया हो"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबगिंग प्राधिकरणों को निरस्त करें"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"बग रिपोर्ट शॉर्टकट"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"बग रिपोर्ट लेने के लिए पावर मेनू में कोई बटन दिखाएं"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"सचेत रहें"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होने के दौरान स्क्रीन कभी निष्क्रिय नहीं होगी"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्नूप लॉग सक्षम करें"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"फ़ाइल के सभी ब्लूटूथ HCI पैकेट कैप्चर करें"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करना"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर को अनलाॅक किए जाने की अनुमति दें"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करने की अनुमति दें?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावनी: इस सेटिंग के चालू रहने पर डिवाइस सुरक्षा सुविधाएं इस डिवाइस पर काम नहीं करेंगी."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"कृत्रिम स्थान वाला ऐप चुनें"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"कृत्रिम स्थान वाला कोई ऐप सेट नहीं है"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"कृत्रिम स्थान वाला ऐप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस दिखाई देने के लिए प्रमाणन"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस प्रवेश सक्षम करें"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"वाई-फ़ाई से सेल्यूलर पर बलपूर्वक हस्तांतरण"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"हमेशा वाई-फ़ाई रोम स्कैन करने दें"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"लीगेसी DHCP क्लाइंट"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा हमेशा सक्रिय"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"इंटरफ़ेस पर वर्तमान में मौजूद डेटा ट्रैफ़िक के आधार पर वाई-फ़ाई रोम स्कैन करने देता/नहीं देता है"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफ़र आकार"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफ़र लॉगर आकार चुनें"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB कॉन्फ़िगरेशन चुनें"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB कॉन्फ़िगरेशन चुनें"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"कृत्रिम स्थानों को अनुमति दें"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"कृत्रिम स्थानों को अनुमति दें"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"दृश्य विशेषता निरीक्षण सक्षम करें"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"नए Android DHCP क्लाइंट के बजाय Lollipop के DHCP क्लाइंट का उपयोग करें."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"वाई-फ़ाई के सक्रिय रहने पर भी, हमेशा मोबाइल डेटा सक्रिय रखें (तेज़ी से नेटवर्क स्विच करने के लिए)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB डीबग करने की अनुमति दें?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग डीबग करने का उद्देश्य केवल विकास है. इसका उपयोग आपके कंप्यूटर और आपके डिवाइस के बीच डेटा की प्रतिलिपि बनाने, बिना नोटिफिकेशन के आपके डिवाइस पर ऐप्स इंस्टॉल करने और लॉग डेटा पढ़ने के लिए करें."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"आपके द्वारा पूर्व में प्राधिकृत सभी कंप्यूटर से USB डीबगिंग की पहुंच निरस्त करें?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिंग की अनुमति दें?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ये सेटिंग केवल विकास संबंधी उपयोग के प्रयोजन से हैं. वे आपके डिवाइस और उस पर स्थित ऐप्स को खराब कर सकती हैं या उनके दुर्व्यवहार का कारण हो सकती हैं."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB पर ऐप्स सत्यापित करें"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"नुकसानदेह व्यवहार के लिए ADB/ADT के द्वारा इंस्टॉल किए गए ऐप्स जांचें."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"स्थानीय शेल एक्सेस ऑफ़र करने वाला टर्मिनल ऐप्स सक्षम करें"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जांच"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जांच व्यवहार सेट करें"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करना"</string>
+ <string name="debug_app" msgid="8349591734751384446">"डीबग ऐप्स को चुनें"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"कोई डीबग ऐप्स सेट नहीं है"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"डीबग करने वाला ऐप्स : <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ऐप्स को चुनें"</string>
+ <string name="no_application" msgid="2813387563129153880">"कुछ भी नहीं"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगर की प्रतीक्षा करें"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग किया गया ऐप्स निष्पादन के पहले अनुलग्न करने के लिए डीबगर की प्रतीक्षा करता है"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"हिंदी में लिखें"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ड्रॉइंग"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर त्वरित रेंडरिंग"</string>
+ <string name="media_category" msgid="4388305075496848353">"मीडिया"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"निगरानी"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"सख्त मोड सक्षम किया गया"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"जब ऐप्स मुख्य थ्रेड पर लंबी कार्यवाही करते हैं तो स्क्रीन फ़्लैश करें"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"सूचक स्थान"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"वर्तमान स्पर्श डेटा दिखाने वाला स्क्रीन ओवरले"</string>
+ <string name="show_touches" msgid="1356420386500834339">"स्पर्श दिखाएं"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"स्पर्श के लिए दिखाई देने वाले फ़ीडबैक दिखाएं"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"सतह के नई जानकारी दिखाएं"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"विंडो सतहें के नई जानकारी मिलने पर उन सभी को फ़्लैश करें"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य की नई जानकारी दिखाएं"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU के साथ आरेखित करने पर विंडो में दृश्यों को फ़्लैश करें"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेयर लेयर की नई जानकारी"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेयर लेयर की नई जानकारी मिलने पर हरा फ़्लैश होता है"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ओवरड्रॉ डीबग करें"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ओवरले अक्षम करें"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रीन संयोजन के लिए हमेशा GPU का उपयोग करें"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"रंग स्पेस सिम्युलेट करें"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL चिह्न सक्षम करें"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ऑडियो रूटिंग अक्षम करें"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ऑडियो पेरिफ़ेरल पर स्वत: रूटिंग अक्षम करें"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"लेआउट सीमाएं दिखाएं"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"क्लिप सीमाएं, मार्जिन, आदि दिखाएं."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL लेआउट दिशा लागू करें"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"सभी भाषाओं के लिए स्क्रीन लेआउट दिशा को RTL रखें"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU उपयोग दिखाएं"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"स्क्रीन ओवरले वर्तमान CPU उपयोग को दिखा रहा है"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"बलपूर्वक GPU रेंडर करें"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ड्रॉइंग के लिए GPU का बलपूर्वक उपयोग करें"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA को बाध्य करें"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ऐप्स में 4x MSAA को सक्षम करें"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"गैर-आयताकार क्लिप परिचालनों को डीबग करें"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"प्रोफ़ाइल GPU रेंडरिंग"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"विंडो एनिमेशन स्केल"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"संक्रमण एनिमेशन स्केल"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"एनिमेटर अवधि स्केल"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"द्वितीयक डिस्प्ले अनुरूपित करें"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ऐप्स"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"गतिविधियों को न रखें"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"उपयोगकर्ता के छोड़ते ही प्रत्येक गतिविधि समाप्त करें"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"पृष्ठभूमि प्रक्रिया सीमा"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"सभी ANR दिखाएं"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"पृष्ठभूमि ऐप्स के लिए ऐप्स प्रतिसाद नहीं दे रहा डॉयलॉग दिखाएं"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ऐप्स को बाहरी मेमोरी पर बाध्य करें"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"इससे कोई भी ऐप मेनिफेस्ट मान अनदेखा करके, बाहरी मेमोरी पर लिखने योग्य बन जाता है"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"आकार बदले जाने के लिए गतिविधियों को बाध्य करें"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"एकाधिक-विंडो के लिए सभी गतिविधियों के आकार को बदले जाने योग्य बनाता है, चाहे मेनिफेस्ट मान कुछ भी हों."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटॉप बैकअप पासवर्ड"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्कटॉप पूर्ण बैकअप वर्तमान में सुरक्षित नहीं हैं"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"डेस्कटॉप के पूर्ण बैकअप के पासवर्ड को बदलने या निकालने के लिए स्पर्श करें."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"नया बैकअप पासवर्ड सेट किया गया"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नया पासवर्ड तथा पुष्टि मेल नही खाते"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"सुरक्षित पासवर्ड सेट करने में विफल रहा"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"चमकीला (डिफ़ॉल्ट)"</item>
+ <item msgid="8446070607501413455">"स्वाभाविक"</item>
+ <item msgid="6553408765810699025">"मानक"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"बेहतर रंग"</item>
+ <item msgid="8280754435979370728">"आंखों को दिखाई देने वाले प्राकृतिक रंग"</item>
+ <item msgid="5363960654009010371">"डिजिटल सामग्री के लिए ऑप्टिमाइज़़ किए गए रंग"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"निष्क्रिय ऐप्स"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"निष्क्रिय. टॉगल करने के लिए स्पर्श करें."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"सक्रिय. टॉगल करने के लिए स्पर्श करें."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"चल रही सेवाएं"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"वर्तमान में चल रही सेवाओं को देखें और नियंत्रित करें"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"रात्रि मोड"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"अक्षम"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"हमेशा चालू"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"स्वचालित"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"फ़ाइल एन्क्रिप्शन में रूपांतरित करें"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"रूपांतरित करें..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"फ़ाइल पहले से एन्क्रिप्ट की हुई है"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"फ़ाइल आधारित एन्क्रिप्शन में रूपांतरित कर रहा है"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"डेटा विभाजन को फ़ाइल आधारित एन्क्रिप्शन में रूपांतरित करें.\n !!चेतावनी!! इससे आपका सभी डेटा मिट जाएगा.\n यह सुविधा अल्फ़ा स्थिति में है और ठीक से कार्य नहीं कर सकती.\n जारी रखने के लिए \'वाइप करें और रूपांतरित करें…\' दबाएं."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"वाइप करें और रूपांतरित करें…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"चित्र रंग मोड"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB का उपयोग करें"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"अक्षम"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"पूर्ण वर्णांधता"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"आंशिक हरित वर्णांधता (लाल-हरित)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"आंशिक लाल वर्णांधता (लाल-हरित)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"आंशिक नील वर्णांधता (नील-पीत)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"रंग सुधार"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"यह सुविधा प्रायोगिक है और निष्पादन को प्रभावित कर सकती है."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> के द्वारा ओवरराइड किया गया"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index b7a0d51..d51f82d 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokirano"</item>
<item msgid="1805837518286731242">"Privremeno izbjegavanje loše veze"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nikad ne provjeravaj"</item>
+ <item msgid="6042769699089883931">"Provjeri samo DRM sadržaj"</item>
+ <item msgid="9174900380056846820">"Uvijek provjeri"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nikad ne upotrebljavaj HDCP provjeru"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB po međusprem."</item>
+ <item msgid="2822309747675758628">"256 KB po međuspr."</item>
+ <item msgid="6699306198357496731">"1 MB po međusprem."</item>
+ <item msgid="5748528643937500349">"4 MB po međusprem."</item>
+ <item msgid="1978629051085111592">"16 MB po međusprem."</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animacija isključena"</item>
+ <item msgid="6624864048416710414">"Brzina animacije 0,5x"</item>
+ <item msgid="2219332261255416635">"Brzina animacije 1x"</item>
+ <item msgid="3544428804137048509">"Brzina animacije 1,5x"</item>
+ <item msgid="3110710404225974514">"Brzina animacije 2x"</item>
+ <item msgid="4402738611528318731">"Brzina animacije 5x"</item>
+ <item msgid="6189539267968330656">"Brzina animacije 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animacija isključena"</item>
+ <item msgid="3375781541913316411">"Brzina animacije 0,5x"</item>
+ <item msgid="1991041427801869945">"Brzina animacije 1x"</item>
+ <item msgid="4012689927622382874">"Brzina animacije 1,5x"</item>
+ <item msgid="3289156759925947169">"Brzina animacije 2x"</item>
+ <item msgid="7705857441213621835">"Brzina animacije 5x"</item>
+ <item msgid="6660750935954853365">"Brzina animacije 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animacija isključena"</item>
+ <item msgid="1138649021950863198">"Brzina animacije 0,5x"</item>
+ <item msgid="4394388961370833040">"Brzina animacije 1x"</item>
+ <item msgid="8125427921655194973">"Brzina animacije 1,5x"</item>
+ <item msgid="3334024790739189573">"Brzina animacije 2x"</item>
+ <item msgid="3170120558236848008">"Brzina animacije 5x"</item>
+ <item msgid="1069584980746680398">"Brzina animacije 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ništa"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480 p (sigurno)"</item>
+ <item msgid="1853913333042744661">"720 p"</item>
+ <item msgid="3414540279805870511">"720 p (sigurno)"</item>
+ <item msgid="9039818062847141551">"1080 p"</item>
+ <item msgid="4939496949750174834">"1080 p (sigurno)"</item>
+ <item msgid="1833612718524903568">"4000"</item>
+ <item msgid="238303513127879234">"4000 (sigurno)"</item>
+ <item msgid="3547211260846843098">"4000 (povećanje razlučivosti)"</item>
+ <item msgid="5411365648951414254">"4000 (poveć. razlučiv., sigurno)"</item>
+ <item msgid="1311305077526792901">"720 p, 1080 p (dvojni zaslon)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ništa"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Pozivni snop za funkciju glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Isključeno"</item>
+ <item msgid="675719912558941285">"Plavo nepravokutno područje isječka"</item>
+ <item msgid="1064373276095698656">"Istakni testirane naredbe zelenom"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Isključeno"</item>
+ <item msgid="2751513398307949636">"Na zaslonu u obliku traka"</item>
+ <item msgid="1851438178120770973">"U naredbi adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Isključeno"</item>
+ <item msgid="7688197031296835369">"Pokaži područja slojnih iscrtavanja"</item>
+ <item msgid="2290859360633824369">"Prikaži područja za deuteranomaliju"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardna ograničenje"</item>
+ <item msgid="4071574792028999443">"Nema pozadinskih procesa"</item>
+ <item msgid="4810006996171705398">"Najviše 1 proces"</item>
+ <item msgid="8586370216857360863">"Najviše 2 procesa"</item>
+ <item msgid="836593137872605381">"Najviše 3 procesa"</item>
+ <item msgid="7899496259191969307">"Najviše 4 procesa"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Punjenje"</item>
+ <item msgid="5220695614993094977">"MTP (protokol za prijenos medija)"</item>
+ <item msgid="2086000968159047375">"PTP (protokol za prijenos fotografija)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ethernet)"</item>
+ <item msgid="1718924214939774352">"Audioizvor"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 7516959..f8434eb 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Odabir profila"</string>
<string name="category_personal" msgid="1299663247844969448">"Osobno"</string>
<string name="category_work" msgid="8699184680584175622">"Posao"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opcije za razvojne programere"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Omogući opcije za razvojne programere"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Postavljanje opcija za razvoj aplikacije"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Opcije razvojnih programera nisu dostupne za ovog korisnika"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Postavke VPN-a nisu dostupne ovom korisniku"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Postavke dijeljenja veze nisu dostupne ovom korisniku"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Postavke pristupne točke nisu dostupne ovom korisniku"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Uklanjanje pogrešaka putem USB-a"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Uklanjanje pogrešaka s priključenim USB-om"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Opoziv autorizacija za uklanjanje pogrešaka putem USB-a"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Prečac izvješća o pogreškama"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži gumb u izborniku napajanja za izradu izvješća o programskim pogreškama"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Ne pokreći mirovanje"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Zaslon nikad neće prijeći u mirovanje tijekom punjenja"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Zapisi za Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Snimi sve Bluetooth HCI pakete u datoteci"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM otključavanje"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Neka kôd za pokretanje sustava bude otključan"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dopustiti OEM otključavanje?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORENJE: značajke za zaštitu uređaja neće funkcionirati na ovom uređaju dok je ta postavka uključena."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Odaberite aplikaciju za lažnu lokaciju"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikacija za lažnu lokaciju nije postavljena"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažnu lokaciju: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući opširnu prijavu na Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aktivni prijelaz s Wi‑Fi na mob. mrežu"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Uvijek dopusti slobodno traženje Wi-Fi mreže"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Upotrebljavaj stari DHCP klijent"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilni podaci uvijek aktivni"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Dopustite ili blokirajte slobodno traženje Wi-Fi mreža na temelju količine podatkovnog prometa na sučelju."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine međuspremnika zapisnika"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Odaberite veličinu međuspremnika zapisnika"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Odabir USB konfiguracije"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Odabir USB konfiguracije"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Dopusti probne lokacije"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Dopusti probne lokacije"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Upotrebljavajte DHCP klijent iz Lollipopa umjesto novog Android DHCP klijenta."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Neka mobilni podaci uvijek budu aktivni, čak i kada je Wi‑Fi aktivan (za brzo prebacivanje s jedne na drugu mrežu)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti uklanjanje pogrešaka putem USB-a?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Uklanjanje pogrešaka putem USB-a namijenjeno je samo u razvojne svrhe. Može se upotrijebiti za kopiranje podataka s računala na uređaj i obrnuto, instalaciju aplikacija na uređaju bez obavijesti i za čitanje dnevničkih zapisa."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Želite li opozvati pristup uklanjanju pogrešaka putem USB-a sa svih računala koja ste prethodno autorizirali?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Dopustiti postavke razvojnih programera?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove su postavke namijenjene samo razvojnim programerima. One mogu uzrokovati kvar ili neželjeno ponašanje vašeg uređaja i aplikacija na njemu."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Potvrdi aplikacije putem USB-a"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Provjerite uzrokuju li aplikacije instalirane putem ADB-a/ADT-a poteškoće."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Omogući aplikaciju terminala koja nudi pristup lokalnoj ovojnici"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP provjera"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Postav. ponaš. HDCP prov."</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Uklanjanje pogrešaka"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Aplikacija za uklanjanje pogrešaka"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nema aplikacije za uklanjanje pogrešaka"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikacija za uklanjanje pogrešaka: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Odaberite aplikaciju"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ništa"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Čeka se program za uklanjanje pogrešaka"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacija čeka priključivanje programa za uklanjanje pogrešaka"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ulaz"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Crtež"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardverski ubrzano renderiranje"</string>
+ <string name="media_category" msgid="4388305075496848353">"Mediji"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Nadzor"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Omogućen strogi način"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Zaslon bljeska kada operacije apl. u glavnoj niti dugo traju."</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Mjesto pokazivača"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Na zaslonu se prikazuju podaci o dodirima."</string>
+ <string name="show_touches" msgid="1356420386500834339">"Prikaži dodire"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Prikazuju se vizualne povratne inform. za dodire."</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Prikaži ažur. površine"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Površina prozora bljeska pri ažuriranju."</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Prikaži ažur. GPU prikaza"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Bljeskanje prikaza u prozorima pri crtanju GPU-om"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Prikaži ažuriranja hardverskih slojeva"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardverski slojevi bljeskaju zeleno pri ažuriranju."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Rješavanje GPU preklapanja"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Onemogući dijeljenje mem."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Uvijek koristi GPU za slaganje zaslona"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuliraj prostor boja"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Omogući OpenGL praćenja"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Onemogući USB audiousmj."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onemogući aut. usmjeravanje na USB audioperiferiju"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Prikaži granice izgleda"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Prikazuju se obrubi, margine itd. isječaka."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Nametni zdesna ulijevo"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Nametni smjer zdesna ulijevo za sve zemlje/jezike"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Prikaži upotrebu procesora"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Na zaslonu se prikazuje iskorištenost procesora."</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Nametni GPU renderiranje"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Nametni upotrebu GPU-a za 2D crteže"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Nametni 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Omogući 4x MSAA u aplikacijama OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Otkloni pogreške operacija nepravokutnog isječka"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil GPU prikazivanja"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Brzina animacije prozora"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Brzina animacije prijelaza"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Razmjer duljine animatora"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simuliraj sekund. zaslone"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacije"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Uklanjanje aktivnosti"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Aktivnost se prekida čim je korisnik napusti."</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Ograničenje pozadinskog procesa"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Prikaži sve ANR-ove"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Prikaz dijaloga o pozad. aplik. koja ne odgovara"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Prisilno dopusti aplikacije u vanjskoj pohrani"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Aplikacije se mogu zapisivati u vanjsku pohranu neovisno o manifestu"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Nametni mogućnost promjene veličine za aktivnosti"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Veličina svih aktivnosti može se mijenjati za više prozora, neovisno o vrijednostima manifesta."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Zaporka sigurnosne kopije"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Potpune sigurnosne kopije na stolnom računalu trenutačno nisu zaštićene"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Odaberite za promjenu ili uklanjanje zaporke u potpunim sigurnosnim kopijama na stolnom računalu"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nova zaporka za sigurnosnu kopiju postavljena"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nova zaporka i potvrda ne odgovaraju"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nije uspjelo postavljanje zaporke za sigurnosnu kopiju"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Živopisno (zadano)"</item>
+ <item msgid="8446070607501413455">"Prirodno"</item>
+ <item msgid="6553408765810699025">"Standardno"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Poboljšane boje"</item>
+ <item msgid="8280754435979370728">"Prirodan doživljaj boje"</item>
+ <item msgid="5363960654009010371">"Boje optimizirane za digitalni sadržaj"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktivne aplikacije"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Neaktivno. Dodirnite za prebacivanje."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktivno. Dodirnite za prebacivanje."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Pokrenute usluge"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Pogledajte i nadzirite pokrenute procese"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Noćni način rada"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Onemogućeno"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Uvijek uključeno"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatska"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Pretvori u enkripciju datoteka"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Pretvori…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Enkripcija datoteka već je izvršena"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Pretvaranje u enkripciju datoteka"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Pretvorite podatkovnu particiju u enkripciju datoteka.\n Upozorenje! Time će se izbrisati svi vaši podaci.\n Značajka je u alfa verziji i možda neće funkcionirati pravilno.\n Pritisnite \"Izbriši i pretvori...\" da biste nastavili."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Izbriši i pretvori…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Način boje slike"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Upotrijebi sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Onemogućeno"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromatizam"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalija (crveno – zeleno)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalija (crveno – zeleno)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalija (plavo – žuto)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Korekcija boje"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ova je značajka eksperimentalna i može utjecati na performanse."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Premošćeno postavkom <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index 681489e..03c9ed7 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Letiltva"</item>
<item msgid="1805837518286731242">"A rossz minőségű kapcsolatok átmeneti elkerülése"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Soha ne ellenőrizze"</item>
+ <item msgid="6042769699089883931">"Csak DRM-tartalom ellenőrzése"</item>
+ <item msgid="9174900380056846820">"Mindig ellenőrizze"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Soha ne használjon HDCP ellenőrzést"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB/naplópuffer"</item>
+ <item msgid="2822309747675758628">"256 KB/naplópuffer"</item>
+ <item msgid="6699306198357496731">"1 MB/naplópuffer"</item>
+ <item msgid="5748528643937500349">"4 MB/naplópuffer"</item>
+ <item msgid="1978629051085111592">"16 MB/naplópuffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animáció ki"</item>
+ <item msgid="6624864048416710414">"Animáció tempója: 0,5x"</item>
+ <item msgid="2219332261255416635">"Animáció tempója: 1x"</item>
+ <item msgid="3544428804137048509">"Animáció tempója: 1,5x"</item>
+ <item msgid="3110710404225974514">"Animáció tempója: 2x"</item>
+ <item msgid="4402738611528318731">"Animáció tempója: 5x"</item>
+ <item msgid="6189539267968330656">"Animáció tempója: 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animáció ki"</item>
+ <item msgid="3375781541913316411">"Animáció tempója: 0,5x"</item>
+ <item msgid="1991041427801869945">"Animáció tempója: 1x"</item>
+ <item msgid="4012689927622382874">"Animáció tempója: 1,5x"</item>
+ <item msgid="3289156759925947169">"Animáció tempója: 2x"</item>
+ <item msgid="7705857441213621835">"Animáció tempója: 5x"</item>
+ <item msgid="6660750935954853365">"Animáció tempója: 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animáció ki"</item>
+ <item msgid="1138649021950863198">"Animáció tempója: 0,5x"</item>
+ <item msgid="4394388961370833040">"Animáció tempója: 1x"</item>
+ <item msgid="8125427921655194973">"Animáció tempója: 1,5x"</item>
+ <item msgid="3334024790739189573">"Animáció tempója: 2x"</item>
+ <item msgid="3170120558236848008">"Animáció tempója: 5x"</item>
+ <item msgid="1069584980746680398">"Animáció tempója: 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Egyik sem"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (biztonságos)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (biztonságos)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (biztonságos)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (biztonságos)"</item>
+ <item msgid="3547211260846843098">"4K (felskálázott)"</item>
+ <item msgid="5411365648951414254">"4K (felskálázott, biztonságos)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (két képernyő)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Semelyik"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Verem meghívása glGetError esetén"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Kikapcsolva"</item>
+ <item msgid="675719912558941285">"Nem négyzetes kivágás kékkel"</item>
+ <item msgid="1064373276095698656">"Tesztelt rajzolási parancsok kiemelése zölddel"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Ki"</item>
+ <item msgid="2751513398307949636">"A képernyőn sávként"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo elemben"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Ki"</item>
+ <item msgid="7688197031296835369">"Tartalom-felülírási területek mutatása"</item>
+ <item msgid="2290859360633824369">"A deuteranomália területeinek megjelenítése"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Normál korlátozás"</item>
+ <item msgid="4071574792028999443">"Nincsenek háttérfolyamatok"</item>
+ <item msgid="4810006996171705398">"Legfeljebb 1 folyamat"</item>
+ <item msgid="8586370216857360863">"Legfeljebb 2 folyamat"</item>
+ <item msgid="836593137872605381">"Legfeljebb 3 folyamat"</item>
+ <item msgid="7899496259191969307">"Legfeljebb 4 folyamat"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Töltés"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol, médiaátviteli protokoll)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol, képátviteli protokoll)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Hangforrás"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 77c944d..636f88a 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profil kiválasztása"</string>
<string name="category_personal" msgid="1299663247844969448">"Személyes"</string>
<string name="category_work" msgid="8699184680584175622">"Munkahelyi"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Fejlesztői beállítások"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Fejlesztői beállítások engedélyezése"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Alkalmazásfejlesztési beállítások megadása"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"A fejlesztői beállítások nem érhetők el ennél a felhasználónál"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"A VPN-beállítások nem érhetők el ennél a felhasználónál"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Az internetmegosztási beállítások nem érhetők el ennél a felhasználónál"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"A hozzáférési pont nevének beállításai nem érhetők el ennél a felhasználónál"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB hibakeresés"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Hibakeresés mód USB csatlakoztatásakor"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB-s hibakeresésre vonatkozó engedélyek visszavonása"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Hibajelentési gomb"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Gomb megjelenítése a bekapcsolási menüben hibajelentés készítéséhez"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Nem kapcsolódik ki"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"A képernyő soha nem kapcsol ki töltés során"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop napló engedélyezése"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Az összes Bluetooth HCI-csomag rögzítése egy fájlban"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-feloldás"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"A rendszerbetöltő feloldásának engedélyezése"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Engedélyezi az OEM-feloldást?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"FIGYELEM! Az eszközvédelmi funkciók addig nem fognak működni ezen az eszközön, amíg ez a beállítás be van kapcsolva."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Helyimitáló alkalmazás kiválasztása"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nincs kiválasztott helyimitáló alkalmazás"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Helyimitáló alkalmazás: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Hálózatok"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Vezeték nélküli kijelző tanúsítványa"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Részletes Wi-Fi-naplózás engedélyezése"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agresszív Wi‑Fi–mobilhálózat átadás"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi-roaming ellenőrzésének engedélyezése mindig"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Korábbi DHCP-kliens használata"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"A mobilhálózati adatforgalom mindig aktív"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"A Wi-Fi-roaming ellenőrzésének engedélyezése vagy letiltása az interfészen jelen lévő adatforgalom mennyiségétől függően"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Naplózási puffer mérete"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Naplózási pufferméret kiválasztása"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB-beállítás kiválasztása"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB-beállítás kiválasztása"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Helyutánzatok engedélyezése"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Helyutánzatok engedélyezése"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Nézetattribútum vizsgálatának engedélyezése"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"A Lollipop DHCP-kliensének használata az új androidos DHCP-kliens helyett."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"A mobiladat-kapcsolat mindig maradjon aktív, még akkor is, ha a Wi‑Fi aktív (a gyors hálózatváltás érdekében)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Engedélyezi az USB hibakeresést?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Az USB hibakeresés fejlesztési célokat szolgál. Használhatja adatok másolására a számítógép és a készülék között, alkalmazások a készülékre való értesítés nélküli telepítésére és naplózási adatok olvasására."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Visszavonja a hozzáférést az USB-s hibakereséshez az összes számítógépről, ahol korábban engedélyezte azt?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Engedélyezi a fejlesztői beállításokat?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ezek a beállítások csak fejlesztői használatra szolgálnak. Használatuk esetén eszköze vagy alkalmazásai meghibásodhatnak, illetve nem várt módon viselkedhetnek."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB-n keresztül telepített alkalmazások ellenőrzése"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Az ADB/ADT útján telepített alkalmazások ellenőrzése kártékony viselkedésre."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Helyi végpont"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Végalkalmazás engedélyezése a helyi rendszerhéj eléréséhez"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ellenőrzés"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP-ellenőrzés beállítása"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Hibakeresés"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Válassza az alkalmazás hibakeresése lehetőséget"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nincs beállítva alkalmazás hibakereséshez"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"A(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás hibakeresése"</string>
+ <string name="select_application" msgid="5156029161289091703">"Alkalmazás kiválasztása"</string>
+ <string name="no_application" msgid="2813387563129153880">"Semmi"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Várjon a hibakeresőre."</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"A javított alkalmazás a hibakeresőre vár."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Bevitel"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Rajz"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardveres gyorsítású megjelenítés"</string>
+ <string name="media_category" msgid="4388305075496848353">"Média"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Figyelés"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Szigorú mód engedélyezve"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Képernyővillogás a fő szál hosszú műveleteinél"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Mutató helye"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"A fedvény mutatja az aktuális érintési adatokat"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Érintések megjelenítése"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Érintések vizuális visszajelzésének megjelenítése"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Képernyőfrissítések megj."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"A teljes ablakfelület villogjon frissítéskor."</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU-nézetfriss. megjel."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ablakbeli nézetek villognak GPU-s rajznál."</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hardverréteg-frissítések"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Frissítéskor a hardverrétegek zölden villognak"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU tartalom-felülírási hibakeresés"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW fedvények letiltása"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Mindig a GPU használata képernyő-feldolgozáshoz"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Színtérszimuláció"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL nyomon követése"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Hangátirányítás tiltása"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Hangátirányítás tiltása az USB-s hangeszközöknél"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Elrendezéshatár mutatása"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Kliphatárok, margók stb. megjelenítése."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Elrendezés jobbról balra"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Elrendezés jobbról balra minden nyelvnél"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU-használat mutatása"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Képernyőfedvény a jelenlegi CPU-használattal"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU-megjelenítés"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"GPU használatának kényszerítése 2D rajzhoz"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA kényszerítése"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"A 4x MSAA engedélyezése az OpenGL ES 2.0-nál"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Nem négyzetes kivágási műveletek hibakeresése"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil GPU-renderelésről"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Ablakanimáció tempója"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Áttűnési animáció tempója"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animáció tempója"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Másodlagos kijelzők szimulálása"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Alkalmazások"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Törölje a tevékenységeket"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Tevékenységek törlése, amint elhagyják azokat"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Háttérfolyamat-korlátozás"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Összes ANR mutatása"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Az Alkalmazás nem válaszol ablak megjelenítése"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Külső tárhely alkalmazásainak engedélyezése"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Lehetővé teszi, hogy külső tárhelyre lehessen írni"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Tevékenységek átméretezésének kényszerítése"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Lehetővé teszi, hogy az összes tevékenység átméretezhető legyen a többablakos megjelenítés érdekében a jegyzékértékektől függetlenül."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Asztali mentés jelszava"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Az asztali teljes biztonsági mentések jelenleg nem védettek."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Érintse meg, ha módosítaná vagy eltávolítaná a jelszót az asztali teljes mentésekhez"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Új mentési jelszó beállítva"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Az új jelszó és a megerősítése nem egyezik."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Hiba a mentési jelszó beállítása során"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Élénk (alapértelmezett)"</item>
+ <item msgid="8446070607501413455">"Természetes"</item>
+ <item msgid="6553408765810699025">"Normál"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Erős színek"</item>
+ <item msgid="8280754435979370728">"Természetes színek, ahogyan azt az emberi szem is látja"</item>
+ <item msgid="5363960654009010371">"Digitális tartalomhoz optimalizált színek"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktív alkalmazások"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktív: A váltáshoz érintse meg."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktív: A váltáshoz érintse meg."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Futó szolgáltatások"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"A jelenleg futó szolgáltatások megtekintése és vezérlése"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Éjszakai mód"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Kikapcsolva"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Mindig bekapcsolva"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatikus"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertálás fájlalapú titkosításra"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertálás…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Már fájlalapú titkosítást használ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konvertálás fájlalapú titkosításra"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertálja az adatalapú titkosítást használó partíciót fájlalapú titkosítást használóvá.\n FIGYELEM! A művelet minden adatot töröl.\n A funkció alfatesztelésben van, és lehet, hogy nem megfelelően működik.\n Nyomja meg a „Törlés és konvertálás…” lehetőséget a folytatáshoz."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Törlés és konvertálás…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Kép színe mód"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB használata"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Letiltva"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromázia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomália (piros–zöld)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomália (piros– zöld)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomália (kék–sárga)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Színkorrekció"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ez egy kísérleti funkció, és hatással lehet a teljesítményre."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Felülírva erre: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-hy-rAM/arrays.xml b/packages/SettingsLib/res/values-hy-rAM/arrays.xml
index 483e9d3..41143de 100644
--- a/packages/SettingsLib/res/values-hy-rAM/arrays.xml
+++ b/packages/SettingsLib/res/values-hy-rAM/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Արգելափակված"</item>
<item msgid="1805837518286731242">"Վատ ցանցից ժամանակավոր խուսափում"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Երբեք չստուգել"</item>
+ <item msgid="6042769699089883931">"Ստուգել միայն DRM բովանդակությունը"</item>
+ <item msgid="9174900380056846820">"Միշտ ստուգել"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Երբեք չօգտագործել HDCP ստուգումը"</item>
+ <item msgid="3878793616631049349">"Օգտագործել HDCP-ը` միայն DRM-ի բովանդակությունը ստուգելու համար"</item>
+ <item msgid="45075631231212732">"Միշտ օգտագործել HDCP ստուգումը"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64ԿԲ"</item>
+ <item msgid="505611754508988476">"256ԿԲ"</item>
+ <item msgid="6361286924268716397">"1ՄԲ"</item>
+ <item msgid="6405203239560695266">"4ՄԲ"</item>
+ <item msgid="3025431211013424097">"16ՄԲ"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64ԿԲ"</item>
+ <item msgid="3534782711045262344">"256ԿԲ"</item>
+ <item msgid="8085867209202153403">"1ՄԲ"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Պահնակ՝ առավ. 64ԿԲ"</item>
+ <item msgid="2822309747675758628">"Պահնակ՝ առավ. 256ԿԲ"</item>
+ <item msgid="6699306198357496731">"Պահնակ՝ առավ. 1ՄԲ"</item>
+ <item msgid="5748528643937500349">"Պահնակ՝ առավ. 4ՄԲ"</item>
+ <item msgid="1978629051085111592">"Պահնակ՝ առավ. 16ՄԲ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Անջատել շարժապատկերը"</item>
+ <item msgid="6624864048416710414">"Շարժապատկերի սանդղակը` .5x"</item>
+ <item msgid="2219332261255416635">"Շարժապատկերի սանդղակը` 1x"</item>
+ <item msgid="3544428804137048509">"Շարժապատկերի սանդղակը` 1.5x"</item>
+ <item msgid="3110710404225974514">"Շարժապատկերի սանդղակը` 2x"</item>
+ <item msgid="4402738611528318731">"Շարժապատկերի սանդղակը` 5x"</item>
+ <item msgid="6189539267968330656">"Շարժապատկերի սանդղակը` 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Անջատել շարժապատկերը"</item>
+ <item msgid="3375781541913316411">"Շարժապատկերի սանդղակը` .5x"</item>
+ <item msgid="1991041427801869945">"Շարժապատկերի սանդղակը` 1x"</item>
+ <item msgid="4012689927622382874">"Շարժապատկերի սանդղակը` 1.5x"</item>
+ <item msgid="3289156759925947169">"Շարժապատկերի սանդղակը` 2x"</item>
+ <item msgid="7705857441213621835">"Շարժապատկերի սանդղակը` 5x"</item>
+ <item msgid="6660750935954853365">"Շարժապատկերի սանդղակը` 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Անջատել շարժապատկերը"</item>
+ <item msgid="1138649021950863198">"Շարժապատկերի սանդղակը .5x"</item>
+ <item msgid="4394388961370833040">"Շարժապատկերի սանդղակը` 1x"</item>
+ <item msgid="8125427921655194973">"Շարժապատկերի սանդղակը 1.5x"</item>
+ <item msgid="3334024790739189573">"Շարժապատկերի սանդղակը` 2x"</item>
+ <item msgid="3170120558236848008">"Շարժանկարի սանդղակը` 5x"</item>
+ <item msgid="1069584980746680398">"Շարժապատկերի սանդղակը` 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ոչ մեկը"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ապահով)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ապահով)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ապահով)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ապահով)"</item>
+ <item msgid="3547211260846843098">"4K (մասշտաբավորված)"</item>
+ <item msgid="5411365648951414254">"4K (մասշտաբավորված, ապահով)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (երկէկրան)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ոչ մեկը"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Համակարգային հետագիծ (գծապատկերներ)"</item>
+ <item msgid="1340692776955662664">"Կանչել glGetError-ի կույտը"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Անջատված"</item>
+ <item msgid="675719912558941285">"Ներկել ոչ ուղղանկյունային կտրվածքի տարածքը կապույտով"</item>
+ <item msgid="1064373276095698656">"Փորձարկված թեստի գունանշումը կանաչով"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Անջատել"</item>
+ <item msgid="2751513398307949636">"Էկրանի վրա որպես գոտիներ"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo-ում"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Անջատված է"</item>
+ <item msgid="7688197031296835369">"Ցույց տալ գերազանցված հատվածները"</item>
+ <item msgid="2290859360633824369">"Ցույց տալ դալտոնիզմի ոլորտները"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Սովորական սահման"</item>
+ <item msgid="4071574792028999443">"Հետնաշերտում գործողություններ չկան"</item>
+ <item msgid="4810006996171705398">"Առավելագույնը 1 գործընթաց"</item>
+ <item msgid="8586370216857360863">"Առավելագույնը 2 գործընթաց"</item>
+ <item msgid="836593137872605381">"Առավելագույնը 3 գործընթաց"</item>
+ <item msgid="7899496259191969307">"Ամենաշատը 4 գործընթաց"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Լիցքավորում"</item>
+ <item msgid="5220695614993094977">"MTP (Մեդիա ֆայլերի փոխանցման հաղորդակարգ)"</item>
+ <item msgid="2086000968159047375">"PTP (Նկարների փոխանցման հաղորդակարգ)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Ձայնի աղբյուրը"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy-rAM/strings.xml
index ae8bab4..a2b901a 100644
--- a/packages/SettingsLib/res/values-hy-rAM/strings.xml
+++ b/packages/SettingsLib/res/values-hy-rAM/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Ընտրել պրոֆիլ"</string>
<string name="category_personal" msgid="1299663247844969448">"Անձնական"</string>
<string name="category_work" msgid="8699184680584175622">"Աշխատանքային"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Ծրագրավորման ընտրանքներ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Միացնել մշակողի ընտրանքները"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Կարգավորել ընտրանքները ծրագրի ծրագրավորման համար"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Ծրագրավորման ընտրանքներն այլևս հասանելի չեն այս օգտվողի համար"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-ի կարգավորումները հասանելի չեն այս օգտվողին"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Միակցման կարգավորումները հասանելի չեն այս օգտվողին"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Մատչման կետի անվան կարգավորումները հասանելի չեն այս օգտվողին"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB վրիպազերծում"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Կարգաբերել ռեժիմը, երբ USB-ն միացված է"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Չեղարկել USB վրիպազերծման լիազորումները"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Սխալի հաղորդման դյուրանցում"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Գործարկման ցանկում ցույց տալ կոճակը՝ վրիպակների հաղորդման համար"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Մնալ արթուն"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Էկրանը երբեք չի քնի լիցքավորման ընթացքում"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Միացնել Bluetooth HCI snoop log-ը"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Կորզել բոլոր bluetooth HCI փաթեթները մի ֆայլում"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ապակողպում"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Թույլ տալ սկզբնաբեռնման բեռնիչի ապակողպումը"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Թույլատրե՞լ OEM ապակողպումը:"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ԶԳՈՒՇԱՑՈՒՄ. Այս կարգավորումը միացրած ժամանակ սարքի պաշտպանության գործառույթները չեն աջակցվի այս սարքի վրա:"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Ընտրեք տեղադրությունը կեղծող հավելված"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Տեղադրությունը կեղծող հավելված տեղակայված չէ"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Տեղադրությունը կեղծող հավելված՝ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Ցանց"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Անլար էկրանի վկայագրում"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Միացնել Wi‑Fi մանրամասն գրանցամատյանները"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi-ից կտրուկ անցում բջջային ինտերնետի"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Միշտ թույլատրել Wi‑Fi ռոումինգի որոնումը"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Օգտագործել DHCP ծրագրի ավելի հին տարբերակները"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Բջջային տվյալները՝ միշտ ակտիվացրած"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Թույլատրել/արգելել Wi‑Fi ռոումինգի որոնումը՝ կախված միջերեսում տվյալների երթևեկի ծավալից"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Տեղեկամատյանի պահնակի չափերը"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Ընտրեք տեղեկամատյանի չափը մեկ պահնակի համար"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Ընտրեք USB կարգավորումը"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Ընտրեք USB կարգավորումը"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Թույատրել կեղծ տեղադրությունները"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Թույլ տալ կեղծ տեղադրություններ"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Միացնել ցուցադրման հատկանիշների ստուգումը"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Օգտագործել Lollipop-ի DHCP ծրագիրը՝ նոր Android DHCP ծրագրի փոխարեն:"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Միշտ ակտիվացրած պահել բջջային տվյալները, նույնիսկ Wi‑Fi-ը միացրած ժամանակ (ցանցերի միջև արագ փոխարկման համար):"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Թույլատրե՞լ USB-ի վրիպազերծումը:"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB վրիպազերծումը միայն ծրագրավորման նպատակների համար է: Օգտագործեք այն ձեր համակարգչից տվյալները ձեր սարք պատճենելու համար, առանց ծանուցման ձեր սարքի վրա ծրագրեր տեղադրելու և տվյալների մատյանը ընթերցելու համար:"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Փակե՞լ USB-ի վրիպազերծման մուտքը` անջատելով այն բոլոր համակարգիչներից, որտեղ նախկինում թույլատրել էիք:"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ընդունե՞լ ծրագրավորման կարգավորումներ:"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Այս կարգավորումները միայն ծրագրավորման նպատակների համար են նախատեսված: Դրանք կարող են խանգարել ձեր սարքի կամ ծրագրի աշխատանքին:"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Ստուգել հավելվածները USB-ի նկատմամբ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Ստուգեք տեղադրված հավելվածը ADB/ADT-ի միջոցով կասկածելի աշխատանքի պատճառով:"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Տեղային տերմինալ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Միացնել տերմինալային հավելվածը, որն առաջարկում է մուտք տեղային խեցի"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ստուգում"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Կարգավորել HDCP ստուգման վարքագիծը"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Վրիպազերծում"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Ընտրել վրիպազերծման հավելվածը"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Վրիպազերծման ծրագիրը կարգավորված չէ"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Վրիպազերծող հավելվածը` <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Ընտրել հավելվածը"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ոչինչ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Սպասել վրիպազերծիչին"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Վրիպազերծված ծրագրիը սպասում է վրիպազերծիչի կցմանը մինչ կատարումը"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Մուտքագրում"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Պատկերում"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Սարքաշարի արագացված նյութավորում"</string>
+ <string name="media_category" msgid="4388305075496848353">"Մեդիա"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Մշտադիտարկում"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Խիստ ռեժիմն ակտիվացված է"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Լուսավորել էկրանը` ծրագրի գլխավոր շղթայի վրա երկար աշխատելիս"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Նշիչի տեղադրություն"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Էկրանի վերադրումը ցույց է տալիս ընթացիկ հպման տվյալները"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Ցույց տալ հպումները"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Ցուցադրել հպման տեսանելի արձագանքը"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Ցույց տալ մակերեսի թարմացումները"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Թող պատուհանի ամբողջական մակերեսները առկայծեն, երբ թարմացվում են"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Ցույց տալ GPU տեսքի թարմացումները"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ցույց տալ ֆլեշ տեսքերը պատուհանի ներսում GPU-ով պատկերելու ընթացքում"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ցույց տալ սարքաշարի ծածկույթի թարմացումները"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Թող սարքաշարի ծածկույթները կանաչ գույնով առկայծեն, երբ թարմացվեն"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Վրիպազերծել GPU գերազանցումները"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Կասեցնել HW վերադրումները"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Միշտ օգտագործել GPU-ն` էկրանի կազմման համար"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Նմանակել գունատարածքը"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ակտիվացնել OpenGL հետքերը"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Անջատել USB աուդիո երթուղայնացումը"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Անջատել ավտոմատ երթուղայնացումը դեպի USB աուդիո սարքեր"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Ցուցադրել կապակցումների դասավորությունը"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Ցույց տալ կտրվածքի սահմանները, լուսանցքները և այլն"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Փոխել RTL-ի դասավորության ուղղությունը"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Դարձնել էկրանի դասավորության ուղղությունը դեպի RTL բոլոր լեզուների համար"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Ցույց տալ CPU-ի աշխատանքը"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Էկրանի վերադրումը ցույց է տալիս ընթացիկ CPU օգտագործումը"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Ստիպել GPU-ին մատուցել"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Ստիպողաբար GPU-ի օգտագործում 2-րդ պատկերի համար"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Ստիպել 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Միացնել 4x MSAA-ը OpenGL ES 2.0 ծրագրերում"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Կարգաբերել ոչ-ուղղանկյուն կտրվածքի գործողությունները"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU պրոֆիլի ցուցադրում"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Պատուհանի շարժապատկերի սանդղակ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Անցումային շարժական սանդղակ"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Շարժանկարի տևողության սանդղակ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Կրկնաստեղծել երկրորդական էկրան"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Հավելվածներ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Պետք չէ պահել գործողությունները"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Ոչնչացնել ցանացած գործունեություն օգտվողի հեռացումից հետո"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Հետնաշերտի գործընթացի սահմանաչափ"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Ցույց տալ բոլոր ANR-երը"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Ցուցադրել այն ծրագիրը, որը չի արձագանքում երկխոսությունը հետնաշերտի ծրագրերի համար"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Միշտ թույլատրել ծրագրեր արտաքին պահեստում"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Թույլ է տալիս պահել հավելվածը արտաքին սարքում՝ մանիֆեստի արժեքներից անկախ"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Ստիպել, որ ակտիվությունների չափերը լինեն փոփոխելի"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Բոլոր ակտիվությունների չափերը բազմապատուհան ռեժիմի համար դարձնել փոփոխելի՝ մանիֆեստի արժեքներից անկախ:"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Աշխատասեղանի պահուստավորման գաղտնաբառ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Աշխատասեղանի ամբողջական պահուստավորումները այժմ պաշտպանված չեն"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Աշխատասեղանի ամբողջական պահուստավորման համար ընտրել փոխել կամ հեռացնել գաղտնաբառը"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Պահուստավորման նոր գաղտնաբառը սահմանված է"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Նոր գաղտնաբառը և հաստատումը չեն համընկնում"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Ձախողում գաղտնաբառի պահուստավորման կարգավորման ընթացքում"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Պայծառ (կանխադրված)"</item>
+ <item msgid="8446070607501413455">"Բնական"</item>
+ <item msgid="6553408765810699025">"Սովորական"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Բարելավված գույներ"</item>
+ <item msgid="8280754435979370728">"Բնական գույներ"</item>
+ <item msgid="5363960654009010371">"Թվային բովանդակության համար հարմարեցված գույներ"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Միացրած հավելվածներ"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Անջատված: Հպեք՝ փոխարկելու համար:"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Միացրած: Հպեք՝ փոխարկելու համար:"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Աշխատեցվող ծառայություններ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Դիտել և վերահսկել ընթացիկ աշխատեցվող ծառայությունները"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Գիշերային ռեժիմ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Անջատված"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Միշտ միացված"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Ավտոմատ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Վերածել ֆայլային գաղտնագրման"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Փոխարկել…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Ֆայլային գաղտնագրումն արդեն կատարվել է"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Վերածում ֆայլային գաղտնագրման"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Ստեղծեք ֆայլային գաղտնագրում՝ փոխարկելով տվյալների բաժինը:\n !!Ուշադրություն!! Ձեր բոլոր տվյալները կջնջվեն:\n Այս գործառույթը դեռ գտնվում է փորձարկման փուլում և հնարավոր է ճիշտ չաշխատի:\n Շարունակելու համար սեղմեք «Սրբել և փոխարկել...» կոճակը:"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Սրբել և փոխարկել…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Նկարի գունային ռեժիմ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Օգտագործել sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Կասեցված է"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Միագույն դարձնել"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Դեյտերանոմալիա (կարմիր-կանաչ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Պրոտանոմալիա (կարմիր-կանաչ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Տրիտանոմալիա (կապույտ-դեղին)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Գունային կարգաբերում"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Սա փորձնական գործառույթ է և կարող է ազդել աշխատանքի վրա:"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Գերազանցված է <xliff:g id="TITLE">%1$s</xliff:g>-ից"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index c2488df..5aadc13 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Dicekal"</item>
<item msgid="1805837518286731242">"Menghindari sambungan buruk untuk sementara"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Jangan periksa"</item>
+ <item msgid="6042769699089883931">"Hanya periksa konten DRM"</item>
+ <item msgid="9174900380056846820">"Selalu periksa"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Jangan gunakan pemeriksaan HDCP"</item>
+ <item msgid="3878793616631049349">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item>
+ <item msgid="45075631231212732">"Selalu gunakan pemeriksaan HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/penyangga log"</item>
+ <item msgid="2822309747675758628">"256 K/penyangga log"</item>
+ <item msgid="6699306198357496731">"1 M/penyangga log"</item>
+ <item msgid="5748528643937500349">"4 M/penyangga log"</item>
+ <item msgid="1978629051085111592">"16 M/penyangga log"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasi mati"</item>
+ <item msgid="6624864048416710414">"Skala animasi 0,5x"</item>
+ <item msgid="2219332261255416635">"Skala animasi 1x"</item>
+ <item msgid="3544428804137048509">"Skala animasi 1,5x"</item>
+ <item msgid="3110710404225974514">"Skala animasi 2x"</item>
+ <item msgid="4402738611528318731">"Skala animasi 5x"</item>
+ <item msgid="6189539267968330656">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasi mati"</item>
+ <item msgid="3375781541913316411">"Skala animasi 0,5x"</item>
+ <item msgid="1991041427801869945">"Skala animasi 1x"</item>
+ <item msgid="4012689927622382874">"Skala animasi 1,5x"</item>
+ <item msgid="3289156759925947169">"Skala animasi 2x"</item>
+ <item msgid="7705857441213621835">"Skala animasi 5x"</item>
+ <item msgid="6660750935954853365">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasi mati"</item>
+ <item msgid="1138649021950863198">"Skala animasi 0,5x"</item>
+ <item msgid="4394388961370833040">"Skala animasi 1x"</item>
+ <item msgid="8125427921655194973">"Skala animasi 1,5x"</item>
+ <item msgid="3334024790739189573">"Skala animasi 2x"</item>
+ <item msgid="3170120558236848008">"Skala animasi 5x"</item>
+ <item msgid="1069584980746680398">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Tidak ada"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (aman)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (aman)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (aman)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (aman)"</item>
+ <item msgid="3547211260846843098">"4K (ditingkatkan)"</item>
+ <item msgid="5411365648951414254">"4K (ditingkatkan, aman)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (layar ganda)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Tidak ada"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafis)"</item>
+ <item msgid="1340692776955662664">"Telepon tumpukan di glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Nonaktif"</item>
+ <item msgid="675719912558941285">"Gambar wilayah non-kotak biru"</item>
+ <item msgid="1064373276095698656">"Sorot perintah gambar teruji hijau"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Nonaktif"</item>
+ <item msgid="2751513398307949636">"Di layar dalam bentuk batang"</item>
+ <item msgid="1851438178120770973">"Di adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Nonaktif"</item>
+ <item msgid="7688197031296835369">"Tampilkan area overdraw"</item>
+ <item msgid="2290859360633824369">"Tampilkan area untuk Buta Warna"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Batas standar"</item>
+ <item msgid="4071574792028999443">"Tanpa proses latar belakang"</item>
+ <item msgid="4810006996171705398">"Maksimal 1 proses"</item>
+ <item msgid="8586370216857360863">"Maksimal 2 proses"</item>
+ <item msgid="836593137872605381">"Maksimal 3 proses"</item>
+ <item msgid="7899496259191969307">"Maksimal 4 proses"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Mengisi daya"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Sumber Audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 3033afa..f4fbe1a 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Pilih Profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Pribadi"</string>
<string name="category_work" msgid="8699184680584175622">"Kantor"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opsi pengembang"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktifkan opsi pengembang"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Menyetel opsi untuk pengembangan apl"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Opsi pengembang tidak tersedia untuk pengguna ini"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Setelan VPN tidak tersedia untuk pengguna ini"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Setelan Penambatan tidak tersedia untuk pengguna ini"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Setelan Nama Titik Akses tidak tersedia untuk pengguna ini"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Debugging USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Mode debug ketika USB tersambung"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Cabut otorisasi debug USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Pintasan laporan bug"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Tampilkan tombol di menu daya untuk mengambil laporan bug"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Tetap terjaga"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Layar tidak akan redup selama mengisi daya"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktifkan log pengintaian HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Tangkap semua paket HCI bluetooth di dalam file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Buka kunci OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Izinkan bootloader dibuka kuncinya"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Izinkan buka kunci OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"PERINGATAN: Fitur perlindungan perangkat tidak akan berfungsi di perangkat ini saat setelan diaktifkan."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Pilih aplikasi lokasi palsu"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Tidak ada aplikasi lokasi palsu yang disetel"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikasi lokasi palsu: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Jaringan"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Sertifikasi layar nirkabel"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktifkan Pencatatan Log Panjang Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Pengalihan Wi-Fi Agresif ke Seluler"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Selalu izinkan Pemindaian Roaming Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Gunakan klien DHCP lawas"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Data seluler selalu aktif"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Izinkan/Larang Pemindaian Roaming Wi-Fi berdasarkan jumlah lalu lintas data yang ada di antarmuka"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Ukuran penyangga pencatat log"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Ukuran Pencatat Log per penyangga log"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Pilih Konfigurasi USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Pilih Konfigurasi USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Mengizinkan lokasi palsu"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Mengizinkan lokasi palsu"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Aktifkan inspeksi atribut tampilan"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Gunakan klien DHCP dari Lollipop alih-alih klien DHCP Android baru."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Selalu aktifkan data seluler, meski Wi-Fi aktif (agar jaringan beralih dengan cepat)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Izinkan melakukan debug USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Debugging USB dimaksudkan untuk tujuan pengembangan saja. Gunakan untuk menyalin data antara komputer dan perangkat Anda, memasang apl pada perangkat tanpa notifikasi, dan membaca data log."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Cabut akses ke debug USB dari semua komputer yang telah Anda otorisasi sebelumnya?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Izinkan setelan pengembangan?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Setelan ini hanya dimaksudkan untuk penggunaan pengembangan. Setelan dapat menyebabkan perangkat dan aplikasi yang menerapkannya rusak atau tidak berfungsi semestinya."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikasi aplikasi melalui USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Periksa perilaku membahayakan dalam aplikasi yang terpasang melalui ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal lokal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktifkan aplikasi terminal yang menawarkan akses kerangka lokal"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Pemeriksaan HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Setel perilaku pemeriksaan HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Pilih apl debug"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Tidak ada aplikasi debug yang disetel"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikasi debug: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Pilih aplikasi"</string>
+ <string name="no_application" msgid="2813387563129153880">"Tidak ada"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Tunggu debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikasi yang di-debug menunggu debugger menempel sebelum berjalan"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Masukan"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Gambar"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Render yang dipercepat perangkat keras"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Memantau"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Mode ketat diaktifkan"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Kedipkan layar saat apl beroperasi lama pada utas utama"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Lokasi penunjuk"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Hamparan layar menampilkan data sentuhan saat ini"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Tampilkan sentuhan"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Tampilkan masukan visual untuk sentuhan"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Lihat pembaruan permukaan"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Sorot seluruh permukaan jendela saat diperbarui"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Tampilkan pembaruan tampilan GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Tampilan cepat dlm jendela saat digambar dgn GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Tunjukkan pembaruan lapisan hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lapisan hardware berkedip hijau saat memperbarui"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug overdraw oleh GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Nonaktifkan lapisan HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Selalu gunakan GPU untuk pengomposisian layar"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulasikan ruang warna"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Aktifkan jejak OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Perutean audio USB nonaktif"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Perutean otomatis ke periferal audio USB nonaktif"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Tampilkan batas tata letak"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Tampilkan batas klip, margin, dll."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Paksa arah tata letak RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Paksa arah tata letak layar RTL untuk semua lokal"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Tampilkan penggunaan CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Hamparan layar menampilkan penggunaan CPU saat ini"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Paksa perenderan GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Paksa penggunaan GPU untuk gambar 2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Aktifkan 4x MSAA dalam aplikasi OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debug operasi klip non-kotak"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Penguraian GPU profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Skala animasi jendela"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Skala animasi transisi"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Skala durasi animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulasikan tampilan sekunder"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikasi"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Jangan simpan kegiatan"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hancurkan tiap kgiatan setelah ditinggal pengguna"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Batas proses latar blkg"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Tampilkan semua ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Tmplkn dialog Apl Tidak Merespons utk apl ltr blkg"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Paksa izinkan aplikasi di eksternal"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Membuat semua aplikasi dapat ditulis ke penyimpanan eksterna"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Paksa aktivitas agar ukurannya dapat diubah"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Membuat semua aktivitas dapat diubah ukurannya untuk banyak jendela, terlepas dari nilai manifes."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Sandi cadangan desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Saat ini cadangan desktop penuh tidak dilindungi"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Sentuh guna mengubah atau menghapus sandi untuk cadangan lengkap desktop"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Sandi cadangan baru telah disetel"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Sandi baru dan konfirmasinya tidak cocok."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Gagal menyetel sandi cadangan"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Terang (default)"</item>
+ <item msgid="8446070607501413455">"Alami"</item>
+ <item msgid="6553408765810699025">"Standar"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Warna yang disempurnakan"</item>
+ <item msgid="8280754435979370728">"Warna-warni alami seperti yang dilihat oleh mata"</item>
+ <item msgid="5363960654009010371">"Warna yang dioptimalkan untuk konten digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplikasi yang tidak aktif"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Tidak aktif. Sentuh untuk mengalihkan."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktif. Sentuh untuk mengalihkan."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Layanan yang sedang berjalan"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Melihat dan mengontrol layanan yang sedang berjalan"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Mode malam"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Dinonaktifkan"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Selalu aktif"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Otomatis"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konversi ke enkripsi file"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konversi..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Sudah dienkripsi berbasis file"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Mengonversi ke enkripsi berbasis file"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konversi partisi data ke enkripsi berbasis file.\n !!Peringatan!! Tindakan ini akan menghapus semua data.\n Fitur ini masih dalam tahap alfa dan mungkin tidak berfungsi dengan baik.\n Tekan \'Hapus dan konversi…\' untuk melanjutkan."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Hapus dan konversi…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mode warna gambar"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Gunakan sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Nonaktifkan"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromasi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteromali (merah-hijau)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (merah-hijau)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomali (biru-kuning)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Koreksi warna"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Fitur ini bersifat eksperimental dan dapat memengaruhi kinerja."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Digantikan oleh <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-is-rIS/arrays.xml b/packages/SettingsLib/res/values-is-rIS/arrays.xml
index 540956f..bbc7aec6 100644
--- a/packages/SettingsLib/res/values-is-rIS/arrays.xml
+++ b/packages/SettingsLib/res/values-is-rIS/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Læst"</item>
<item msgid="1805837518286731242">"Forðast lélega tengingu tímabundið"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Athuga aldrei"</item>
+ <item msgid="6042769699089883931">"Athuga aðeins höfundarréttarvarið efni"</item>
+ <item msgid="9174900380056846820">"Athuga alltaf"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nota aldrei HDCP-eftirlit"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 k"</item>
+ <item msgid="505611754508988476">"256 k"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 k"</item>
+ <item msgid="3534782711045262344">"256 k"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 k/biðminni"</item>
+ <item msgid="2822309747675758628">"256 k/biðminni"</item>
+ <item msgid="6699306198357496731">"1 M/biðminni"</item>
+ <item msgid="5748528643937500349">"4 M/biðminni"</item>
+ <item msgid="1978629051085111592">"16 M/biðminni"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Slökkt á hreyfiáhrifum"</item>
+ <item msgid="6624864048416710414">"Lengd hreyfiáhrifa 5x"</item>
+ <item msgid="2219332261255416635">"Lengd hreyfiáhrifa 1x"</item>
+ <item msgid="3544428804137048509">"Lengd hreyfiáhrifa 1,5x"</item>
+ <item msgid="3110710404225974514">"Lengd hreyfiáhrifa 2x"</item>
+ <item msgid="4402738611528318731">"Lengd hreyfiáhrifa 5x"</item>
+ <item msgid="6189539267968330656">"Lengd hreyfiáhrifa 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Slökkt á hreyfiáhrifum"</item>
+ <item msgid="3375781541913316411">"Lengd hreyfiáhrifa 5x"</item>
+ <item msgid="1991041427801869945">"Lengd hreyfiáhrifa 1x"</item>
+ <item msgid="4012689927622382874">"Lengd hreyfiáhrifa 1,5x"</item>
+ <item msgid="3289156759925947169">"Lengd hreyfiáhrifa 2x"</item>
+ <item msgid="7705857441213621835">"Lengd hreyfiáhrifa 5x"</item>
+ <item msgid="6660750935954853365">"Lengd hreyfiáhrifa 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Slökkva á hreyfiáhrifum"</item>
+ <item msgid="1138649021950863198">"Lengd hreyfiáhrifa 0,5x"</item>
+ <item msgid="4394388961370833040">"Lengd hreyfiáhrifa 1x"</item>
+ <item msgid="8125427921655194973">"Lengd hreyfiáhrifa 1,5x"</item>
+ <item msgid="3334024790739189573">"Lengd hreyfiáhrifa 2x"</item>
+ <item msgid="3170120558236848008">"Lengd hreyfiáhrifa 5x"</item>
+ <item msgid="1069584980746680398">"Lengd hreyfiáhrifa 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ekkert"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (öruggt)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (öruggt)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (öruggt)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (öruggt)"</item>
+ <item msgid="3547211260846843098">"4K (stækkað)"</item>
+ <item msgid="5411365648951414254">"4K (stækkað, öruggt)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (tvískiptur skjár)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ekkert"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafík)"</item>
+ <item msgid="1340692776955662664">"Kallastafli á glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Slökkt"</item>
+ <item msgid="675719912558941285">"Teikna klippt svæði sem ekki er rétthyrnt með bláu"</item>
+ <item msgid="1064373276095698656">"Auðkenna prófaðar teikniskipanir með grænu"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Slökkt"</item>
+ <item msgid="2751513398307949636">"Á skjánum sem stikur"</item>
+ <item msgid="1851438178120770973">"Í adb-skel dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Slökkt"</item>
+ <item msgid="7688197031296835369">"Sýna yfirteiknuð svæði"</item>
+ <item msgid="2290859360633824369">"Sýna svæði fyrir litblinda"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Venjulegt hámark"</item>
+ <item msgid="4071574792028999443">"Engar bakgrunnsvinnslur"</item>
+ <item msgid="4810006996171705398">"Að hámarki 1 vinnsla"</item>
+ <item msgid="8586370216857360863">"Að hámarki 2 vinnslur"</item>
+ <item msgid="836593137872605381">"Að hámarki 3 vinnslur"</item>
+ <item msgid="7899496259191969307">"Að hámarki 4 vinnslur"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Í hleðslu"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio Source"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is-rIS/strings.xml
index 21f80f4..4139e6e 100644
--- a/packages/SettingsLib/res/values-is-rIS/strings.xml
+++ b/packages/SettingsLib/res/values-is-rIS/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Veldu snið"</string>
<string name="category_personal" msgid="1299663247844969448">"Persónulegt"</string>
<string name="category_work" msgid="8699184680584175622">"Vinna"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Forritunarkostir"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Virkja valkosti þróunaraðila"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Stilla valkosti fyrir forritaþróun"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Valkostir þróunaraðila eru ekki í boði fyrir þennan notanda"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-stillingar eru ekki í boði fyrir þennan notanda"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tjóðrunarstillingar eru ekki í boði fyrir þennan notanda"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Stillingar fyrir heiti aðgangsstaðar eru ekki í boði fyrir þennan notanda"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-villuleit"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Villuleitarstilling þegar USB er tengt."</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Afturkalla USB-villuleitarheimildir"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Flýtileið í villutilkynningu"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Sýna hnapp til að skrá villutilkynningu í valmynd aflrofans"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Vaka"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjárinn fer aldrei í hvíld við hleðslu"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gera HCI-snuðraraskrá Bluetooth virka"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Fanga alla HCI-pakka Bluetooth í skrá"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Opnun framleiðanda"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leyfa opnun ræsiforritsins"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leyfa opnun framleiðanda?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"VIÐVÖRUN: Öryggiseiginleikar til að vernda tækið virka ekki í þessu tæki þegar þessi stilling er virk."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Velja forrit fyrir gervistaðsetningar"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ekkert forrit fyrir gervistaðsetningar sett upp"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Forrit fyrir gervistaðsetningar: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Netkerfi"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Vottun þráðlausra skjáa"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Kveikja á ítarlegri skráningu Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Ágeng yfirfærsla frá Wi-Fi til símkerfis"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Leyfa alltaf reikileit með Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Nota gamlan DHCP-biðlara"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Alltaf kveikt á farsímagögnum"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Leyfa/banna reikileit með Wi-Fi á grunni þess hversu mikil gagnaumferð er fyrir hendi í viðmótinu"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Annálsritastærðir biðminna"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veldu annálsritastærðir á biðminni"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Velja USB-stillingar"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Velja USB-stillingar"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Leyfa gervistaðsetningar"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Leyfa gervistaðsetningar"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Virkja yfirlit skoðunar eiginda"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Nota gamla DHCP-biðlarann úr Lollipop í staðinn fyrir nýja Android DHCP-biðlarann."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hafa alltaf kveikt á farsímagögnum, líka þegar kveikt er á Wi-Fi (til að skipta megi hratt milli kerfa)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Leyfa USB-villuleit?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-villuleit er aðeins ætluð til nota í þróunarskyni. Hana má nota til að afrita gögn á milli tölvu og tækis, setja forrit upp í tækinu án tilkynninga og lesa annálagögn."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Afturkalla aðgang að USB-villuleit í öllum tölvum sem þú hefur áður veitt heimild?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Leyfa þróunarstillingar?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Þessar stillingar eru einungis ætlaðar í þróunarskyni. Þær geta valdið því að tækið og forrit þess bili eða starfi á rangan hátt."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Staðfesta forrit gegnum USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kanna skaðlega hegðun forrita sem sett eru upp frá ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Staðbundin skipanalína"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Virkja skipanalínuforrit sem leyfir staðbundinn skeljaraðgang"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-athugun"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Velja virkni HDCP-ath."</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Villuleit"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Velja villuleitarforrit"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Ekkert villuleitarforrit valið"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Villuleitarforrit: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Veldu forrit"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ekkert"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Bíða eftir villuleit"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Villuleituð forrit bíða eftir að villuleit tengist fyrir keyrslu"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Inntak"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Teikning"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Myndþýðing með vélbúnaðarhröðun"</string>
+ <string name="media_category" msgid="4388305075496848353">"Margmiðlun"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Eftirlit"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Kveikt á strangri stillingu"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Blikka skjá ef forrit gera tímafreka hluti á aðalþræði"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Staðsetning bendils"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Skjáyfirlögn sem sýnir rauntímagögn um snertingar"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Sýna snertingar"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Sýna snertingar myndrænt"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Sýna yfirborðsuppfærslur"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Láta allt yfirborð glugga blikka við uppfærslu"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Sýna uppfærslur skjákorts"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Láta svæði í gluggum blikka við skjákortsteiknun"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Sýna uppfærslur vélbúnaðar"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Láta vélbúnaðarlög blikka græn við uppfærslu"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Yfirteiknun skjákorts"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Slökkva á vélb.yfirlögnum"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Nota alltaf skjákort við samsetningu skjámyndar"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Herma eftir litasviði"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Kveikja á OpenGL-rakningu"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Slökkva á USB-hljóðbeiningu"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Slökkva á sjálfvirkri beiningu til USB-hljóðtækja"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Sýna mörk í uppsetningu"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Sýna skurðlínur, spássíur o.s.frv."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Þvinga umbrot frá hægri til vinstri"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Þvinga umbrot skjás frá hægri til vinstri fyrir alla tungumálskóða"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Sýna örgjörvanotkun"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Skjáyfirlögn sem sýnir núverandi örgjörvanotkun"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Þvinga skjákortsteiknun"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Þvinga notkun skjákorts fyrir tvívíða teikningu"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Þvinga 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Virkja 4x MSAA í OpenGL ES 2.0 forritum"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Villuleita klippt svæði sem ekki eru rétthyrnd"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Greina teiknun skjákorts"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Kvarði gluggahreyfinga"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Lengd hreyfiumbreytinga"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Tímalengd hreyfiáhrifa"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Herma eftir aukaskjáum"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Forrit"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ekki vista virkni"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Eyðileggja öll verk um leið og notandi yfirgefur þau"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Takmörkun á bakgrunnsvinnslum"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Öll forrit sem svara ekki"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Sýna „Forrit svarar ekki“ fyrir bakgrunnsforrit"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Þvinga fram leyfi forrita í ytri geymslu"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Gerir hvaða forriti sem er kleift að skrifa í ytri geymslu, burtséð frá gildum í upplýsingaskrá"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Þvinga breytanlega stærð virkni"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Gerir stærð allrar virkni breytanlega svo að hún henti fyrir marga glugga, óháð gildum í upplýsingaskrá."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Aðgangsorð tölvuafritunar"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Heildarafritun á tölvu er ekki varin sem stendur."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Snertu til að breyta eða fjarlægja aðgangsorðið fyrir heildarafritun á tölvu"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nýtt aðgangsorð fyrir afritun valið"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nýja aðgangsorðið og staðfestingaraðgangsorðið eru ekki eins"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Villa við að velja aðgangsorð fyrir afritun"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Líflegir (sjálfgefið)"</item>
+ <item msgid="8446070607501413455">"Náttúrulegir"</item>
+ <item msgid="6553408765810699025">"Hefðbundnir"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Áhrifaríkir litir"</item>
+ <item msgid="8280754435979370728">"Náttúrulegir litir eins og augað nemur þá"</item>
+ <item msgid="5363960654009010371">"Litir sérhannaðir fyrir stafrænt efni"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Óvirk forrit"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Óvirkt. Snertu til að breyta."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Virkt. Snertu til að breyta."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Þjónustur í gangi"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Skoða og stjórna þjónustum í gangi"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Næturstilling"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Óvirkt"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Alltaf kveikt"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Sjálfvirkt"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Umbreyta í dulkóðun skráa"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Umbreyta…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Þegar dulkóðað á grundvelli skráa"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Umbreytir í dulkóðun á grundvelli skráa"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Umbreyting gagnaskiptingar í dulkóðun á grundvelli skráa.\n !!Viðvörun!! Þetta eyðir öllum gögnunum þínum.\n Þetta er tilraunaeiginleiki og virkar hugsanlega ekki rétt.\n Ýttu á „Þurrka út og umbreyta…“ til að halda áfram."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Þurrka út og umbreyta…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Litastilling mynda"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Nota sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Óvirkt"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Allitblinda"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Litblinda (rauðgræn)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Litblinda (rauðgræn)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Litblinda (blágul)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Litaleiðrétting"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Þessi eiginleiki er á tilraunastigi og getur haft áhrif á frammistöðu."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Hnekkt af <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index 719adbc..686d61d 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloccato"</item>
<item msgid="1805837518286731242">"Al momento vengono evitate connessioni deboli"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Non verificare mai"</item>
+ <item msgid="6042769699089883931">"Verifica solo per contenuti DRM"</item>
+ <item msgid="9174900380056846820">"Verifica sempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Non utilizzare mai la verifica HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB/buffer log"</item>
+ <item msgid="2822309747675758628">"256 kB/buffer log"</item>
+ <item msgid="6699306198357496731">"1 MB/buffer log"</item>
+ <item msgid="5748528643937500349">"4 MB/buffer log"</item>
+ <item msgid="1978629051085111592">"16 MB/buffer log"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animazione disattivata"</item>
+ <item msgid="6624864048416710414">"Scala animazione 0,5x"</item>
+ <item msgid="2219332261255416635">"Scala animazione 1x"</item>
+ <item msgid="3544428804137048509">"Scala animazione 1,5x"</item>
+ <item msgid="3110710404225974514">"Scala animazione 2x"</item>
+ <item msgid="4402738611528318731">"Scala animazione 5x"</item>
+ <item msgid="6189539267968330656">"Scala animazione 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animazione disattivata"</item>
+ <item msgid="3375781541913316411">"Scala animazione 0,5x"</item>
+ <item msgid="1991041427801869945">"Scala animazione 1x"</item>
+ <item msgid="4012689927622382874">"Scala animazione 1,5x"</item>
+ <item msgid="3289156759925947169">"Scala animazione 2x"</item>
+ <item msgid="7705857441213621835">"Scala animazione 5x"</item>
+ <item msgid="6660750935954853365">"Scala animazione 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animazione disattivata"</item>
+ <item msgid="1138649021950863198">"Scala animazione 0,5x"</item>
+ <item msgid="4394388961370833040">"Scala animazione 1x"</item>
+ <item msgid="8125427921655194973">"Scala animazione 1,5x"</item>
+ <item msgid="3334024790739189573">"Scala animazione 2x"</item>
+ <item msgid="3170120558236848008">"Scala animazione 5x"</item>
+ <item msgid="1069584980746680398">"Scala animazione 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nessuno"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (protetto)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (protetto)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (protetto)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (protetto)"</item>
+ <item msgid="3547211260846843098">"4K (ottimizzato)"</item>
+ <item msgid="5411365648951414254">"4K (ottimizzato, protetto)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (doppio schermo)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nessuna"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafica)"</item>
+ <item msgid="1340692776955662664">"Stack di chiamate su glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"OFF"</item>
+ <item msgid="675719912558941285">"Area ritaglio non rettangolare blu"</item>
+ <item msgid="1064373276095698656">"Evidenzia cmd disegno test in verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"OFF"</item>
+ <item msgid="2751513398307949636">"Su schermo sotto forma di barre"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"OFF"</item>
+ <item msgid="7688197031296835369">"Mostra aree overdraw"</item>
+ <item msgid="2290859360633824369">"Mostra aree con deuteranomalia"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite standard"</item>
+ <item msgid="4071574792028999443">"Nessun processo in background"</item>
+ <item msgid="4810006996171705398">"1 processo al massimo"</item>
+ <item msgid="8586370216857360863">"2 processi al massimo"</item>
+ <item msgid="836593137872605381">"3 processi al massimo"</item>
+ <item msgid="7899496259191969307">"4 processi al massimo"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Ricarica"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Sorgente audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index c2ad84e..33a15d4 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Scegli profilo"</string>
<string name="category_personal" msgid="1299663247844969448">"Personali"</string>
<string name="category_work" msgid="8699184680584175622">"Lavoro"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opzioni sviluppatore"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Attiva Opzioni sviluppatore"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Imposta opzioni per lo sviluppo di applicazioni"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Le opzioni sviluppatore non sono disponibili per questo utente"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Le impostazioni VPN non sono disponibili per questo utente"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Le impostazioni Tethering non sono disponibili per questo utente"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Le impostazioni del nome punto di accesso non sono disponibili per questo utente"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Debug USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modalità debug quando è connesso USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoca autorizzazioni debug USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Scorciatoria segnalazione bug"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostra un pulsante per segnalare i bug nel menu di accensione"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Rimani attivo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Lo schermo non va mai in stand-by se sotto carica"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Attiva log di esame HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Acquisisci tutti i pacchetti HCI Bluetooth in un file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Sblocco OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Consenti lo sblocco del bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Consentire lo sblocco OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVVISO. Le funzioni di protezione del dispositivo non funzionano su questo dispositivo se questa impostazione è attiva."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Seleziona app di posizione fittizia"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nessuna app di posizione fittizia impostata"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App di posizione fittizia: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Reti"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificazione display wireless"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Attiva registrazione dettagliata Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi aggressivo per passaggio a cellulare"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Consenti sempre scansioni roaming Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usa client DHCP precedente"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dati cellulare sempre attivi"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Consenti/vieta scansioni roaming Wi-Fi basate sulla quantità di traffico dati presente a livello di interfaccia"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Dimensioni buffer Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Seleziona dimensioni Logger per buffer log"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Seleziona configurazione USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Seleziona configurazione USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Posizioni fittizie"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Consenti posizioni fittizie"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Attiva controllo attributi visualizzazione"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utilizza il client DHCP di Lollipop anziché il nuovo client DHCP Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mantieni sempre i dati cellulare attivi, anche se il Wi‑Fi è attivo (per un passaggio fra reti rapido)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Consentire debug USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Il debug USB è solo a scopo di sviluppo. Utilizzalo per copiare dati tra il computer e il dispositivo, per installare applicazioni sul tuo dispositivo senza notifica e per leggere i dati dei log."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revocare l\'accesso al debug USB da tutti i computer precedentemente autorizzati?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Consentire impostazioni di sviluppo?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Queste impostazioni sono utilizzabili solo a scopo di sviluppo. Possono causare l\'arresto o il comportamento anomalo del dispositivo e delle applicazioni su di esso."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifica app tramite USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Controlla che le applicazioni installate tramite ADB/ADT non abbiano un comportamento dannoso."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminale locale"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Abilita l\'app Terminale che offre l\'accesso alla shell locale"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Verifica HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Comportamento di verifica HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debug"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Seleziona l\'applicazione per il debug"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nessuna applicazione impostata per il debug"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Debug dell\'applicazione: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Seleziona applicazione"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nessuna"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Attendi debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"L\'app in debug attende il debugger prima dell\'esecuzione"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Disegno"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Rendering con accelerazione hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Contenuti multimediali"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoraggio"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Attiva StrictMode"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flash dello schermo in caso di lunghe operazioni sul thread principale"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Posizione puntatore"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Overlay schermo che mostra i dati touch correnti"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostra tocchi"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostra feedback visivi per i tocchi"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Aggiornamenti superficie"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash delle superfici delle finestre all\'aggiornamento"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Aggiornamenti visualizz. GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash delle visualizzazioni dentro le finestre se disegnate con GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Aggiornam. livelli hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lampeggia verde se aggiornam. livelli hardware"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug overdraw GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Disabilita overlay HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Usa sempre GPU per la composizione dello schermo"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simula spazio colore"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Attiva tracce OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disattiva routing audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disattiva routing automatico a periferiche audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostra limiti di layout"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostra limiti, margini dei clip e così via"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forza direzione layout RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Direzione layout schermo RTL per tutte le lingue"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostra utilizzo CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Overlay schermo che mostra l\'uso corrente della CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forza rendering GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forza l\'uso della GPU per i disegni 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forza MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Attiva MSAA 4x in applicazioni OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debug operazioni ritaglio non rettangolare"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Rendering GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Scala animazione finestra"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Scala animazione transizione"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Scala durata animatore"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simula display secondari"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"App"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Non conservare attività"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Elimina ogni attività appena l\'utente la interrompe"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite processi background"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Mostra tutti errori ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostra finestra ANR per applicazioni in background"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forza autorizzazione app su memoria esterna"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Rende l\'app idonea all\'installaz. su mem. esterna, senza considerare i valori manifest"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Imponi formato modificabile alle attività"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Rende il formato di tutte le attività modificabile per la modalità multi-finestra, indipendentemente dai valori manifest."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Password di backup desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"I backup desktop completi non sono attualmente protetti."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Tocca per modificare o rimuovere la password per i backup desktop completi"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nuova password di backup impostata"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Le password inserite non corrispondono"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Impossibile impostare la password di backup"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vivaci (opzione predefinita)"</item>
+ <item msgid="8446070607501413455">"Naturali"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Colori migliorati"</item>
+ <item msgid="8280754435979370728">"Colori naturali e realistici"</item>
+ <item msgid="5363960654009010371">"Colori ottimizzati per i contenuti digitali"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"App non attive"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Non attiva. Tocca per attivare."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Attiva. Tocca per disattivare."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Servizi in esecuzione"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizza e controlla i servizi attualmente in esecuzione"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modalità Notte"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Disattivato"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre attivo"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatico"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converti in crittografia basata su file"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converti..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Crittografia su base file già eseguita"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Conversione in crittografia basata su file"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converti la partizione di dati in crittografia basata su file.\n Attenzione. Questa operazione eliminerà tutti i tuoi dati.\n Questa funzione è in versione alpha, pertanto potrebbe non funzionare correttamente.\n Premi \"Cancella e converti...\" per continuare."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Cancella e converti..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modalità colori immagini"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disattivato"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromìa"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalìa (rosso-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalìa (rosso-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalìa (blu-giallo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correzione del colore"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Questa funzione è sperimentale e potrebbe influire sulle prestazioni."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Valore sostituito da <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index d5f3d9d..24a40b9 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"חסומה"</item>
<item msgid="1805837518286731242">"נמנע זמנית מחיבור חלש"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"אל תבדוק לעולם"</item>
+ <item msgid="6042769699089883931">"בדוק אם יש תוכן DRM בלבד"</item>
+ <item msgid="9174900380056846820">"בדוק תמיד"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"לעולם אל תשתמש בבדיקת HDCP"</item>
+ <item msgid="3878793616631049349">"השתמש בבדיקת HDCP עבור תוכן DRM בלבד"</item>
+ <item msgid="45075631231212732">"תמיד השתמש בבדיקת HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K לכל מאגר יומן"</item>
+ <item msgid="2822309747675758628">"256K לכל מאגר יומן"</item>
+ <item msgid="6699306198357496731">"1M לכל מאגר יומן"</item>
+ <item msgid="5748528643937500349">"4M לכל מאגר יומן"</item>
+ <item msgid="1978629051085111592">"16M לכל מאגר יומן"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"אנימציה כבויה"</item>
+ <item msgid="6624864048416710414">"קנה מידה לאנימציה 5x."</item>
+ <item msgid="2219332261255416635">"קנה מידה לאנימציה 1x"</item>
+ <item msgid="3544428804137048509">"קנה מידה לאנימציה 1.5x"</item>
+ <item msgid="3110710404225974514">"קנה מידה לאנימציה 2x"</item>
+ <item msgid="4402738611528318731">"קנה מידה לאנימציה 5x"</item>
+ <item msgid="6189539267968330656">"קנה מידה לאנימציה 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"אנימציה כבויה"</item>
+ <item msgid="3375781541913316411">"קנה מידה לאנימציה 5x."</item>
+ <item msgid="1991041427801869945">"קנה מידה לאנימציה 1x"</item>
+ <item msgid="4012689927622382874">"קנה מידה לאנימציה 1.5x"</item>
+ <item msgid="3289156759925947169">"קנה מידה לאנימציה 2x"</item>
+ <item msgid="7705857441213621835">"קנה מידה לאנימציה 5x"</item>
+ <item msgid="6660750935954853365">"קנה מידה לאנימציה 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"אנימציה כבויה"</item>
+ <item msgid="1138649021950863198">"קנה מידה לאנימציה 5x."</item>
+ <item msgid="4394388961370833040">"קנה מידה לאנימציה 1x"</item>
+ <item msgid="8125427921655194973">"קנה מידה לאנימציה 1.5x"</item>
+ <item msgid="3334024790739189573">"קנה מידה לאנימציה 2x"</item>
+ <item msgid="3170120558236848008">"קנה מידה לאנימציה 5x"</item>
+ <item msgid="1069584980746680398">"קנה מידה לאנימציה 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"אין"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (מאובטח)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (מאובטח)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (מאובטח)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (מאובטח)"</item>
+ <item msgid="3547211260846843098">"4K (משופר)"</item>
+ <item msgid="5411365648951414254">"4K (משופר, מאובטח)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (מסך כפול)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ללא"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (גרפיקה)"</item>
+ <item msgid="1340692776955662664">"Call Stack ב-glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"כבוי"</item>
+ <item msgid="675719912558941285">"שרטט אזור חיתוך שאינו מלבני בצבע כחול"</item>
+ <item msgid="1064373276095698656">"הדגש את פקודות האיור שנבדקות בצבע ירוק"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"כבוי"</item>
+ <item msgid="2751513398307949636">"במסך כעמודות"</item>
+ <item msgid="1851438178120770973">"ב-adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"כבוי"</item>
+ <item msgid="7688197031296835369">"הצגת אזורים עם חריגה"</item>
+ <item msgid="2290859360633824369">"הצגת אזורים לעיוורון צבעים"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"הגבלה סטנדרטית"</item>
+ <item msgid="4071574792028999443">"אין תהליכים ברקע"</item>
+ <item msgid="4810006996171705398">"תהליך אחד לכל היותר"</item>
+ <item msgid="8586370216857360863">"2 תהליכים לכל היותר"</item>
+ <item msgid="836593137872605381">"3 תהליכים לכל היותר"</item>
+ <item msgid="7899496259191969307">"4 תהליכים לכל היותר"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"בטעינה"</item>
+ <item msgid="5220695614993094977">"MTP (פרוטוקול העברת מדיה)"</item>
+ <item msgid="2086000968159047375">"PTP (פרוטוקול העברת תמונות)"</item>
+ <item msgid="7398830860950841822">"RNDIS (אתרנט ב-USB)"</item>
+ <item msgid="1718924214939774352">"מקור אודיו"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index b025a0d..4a0870e 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"בחר פרופיל"</string>
<string name="category_personal" msgid="1299663247844969448">"אישי"</string>
<string name="category_work" msgid="8699184680584175622">"עבודה"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"אפשרויות מפתח"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"הפעלת אפשרויות מפתח"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"הגדרת אפשרויות לפיתוח אפליקציות"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"אפשרויות מפתח אינן זמינות עבור משתמש זה"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"הגדרות VPN אינן זמינות עבור המשתמש הזה."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"הגדרות עבור שיתוף של חיבור אינטרנט אינן זמינות עבור המשתמש הזה"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"הגדרות עבור שם נקודת גישה (APN) אינן זמינות עבור המשתמש הזה"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"ניפוי באגים ב-USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"מצב ניפוי באגים כאשר USB מחובר"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"ביטול הרשאות לניפוי ב-USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"קיצור של דוח באגים"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"כדי ליצור דוח באגים, הצג לחצן בתפריט לניהול צריכת החשמל"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"השאר פועל"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"המסך לעולם לא יהיה במצב שינה במהלך טעינה"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"הפעלת Snoop Log של Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"אחד את כל חבילות Bluetooth HCI בקובץ"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"ביטול נעילה של OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"אפשר ביטול של נעילת מנהל האתחול"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"האם לאפשר ביטול נעילה של OEM (יצרן ציוד מקורי)?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"אזהרה: תכונות הגנת מכשיר לא יפעלו במכשיר הזה כשההגדרה הזו פועלת."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"בחר אפליקציה של מיקום מדומה"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"לא הוגדרה אפליקציה של מיקום מדומה"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"אפליקציה של מיקום מדומה: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"תקשורת רשתות"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"אישור של תצוגת WiFi"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"הפעל רישום מפורט של Wi‑Fi ביומן"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"העברה אגרסיבית מ-Wi‑Fi לרשת סלולרית"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"התר תמיד סריקות נדידה של Wi‑Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"השתמש בלקוח DHCP מדור קודם"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"נתונים סלולריים פעילים תמיד"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"התר/מנע סריקות נדידה של Wi-Fi בהתבסס על נפח תנועת הנתונים הקיימת בממשק"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"גדלי מאגר של יוצר יומן"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"בחר גדלים של יוצר יומן לכל מאגר יומן"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"בחר תצורת USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"בחר תצורת USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"אפשר מיקומים מדומים"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"אפשר מיקומים מדומים"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"אפשר בדיקת תכונת תצוגה"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"השתמש בלקוח DHCP של Lollipop במקום לקוח DHCP החדש של Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"השאר את הנתונים לנייד פעילים תמיד, גם כש-Wi‑Fi פעיל (למעבר מהיר בין רשתות)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"לאפשר ניפוי באגים של USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"ניפוי באגים באמצעות USB מיועד למטרות פיתוח בלבד. השתמש בו להעתקת נתונים בין המחשב והמכשיר שלך, להתקנת אפליקציות במכשיר ללא התראה ולקריאת נתוני יומן."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"האם לבטל את הגישה לניפוי ב-USB מכל המחשבים שהענקת להם בעבר הרשאה?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"האם להתיר הגדרות פיתוח?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"הגדרות אלה מיועדות לשימוש בפיתוח בלבד. הן עלולות לגרום למכשיר או לאפליקציות המותקנות בו לקרוס או לפעול באופן לא תקין."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"אמת אפליקציות באמצעות USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"בדוק אפליקציות שהותקנו באמצעות ADB/ADT לאיתור התנהגות מזיקה."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"מסוף מקומי"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"הפעל אפליקציית מסוף המציעה גישה מקומית למעטפת"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"בדיקת HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"הגדר אופן בדיקת HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ניפוי באגים"</string>
+ <string name="debug_app" msgid="8349591734751384446">"בחר אפליקציה לניפוי"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"לא הוגדרה אפליקציה לניפוי"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"אפליקציה לניפוי: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"בחר אפליקציה"</string>
+ <string name="no_application" msgid="2813387563129153880">"אף אחת"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"המתן למנקה באגים"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"אפליקציה שנוקו בה הבאגים ממתינה למנקה הבאגים לצירוף לפני ביצוע"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"קלט"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"שרטוט"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"עיבוד מואץ של חומרה"</string>
+ <string name="media_category" msgid="4388305075496848353">"מדיה"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"מעקב"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"מצב קפדני מופעל"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"גרום למסך להבהב כאשר אפליקציות מבצעות פעולות ארוכות בשרשור הראשי"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"מיקום מצביע"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"שכבת-על של המסך המציגה את נתוני המגע הנוכחיים"</string>
+ <string name="show_touches" msgid="1356420386500834339">"הצג נגיעות"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"הצג משוב חזותי עבור נגיעות"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"הצג עדכונים על פני השטח"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"הבזק את כל שטחי החלון כשהם מתעדכנים"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"הצג עדכוני תצוגה של GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"הבזק תצוגות בתוך חלונות בעת ציור באמצעות ה-GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"הצג עדכוני שכבות חומרה"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"הצג הבהוב ירוק לשכבות חומרה כשהן מתעדכנות"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"חריגה בניפוי באגים ב-GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"השבת שכבות על של HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"השתמש תמיד ב-GPU להרכבת מסך"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"צור הדמיה של מרחב צבעים"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"הפעל מעקבי OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"השבת ניתוב אודיו ב-USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"השבת ניתוב אוטומטי אל התקני אודיו חיצוניים ב-USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"הצג את גבולות הפריסה"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"הצג גבולות קליפ, שוליים וכו\'"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"אלץ כיוון פריסה מימין לשמאל"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"אלץ כיוון פריסת מסך מימין לשמאל עבור כל השפות בכל המקומות"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"הצג את השימוש ב-CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"שכבת-על של מסך שמציגה את השימוש הנוכחי ב-CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"אלץ עיבוד ב-GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"אכוף שימוש ב-GPU לשרטוט דו-מימדי"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"אלץ הפעלת 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"הפעל 4x MSAA ביישומי OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"ניפוי באגים בפעולות באזור שאינו מלבני"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"עיבוד פרופיל ב-GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"קנה מידה לאנימציה של חלון"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"קנה מידה לאנימציית מעבר"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"קנה מידה למשך זמן אנימציה"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"צור הדמיית תצוגות משניות"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"אפליקציות"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"אל תשמור פעילויות"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"השמד כל פעילות ברגע שהמשתמש עוזב אותה"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"מגבלה של תהליכים ברקע"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"הצג את כל פריטי ה-ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"הצג תיבת דו-שיח של \'אפליקציה לא מגיבה\' עבור אפליקציות שפועלות ברקע"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"אילוץ הרשאה של אפליקציות באחסון חיצוני"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"מאפשר כתיבה של כל אפליקציה באחסון חיצוני, ללא התחשבות בערכי המניפסט"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"אלץ יכולת קביעת גודל של הפעילויות"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"מאפשר יכולת קביעת גודל של כל הפעילויות לריבוי חלונות, ללא קשר לערך המניפסט."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"סיסמת גיבוי מקומי"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"גיבויים מלאים בשולחן העבודה אינם מוגנים כעת"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"גע כדי לשנות או להסיר את הסיסמה עבור גיבויים מלאים בשולחן העבודה"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"הוגדרה סיסמת גיבוי חדשה"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"הסיסמה החדשה והאישור אינם תואמים"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"הגדרת סיסמת גיבוי נכשלה"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"דינמי (ברירת מחדל)"</item>
+ <item msgid="8446070607501413455">"טבעי"</item>
+ <item msgid="6553408765810699025">"רגיל"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"צבעים משופרים"</item>
+ <item msgid="8280754435979370728">"צבעים טבעיים כפי שהם נראים לעין"</item>
+ <item msgid="5363960654009010371">"צבעים מותאמים באופן אופטימלי לתוכן דיגיטלי"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"אפליקציות לא פעילות"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"לא פעילה. גע כדי להחליף."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"פעילה. גע כדי להחליף."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"שירותים פועלים"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"הצג ושלוט בשירותים הפועלים כעת"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"מצב לילה"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"מושבת"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"פועל תמיד"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"באופן אוטומטי"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"המר להצפנת קבצים"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"המר..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"הצפנת קבצים כבר מוגדרת"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"המרה להצפנה מבוססת קבצים"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"המר את מחיצת הנתונים להצפנה מבוססת-קבצים.\n אזהרה!! פעולה זו תמחק את כל הנתונים.\n תכונה זו זמינה בגרסת אלפא וייתכן שלא תפעל כראוי.\n הקש על \'מחק והמר...\' כדי להמשיך."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"מחק והמר..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"מצב צבע התמונה"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"שימוש ב-sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"מושבת"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"מונוכרומטיה"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"דוטרנומליה (אדום-ירוק)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"פרוטנומליה (אדום-ירוק)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"טריטנומליה (כחול-צהוב)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"תיקון צבע"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"תכונה זו היא ניסיונית ועשויה להשפיע על הביצועים."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"נעקף על ידי <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index f9f2ae7..6307a10 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ブロック中"</item>
<item msgid="1805837518286731242">"接続不良により一時的に無効"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"チェックしない"</item>
+ <item msgid="6042769699089883931">"DRMコンテンツのみをチェック"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K/ログバッファ"</item>
+ <item msgid="2822309747675758628">"256K/ログバッファ"</item>
+ <item msgid="6699306198357496731">"1M/ログバッファ"</item>
+ <item msgid="5748528643937500349">"4M/ログバッファ"</item>
+ <item msgid="1978629051085111592">"16M/ログバッファ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"アニメーションオフ"</item>
+ <item msgid="6624864048416710414">"アニメーションスケール.5x"</item>
+ <item msgid="2219332261255416635">"アニメーションスケール1x"</item>
+ <item msgid="3544428804137048509">"アニメーションスケール1.5x"</item>
+ <item msgid="3110710404225974514">"アニメーションスケール2x"</item>
+ <item msgid="4402738611528318731">"アニメーションスケール5x"</item>
+ <item msgid="6189539267968330656">"アニメーションスケール10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"アニメーションオフ"</item>
+ <item msgid="3375781541913316411">"アニメーションスケール.5x"</item>
+ <item msgid="1991041427801869945">"アニメーションスケール1x"</item>
+ <item msgid="4012689927622382874">"アニメーションスケール1.5x"</item>
+ <item msgid="3289156759925947169">"アニメーションスケール2x"</item>
+ <item msgid="7705857441213621835">"アニメーションスケール5x"</item>
+ <item msgid="6660750935954853365">"アニメーションスケール10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"アニメーションオフ"</item>
+ <item msgid="1138649021950863198">"アニメーションスケール.5x"</item>
+ <item msgid="4394388961370833040">"アニメーションスケール1x"</item>
+ <item msgid="8125427921655194973">"アニメーションスケール1.5x"</item>
+ <item msgid="3334024790739189573">"アニメーションスケール2x"</item>
+ <item msgid="3170120558236848008">"アニメーションスケール5x"</item>
+ <item msgid="1069584980746680398">"アニメーションスケール10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"なし"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p(セキュア)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p(セキュア)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p(セキュア)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K(セキュア)"</item>
+ <item msgid="3547211260846843098">"4K(アップスケール)"</item>
+ <item msgid="5411365648951414254">"4K(アップスケール、セキュア)"</item>
+ <item msgid="1311305077526792901">"720p、1080p(デュアルスクリーン)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"なし"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace(画像)"</item>
+ <item msgid="1340692776955662664">"glGetErrorでのスタック呼び出し"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"OFF"</item>
+ <item msgid="675719912558941285">"非矩形クリップ領域を青で描画"</item>
+ <item msgid="1064373276095698656">"テスト済み描画コマンドを緑でハイライト表示"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"OFF"</item>
+ <item msgid="2751513398307949636">"バーとして画面に表示"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfoを使用"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"OFF"</item>
+ <item msgid="7688197031296835369">"オーバードロー領域の表示"</item>
+ <item msgid="2290859360633824369">"第二色弱の方向けの領域の表示"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"標準の上限"</item>
+ <item msgid="4071574792028999443">"バックグラウンドプロセスを使用しない"</item>
+ <item msgid="4810006996171705398">"プロセスの上限: 1"</item>
+ <item msgid="8586370216857360863">"プロセスの上限: 2"</item>
+ <item msgid="836593137872605381">"プロセスの上限: 3"</item>
+ <item msgid="7899496259191969307">"プロセスの上限: 4"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"充電しています"</item>
+ <item msgid="5220695614993094977">"MTP(Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP(Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS(USBイーサネット)"</item>
+ <item msgid="1718924214939774352">"オーディオソース"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 6a44854..4c043ac 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"プロファイルの選択"</string>
<string name="category_personal" msgid="1299663247844969448">"個人用"</string>
<string name="category_work" msgid="8699184680584175622">"仕事用"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"開発者向けオプション"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"開発者向けオプションの有効化"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"アプリ開発オプションを設定する"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"デベロッパー向けオプションはこのユーザーには表示されません"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"このユーザーはVPN設定を利用できません。"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"このユーザーはテザリング設定を利用できません"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"このユーザーはアクセスポイント名設定を利用できません"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USBデバッグ"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB接続時はデバッグモードにする"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USBデバッグの許可の取り消し"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"バグレポートのショートカット"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"電源メニューにバグレポートを取得するボタンを表示する"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"スリープモードにしない"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電中に画面をスリープにしない"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCIスヌープログを有効にする"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Bluetooth HCIパケットをすべてファイルにキャプチャする"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEMロック解除"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ブートローダーによるロック解除を許可する"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEMロック解除の許可"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告: この設定をONにしている場合、この端末では端末保護機能を利用できません。"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"仮の現在地情報アプリを選択"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"仮の現在地情報アプリが設定されていません"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"仮の現在地情報アプリ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ネットワーク"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ワイヤレスディスプレイ認証"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi詳細ログの有効化"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi-Fiを強制的にモバイル接続に切り替える"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fiローミングスキャンを常に許可する"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"従来のDHCPクライアントを使用する"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"モバイルデータを常にON"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"インターフェースのデータトラフィック量に基づいたWi-Fiローミングスキャンを許可するかしないかを設定できます"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ログバッファのサイズ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"各ログバッファのログサイズを選択"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB設定の選択"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB設定の選択"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"擬似ロケーションを許可"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"擬似ロケーションを許可する"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"表示属性検査を有効にする"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"新しいAndroid DHCPクライアントの代わりにLollipopのDHCPクライアントを使用します。"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fiが(ネットワークの自動切り替えで)ONのときでもモバイルデータが常にONになります。"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USBデバッグを許可しますか?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USBデバッグは開発専用に設計されています。パソコンと端末の間でデータをコピーする場合や、アプリを通知なしで端末にインストールする場合、ログデータを読み取る場合に使用できます。"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"以前に許可したすべてのパソコンからのUSBデバッグへのアクセスを取り消しますか?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"開発用の設定を許可しますか?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"これらの設定は開発専用に設計されています。そのため端末や端末上のアプリが故障したり正常に動作しなくなったりするおそれがあります。"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB経由のアプリを確認"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT経由でインストールされたアプリに不正な動作がないかを確認する"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ローカルターミナル"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"ローカルシェルアクセスを提供するターミナルアプリを有効にします"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCPチェック"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCPチェック動作を設定"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"デバッグ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"デバッグアプリを選択"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"デバッグアプリケーションが設定されていません"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"デバッグアプリケーション: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"アプリを選択"</string>
+ <string name="no_application" msgid="2813387563129153880">"なし"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"デバッガを待機"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"アプリは実行前にデバッガのアタッチを待機します"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"入力"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"描画"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ハードウェアアクセラレーテッドレンダリング"</string>
+ <string name="media_category" msgid="4388305075496848353">"メディア"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"監視"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"厳格モードを有効にする"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"メインスレッドの処理が長引く場合は画面を点滅させる"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ポインタの位置"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"現在のタップデータをオーバーレイ表示する"</string>
+ <string name="show_touches" msgid="1356420386500834339">"タップを表示"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"タップを視覚表示する"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"表示面の更新を表示"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"更新時にウィンドウの表示面全体を点滅させる"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU表示の更新を表示"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPUでの描画時にウィンドウ内の表示を点滅させる"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ハードウェア層情報を表示"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ハードウェア層が更新されると緑を表示する"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPUオーバードローをデバッグ"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HWオーバーレイを無効"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"画面合成に常にGPUを使用する"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"色空間シミュレート"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGLトレースを有効化"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USBオーディオルーティングを無効化"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USBオーディオ周辺機器への自動ルーティングを無効化"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"レイアウト境界を表示"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"クリップの境界線、マージンなどを表示"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTLレイアウト方向を使用"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"すべての言語/地域で画面レイアウト方向をRTLに設定"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU使用状況を表示"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"現在のCPU使用状況をオーバーレイ表示する"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPUレンダリングを使用"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2D描画にGPUを常に使用する"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAAを適用"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0アプリで4x MSAAを有効にする"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"非矩形クリップ操作をデバッグ"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPUレンダリングのプロファイル作成"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ウィンドウアニメスケール"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"トランジションアニメスケール"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator再生時間スケール"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"2次画面シミュレート"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"アプリ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"アクティビティを保持しない"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ユーザーが離れたアクティビティを直ちに破棄する"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"バックグラウンドプロセスの上限"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"すべてのANRを表示"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"バックグラウンドアプリが応答しない場合に通知する"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"外部ストレージへのアプリの書き込みを許可"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"マニフェストの値に関係なく、すべてのアプリを外部ストレージに書き込めるようになります"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"アクティビティをサイズ変更可能にする"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"マニフェストの値に関係なく、マルチウィンドウですべてのアクティビティのサイズを変更できるようになります。"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"PCバックアップパスワード"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"デスクトップのフルバックアップは現在保護されていません"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"デスクトップのフルバックアップ用のパスワードを変更または削除する場合にタップします"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"新しいバックアップパスワードが設定されました"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"新しいパスワードと確認用のパスワードが一致しません。"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"バックアップパスワードの設定に失敗しました"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"鮮やか(既定)"</item>
+ <item msgid="8446070607501413455">"自然"</item>
+ <item msgid="6553408765810699025">"標準"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"拡張色"</item>
+ <item msgid="8280754435979370728">"目に自然な色"</item>
+ <item msgid="5363960654009010371">"デジタルコンテンツに最適な色"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"無効なアプリ"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"無効。タップすると切り替わります。"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"有効。タップすると切り替わります。"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"実行中のサービス"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"現在実行中のサービスを表示して制御する"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"夜間モード"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"無効"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"常にON"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ファイル暗号化に変換する"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"変換…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ファイルは既に暗号化済みです"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ファイルベースの暗号化に変換しています"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"データ パーティションをファイルベースの暗号化に変換します。\n 警告: この操作ではユーザーのデータがすべて削除されます。\n この機能はアルファ版であり、正しく機能しないおそれがあります。\n 続行するには [消去して変換] をクリックしてください。"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"消去して変換…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"画像の色モード"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGBを使用"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"無効"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"全色盲"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"第二色弱(赤緑)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"第一色弱(赤緑)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"第三色弱(青黄)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"色補正"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"この機能は試験運用機能であり、パフォーマンスに影響することがあります。"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g>によって上書き済み"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ka-rGE/arrays.xml b/packages/SettingsLib/res/values-ka-rGE/arrays.xml
index 1185d8e..ac627a2 100644
--- a/packages/SettingsLib/res/values-ka-rGE/arrays.xml
+++ b/packages/SettingsLib/res/values-ka-rGE/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"დაბლოკილი"</item>
<item msgid="1805837518286731242">"ცუდი კავშირის დროებით თავიდან აცილება"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"არასდროს შეამოწმო"</item>
+ <item msgid="6042769699089883931">"შემოწმდეს მხოლოდ DRM კონტენტი"</item>
+ <item msgid="9174900380056846820">"შემოწმება ყოველთვის"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"არასდროს გამოიყენო HDCP შემოწმება"</item>
+ <item msgid="3878793616631049349">"HDCP შემოწმების გამოყენება მხოლოდ DRM კონტენტის შემთხვევაში"</item>
+ <item msgid="45075631231212732">"ყოველთვის გამოიყენე HDCP შემოწმება"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K / ჟურნ. ბუფერზე"</item>
+ <item msgid="2822309747675758628">"256K/ჟურნ. ბუფერზე"</item>
+ <item msgid="6699306198357496731">"1M / ჟურნ. ბუფერზე"</item>
+ <item msgid="5748528643937500349">"4M / ჟურნ. ბუფერზე"</item>
+ <item msgid="1978629051085111592">"16M / ჟურნ. ბუფერზე"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ანიმაციის გამორთვა"</item>
+ <item msgid="6624864048416710414">"ანიმაციის სიჩქარე .5x"</item>
+ <item msgid="2219332261255416635">"ანიმაციის სიჩქარე 1x"</item>
+ <item msgid="3544428804137048509">"ანიმაციის სიჩქარე 1.5x"</item>
+ <item msgid="3110710404225974514">"ანიმაციის მასშტაბი 2x"</item>
+ <item msgid="4402738611528318731">"ანიმაციის მასშტაბი 5x"</item>
+ <item msgid="6189539267968330656">"ანიმაციის მასშტაბი 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ანიმაციის გამორთვა"</item>
+ <item msgid="3375781541913316411">"ანიმაცია (მასშტაბი - .5x)"</item>
+ <item msgid="1991041427801869945">"ანიმაცია (მასშტაბი 1x)"</item>
+ <item msgid="4012689927622382874">"ანიმაცია (მასშტაბი 1.5x)"</item>
+ <item msgid="3289156759925947169">"ანიმაციის მასშტაბი: 2x"</item>
+ <item msgid="7705857441213621835">"ანიმაციის მასშტაბი 5x"</item>
+ <item msgid="6660750935954853365">"ანიმაციის მასშტაბი 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ანიმაციის გარეშე"</item>
+ <item msgid="1138649021950863198">"ანიმაციის სიჩქარე .5x"</item>
+ <item msgid="4394388961370833040">"ანიმაციის მასშტაბი 1x"</item>
+ <item msgid="8125427921655194973">"ანიმაციის სიჩქარე 1.5x"</item>
+ <item msgid="3334024790739189573">"ანიმაციის მასშტაბი: 2x"</item>
+ <item msgid="3170120558236848008">"ანიმაცია (მასშტაბი 5x)"</item>
+ <item msgid="1069584980746680398">"ანიმაციის მასშტაბი: 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"არც ერთი"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (დაცული)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (დაცული)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (დაცული)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (დაცული)"</item>
+ <item msgid="3547211260846843098">"4K (გადიდებული მასშტაბით)"</item>
+ <item msgid="5411365648951414254">"4K (გადიდებული მასშტაბით, დაცული)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ორმაგი ეკრანი)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"არც ერთი"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (გრაფიკა)"</item>
+ <item msgid="1340692776955662664">"გამოძახებების სია glGetError-ზე"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"გამორთული"</item>
+ <item msgid="675719912558941285">"დახატე არა მართკუთხა მოჭრის რეგიონი ლურჯად"</item>
+ <item msgid="1064373276095698656">"ხატვის ტესტირებული ბრძანების მწვანე ფერით მონიშვნა"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"გამორთვა"</item>
+ <item msgid="2751513398307949636">"ეკრანზე ზოლების სახით"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"გამორთვა"</item>
+ <item msgid="7688197031296835369">"overdraw არეების ჩვენება"</item>
+ <item msgid="2290859360633824369">"დეუტერანომალიის არეების ჩვენება"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"სტანდარტული ლიმიტი"</item>
+ <item msgid="4071574792028999443">"ფონური პროცესები არ არის"</item>
+ <item msgid="4810006996171705398">"არაუმეტეს 1 პროცესისა"</item>
+ <item msgid="8586370216857360863">"არა უმეტეს 2 პროცესისა"</item>
+ <item msgid="836593137872605381">"არა უმეტეს 3 პროცესისა"</item>
+ <item msgid="7899496259191969307">"არაუმეტეს 4 პროცესისა"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"იტენება"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"აუდიო წყარo"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka-rGE/strings.xml
index da5aa46..1ea79bf 100644
--- a/packages/SettingsLib/res/values-ka-rGE/strings.xml
+++ b/packages/SettingsLib/res/values-ka-rGE/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"პროფილის არჩევა"</string>
<string name="category_personal" msgid="1299663247844969448">"პირადი"</string>
<string name="category_work" msgid="8699184680584175622">"სამსახური"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"პარამეტრები დეველოპერებისთვის"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"დეველოპერთა პარამეტრების ჩართვა"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"პარამეტრების დაყენება აპების დეველოპერებისთვის"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ამ მომხმარებლისთვის დეველოპერის პარამეტრები არ არის ხელმისაწვდომი"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ტეთერინგის პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"წვდომის წერტილის (APN) პარამეტრები ამ მომხმარებლისათვის მიუწვდომელია"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB გამართვა"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"გამართვის რეჟიმი, როდესაც USB შეერთებულია"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB საშუალებით გამართვის შესაძლებლობის გამორთვა"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ხარვეზის შეტყობინების მალსახმობი"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ელკვების პარამეტრებში ხარვეზის შეტყობინების ღილაკის ჩვენება"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"არ დაიძინო"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"დატენვისას ეკრანი არ დაიძინებს"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop ჟურნალის ჩართვა"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ყველა bluetooth HCI პაკეტის ფაილში ჩაწერა"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM განბლოკვა"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ნება დართოს განბლოკოს ჩამტვირთველმა"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"მისცეს ნება OEM განბლოკვას?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"გაფრთხილება: სანამ ეს პარამეტრი ჩართულია, მოწყობილობის დაცვის ფუნქცია ამ მოწყობილობაზე, ვერ იმუშავებს."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"მდებარეობის იმიტირების აპის არჩევა"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"მდებარეობის იმიტირების აპი დაყენებული არ არის"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"მდებარეობის იმიტირების აპი: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ქსელი"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"უსადენო ეკრანის სერტიფიცირება"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi-ს დაწვრილებითი აღრიცხვის ჩართვა"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi-დან ფიჭურ კავშირზე პროაქტიური ჰენდოვერი"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Roam სკანირების მუდამ დაშვება"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"მოძველებული DHCP კლიენტის გამოყენება"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ფიჭური მონაცემები ყოველთვის აქტიურია"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Wifi Roam სკანირების დაშვება/აკრძალვა, ინტერფეისზე არსებული მონაცემთა ტრაფიკზე დაფუძნებით"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ჟურნალიზაციის ბუფერის ზომები"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"აირჩიეთ ჟურნ. ზომა / ჟურნ. ბუფერზე"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"აირჩიეთ USB კონფიგურაცია"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"აირჩიეთ USB კონფიგურაცია"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ფიქტიური მდებარეობების დაშვება"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ფიქტიური მდებარეობების დაშვება"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"ნახვის ატრიბუტის ინსპექტირების ჩართვა"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ახალი Android DHCP კლიენტის ნაცვლად, Lollipop-ის DHCP კლიენტის გამოყენება."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"მობილური მოწყობილობის მონაცემები ყოველთვის აქტიური დარჩეს, მაშინაც კი, როდესაც Wi-Fi აქტიურია (ქსელის სწრაფი გადართვისთვის)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"ჩავრთო USB გამართვა?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB გამართვა განკუთვნილია მხოლოდ დეველოპერული მიზნებისთვის. გამოიყენეთ კომპიუტერსა და თქვენ მოწყობილობას შორის მონაცემების გადასატანად, თქვენ მოწყობილობაზე აპების შეტყობინების გარეშე დასაყენებლად და ჟურნალის მონაცემების წასაკითხად."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"გავაუქმოთ ყველა იმ კომპიუტერიდან USB გამართვაზე წვდომა, რომლებიდანაც აქამდე განახორციელეთ შესვლა?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"გსურთ, დეველოპმენტის პარამეტრების ნების დართვა?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ამ პარამეტრების გამოყენება დასაშვებია მხოლოდ დეველოპერული მიზნებით. მათმა გამოყენებამ შეიძლება გამოიწვიოს თქვენი მოწყობილობის და მისი აპლიკაციების დაზიანება ან გაუმართავი მუშაობა."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"აპლიკაციების USB-ს საშუალებით შემოწმება"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"შეამოწმეთ, რამდენად უსაფრთხოა ADB/ADT-ის საშუალებით ინსტალირებული აპლიკაციები."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ადგილობრივი ტერმინალი"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"ლოკალურ გარსზე წვდომის ტერმინალური აპლიკაციის ჩართვა"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP შემოწმება"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"დააყენე HDCP შემოწმების ქცევა"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"გამართვა"</string>
+ <string name="debug_app" msgid="8349591734751384446">"გასამართი აპის შერჩევა"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"არ არის მითითებული გამართვის აპლიკაცია"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"აპლიკაციის გამართვა: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"აპლიკაციის შერჩევა"</string>
+ <string name="no_application" msgid="2813387563129153880">"არაფერი"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"დაილოდეთ, სანამ ჩაირთვება გამმართველი"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"გამართული აპლიკაცია ელოდება გამმართველის ჩართვას გაშვებამდე"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ტექსტის შეყვანა"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ნახაზი"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"აპარატურით დაჩქარებული გამოსახულება"</string>
+ <string name="media_category" msgid="4388305075496848353">"მედია"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"მონიტორინგი"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"მკაცრი რეჟიმი ჩართულია"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"მაჩვენებლის მდებარეობა"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ეკრანის გადაფარვა შეხების მონაცემების ჩვენებით"</string>
+ <string name="show_touches" msgid="1356420386500834339">"შეხებების ჩვენება"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"შეხებებისთვის ვიზუალური უკუკავშირის ჩვენება"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"ზედაპირის განახლებების ჩვენება"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ფანჯრის მთელი ზედაპირის აციმციმება მისი განახლებისას"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ხედის განახლებების ჩვენება"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU-თი ხაზვისას განათდეს ფანჯრების შიგთავსი"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"აპარატურის დონეების განახლებების ჩვენება"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"განახლებისას სააპარატო დონეების მწვანით მონიშვნა"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU overdraw-ს გამართვა"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW გადაფარვის გამორთვა"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ეკრანის კომპოზიციისთვის ყოველთვის გამოიყენე GPU"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"ფერთა სივრცის სიმულაცია"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL კვალის ჩართვა"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB აუდიო მარშრ. გამორთვა"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB აუდიო პერიფერიების ავტ.მარშრუტიზაციის გამორთვა"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ელემენტების საზღვრის ჩვენება"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"კლიპის საზღვრების, მინდვრების ჩვენება და ა.შ."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"მარჯვნიდან მარცხნივ განლაგების მიმართულების იძულება"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ეკრანის RTL მიმართულებაზე იძულება ყველა ლოკალისათვის"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"ცენტრალური პროცესორის ჩატვირთვის ჩვენება"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"ეკრანის გადაფარვა აჩვენებს CPU ამჟამინდელ გამოყენებას"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU-აჩქარება"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"GPU-ის ძალით გამოყენება 2d drawing-თვის"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA-ს ჩართვა"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA-ის ჩართვა OpenGL ES 2.0 აპში."</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"არა-მართკუთხა კლიპ-ოპერაციების გამართვა"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU რენდერის პროფილი"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ფანჯარა: მასშტაბი"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"გადასვლის მასშტაბი"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ანიმაციების ხანგრძლივობის მასშტაბი"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"მეორადი ეკრანების სიმულაცია"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"აპები"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ნუ შეინარჩუნებ მოქმედებებს"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ნებისმიერი აქტივობის განადგურება დასრულებისთანავე"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ფონური პროცესების ლიმიტი"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ყველა ANR-ის ჩვენება"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"შეტყობინების ჩვენება, როცა ფონური აპლიკაცია არ პასუხობს"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"აპების დაშვება გარე მეხსიერებაში"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"აპები ჩაიწერ. გარე მეხს.-ზე აღწ. ფაილის მნიშვნ. მიუხედ."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"ზომაცვლადი აქტივობების იძულება"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"მანიფესტის მნიშვნელობების მიუხედავად, ყველა აქტივობას მრავალი ფანჯრის რეჟიმისთვის ზომაცვლადად აქცევს."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"დესკტოპის სარეზერვო ასლის პაროლი"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"დესკტოპის სრული სარეზერვო ასლები ამჟამად დაცული არ არის"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"შეეხეთ დესკტოპის სრული სარეზერვო ასლების პაროლის შესაცვლელად ან წასაშლელად"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"ახალი სარეზერვო პაროლის დაყენება"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ახალი და დადასტურებული პაროლები არ შეესატყვისება ერთმანეთს"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"სარეზერვო პაროლის დაყენება ვერ მოხერხდა"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"მკვეთრი (ნაგულისხმევი)"</item>
+ <item msgid="8446070607501413455">"ბუნებრივი"</item>
+ <item msgid="6553408765810699025">"სტანდარტული"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"გაჯერებული ფერები"</item>
+ <item msgid="8280754435979370728">"თვალისთვის ხილული ბუნებრივი ფერები"</item>
+ <item msgid="5363960654009010371">"ციფრული კონტენტისთვის ოპტიმიზებული ფერები"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"უმოქმედო აპები"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"უმოქმედო. შეეხეთ გადასართავად."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"აქტიური. შეეხეთ გადასართავად."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"მიმდინარე სერვისები"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ამჟამად მოქმედი სერვისების ნახვა და მართვა"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"ღამის რეჟიმი"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"გამორთულია"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ყოველთვის ჩართული"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ავტომატური"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ფაილების დაშიფვრაზე გარდაქმნა"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"გარდაქმნა…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"უკვე დაშიფრულია ფაილების დონეზე"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ფაილების დონეზე დაშიფვრაზე გარდაქმნა…"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"მონაცემთა დანაყოფის გარდაქმნა ფაილების დონეზე დაშიფვრაზე.\n ყურადღება!!! ეს მოქმედება ყველა თქვენს მონაცემს ამოშლის.\n ეს ფუნქცია alpha სტადიაშია და შეიძლება არასწორად მუშაობდეს.\n გასაგრძელებლად დაჭერით აირჩიეთ „ამოშლა და გარდაქმნა…“."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ამოშლა და გარდაქმნა…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"გამოსახულების ფერების რეჟიმი"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB-ს გამოყენება"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"გამორთულია"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"მონოქრომულობა"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"ფერთა გარჩ.ანომალია (წითელი-მწვანე)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"პროტოანომალია (წითელი-მწვანე)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ტრიტანომალია (ლურჯი-ყვითელი)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ფერის კორექცია"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ეს ფუნქცია საცდელია და შეიძლება გავლენა იქონიოს შესრულებაზე."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"უკუგებულია <xliff:g id="TITLE">%1$s</xliff:g>-ის მიერ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/arrays.xml b/packages/SettingsLib/res/values-kk-rKZ/arrays.xml
index 6555efe1..b994eb7 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/arrays.xml
+++ b/packages/SettingsLib/res/values-kk-rKZ/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Бөгелген"</item>
<item msgid="1805837518286731242">"Нашар байланысты уақытша қолданбау"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ешқашан тексермеу"</item>
+ <item msgid="6042769699089883931">"DRM (авторлық құқықты техникалық қорғау) мазмұнын ғана тексеру"</item>
+ <item msgid="9174900380056846820">"Әрқашан тексеру"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ешқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданбаңыз"</item>
+ <item msgid="3878793616631049349">"HDCP (кең жолақты сандық мазмұн қорғау) тексеруді DRM (авторлық құқықты техникалық қорғау) мазмұны үшін ғана қолданыңыз"</item>
+ <item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 КБ"</item>
+ <item msgid="505611754508988476">"256 КБ"</item>
+ <item msgid="6361286924268716397">"1 МБ"</item>
+ <item msgid="6405203239560695266">"4 МБ"</item>
+ <item msgid="3025431211013424097">"16 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 КБ"</item>
+ <item msgid="3534782711045262344">"256 КБ"</item>
+ <item msgid="8085867209202153403">"1 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Әр журнал буферіне 64 КБ"</item>
+ <item msgid="2822309747675758628">"Әр журнал буферіне 256 КБ"</item>
+ <item msgid="6699306198357496731">"Әр журнал буферіне 1 МБ"</item>
+ <item msgid="5748528643937500349">"Әр журнал буферіне 4 МБ"</item>
+ <item msgid="1978629051085111592">"Әр журнал буферіне 16 МБ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Aнимация өшірілген"</item>
+ <item msgid="6624864048416710414">"Aнимация өлшемі .5x"</item>
+ <item msgid="2219332261255416635">"Aнимация өлшемі 1x"</item>
+ <item msgid="3544428804137048509">"Aнимация өлшемі 1.5x"</item>
+ <item msgid="3110710404225974514">"Aнимация өлшемі 2x"</item>
+ <item msgid="4402738611528318731">"Aнимация өлшемі 5x"</item>
+ <item msgid="6189539267968330656">"Aнимация өлшемі 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Aнимация өшірілген"</item>
+ <item msgid="3375781541913316411">"Aнимация өлшемі .5x"</item>
+ <item msgid="1991041427801869945">"Анимация өлшемі 1x"</item>
+ <item msgid="4012689927622382874">"Aнимация өлшемі 1.5x"</item>
+ <item msgid="3289156759925947169">"Aнимация өлшемі 2x"</item>
+ <item msgid="7705857441213621835">"Анимация өлшемі 5x"</item>
+ <item msgid="6660750935954853365">"Анимация өлшемі 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Анимация өшірулі"</item>
+ <item msgid="1138649021950863198">"Анимация өлшемі .5x"</item>
+ <item msgid="4394388961370833040">"Анимация өлшемі 1x"</item>
+ <item msgid="8125427921655194973">"Анимация өлшемі 1.5x"</item>
+ <item msgid="3334024790739189573">"Анимация өлшемі 2x"</item>
+ <item msgid="3170120558236848008">"Анимация өлшемі 5x"</item>
+ <item msgid="1069584980746680398">"Анимация өлшемі 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ешқандай"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (қауіпсіз)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (қауіпсіз)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (қауіпсіз)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (қауіпсіз)"</item>
+ <item msgid="3547211260846843098">"4K (жоғары сапалы)"</item>
+ <item msgid="5411365648951414254">"4K (жоғары сапалы, қауіпсіз)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (қос экранды)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ешқандай"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Графика)"</item>
+ <item msgid="1340692776955662664">"glGetError қоңыраулар тізімі"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Өшірулі"</item>
+ <item msgid="675719912558941285">"Көкпен тіктөртбұрышты емес кесу аймағын сызу"</item>
+ <item msgid="1064373276095698656">"Жасыл түсті тексерілген сызу пәрмендерін белгілеу"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Өшірулі"</item>
+ <item msgid="2751513398307949636">"Экранда жолақтар түрінде"</item>
+ <item msgid="1851438178120770973">"Аdb shell dumpsys gfxinfo арқылы"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Өшірулі"</item>
+ <item msgid="7688197031296835369">"Үстінен бастырылған аймақтарды көрсету"</item>
+ <item msgid="2290859360633824369">"Дейтераномалия аймақтарын көрсету"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандартты шектеу"</item>
+ <item msgid="4071574792028999443">"Фондық үрдістер жоқ"</item>
+ <item msgid="4810006996171705398">"Көп дегенде 1 үрдіс"</item>
+ <item msgid="8586370216857360863">"Көп дегенде 2 үрдіс"</item>
+ <item msgid="836593137872605381">"Көп дегенде 3 үрдіс"</item>
+ <item msgid="7899496259191969307">"Көп дегенде 4 үрдіс"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Зарядталуда"</item>
+ <item msgid="5220695614993094977">"MTP (медиамазмұнды тасымалдау протоколы)"</item>
+ <item msgid="2086000968159047375">"PTP (сурет тасымалдау протоколы)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Аудио көзі"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
index 179e4af..c6a2768 100644
--- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml
+++ b/packages/SettingsLib/res/values-kk-rKZ/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Профильді таңдау"</string>
<string name="category_personal" msgid="1299663247844969448">"Жеке"</string>
<string name="category_work" msgid="8699184680584175622">"Жұмыс"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Әзірлеуші опциялары"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Әзірлеуші параметрлерін қосу"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Қолданба дамыту үшін опцияларын реттеу"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Бұл пайдаланушы үшін дамытушы опциялары қол жетімсіз"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN параметрлері осы пайдаланушы үшін қол жетімді емес"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Тетеринг параметрлері осы пайдаланушы үшін қол жетімді емес"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Кіру нүктесі атауының параметрлері осы пайдаланушы үшін қол жетімді емес"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB жөндеу"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB жалғанғандағы жөндеу режимі"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB жөндеу рұқсаттарынан бас тарту"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Қате туралы есеп пернелер тіркесімі"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Қате туралы есеп беруге арналған қуат мәзірінде түймені көрсету"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Ояу тұру"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Зарядтау кезінде экран ұйықтамайды"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop тіркелімін қосу"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Барлық bluetooth HCI жинақтарын файлға сақтау"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бекітпесін ашу"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Жүктеуші бекітпесін ашуға рұқсат ету"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бекітпесін ашуға рұқсат ету керек пе?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ЕСКЕРТУ: осы параметр қосулы кезде, құрылғыны қорғау мүмкіндіктері жұмыс істемейді."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Жалған орын қолданбасын таңдау"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ешқандай жалған орын қолданбасы орнатылмаған"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Жалған орын қолданбасы: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Желі орнату"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Сымсыз дисплей сертификаты"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi егжей-тегжейлі журналға тір. қосу"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi желісін күштеп ұялыға ауыстыру"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi роумингін іздеулерге әрқашан рұқсат ету"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Бұрынғы DHCP клиентін пайдалану"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Ұялы деректер әрқашан белсенді"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Интерфейсте бар деректер трафигінің мөлшерінің негізінде Wi-Fi роумингін іздеулерге рұқсат ету/тыйым салу"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Журналға тіркеуші буферінің өлшемдері"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Әр журнал буфері үшін журналға тіркеуші өлшемдерін таңдау"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB конфигурациясын таңдау"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB конфигурациясын таңдау"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Жасанды аймақтарға рұқсат беру"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Жасанды аймақтарды пайдалануға рұқсат беру"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Көру төлсипатын тексеруді қосу"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Жаңа Android DHCP клиентінің орнына Lollipop ішіндегі DHCP клиентін пайдалану"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi қосулы кезде де ұялы деректерді белсенді етіп ұстау (желіні жылдам ауыстыру үшін)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB жөндеулеріне рұқсат берілсін бе?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB жөндеу дамыту мақсаттарына ғана арналған. Оны компьютер және құрылғы арасында дерек көшіру, құрылғыға ескертусіз қолданба орнату және тіркелім деректерін оқу үшін қолданыңыз."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Бұған дейін рұқсат берілген барлық компьютерлерде USB жөндеу функциясына тыйым салынсын ба?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Жетілдіру параметрлеріне рұқсат берілсін бе?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Бұл параметрлер жетілдіру мақсатында ғана қолданылады. Олар құрылғыңыз бен қолданбаларыңыздың бұзылуына немесе әдеттен тыс әрекеттерге себеп болуы мүмкін."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB арқылы орнатылған қолданбаларды растау"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT арқылы орнатылған қолданбалардың залалды болмауын тексеру."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Жергілікті терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Жергілікті шелл-код қол жетімділігін ұсынатын терминалды қолданбаны қосу"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP (жоғары кең жолақты сандық мазмұнды қорғау) тексеру"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP (кең жолақты сандық мазмұн қорғау) тексеру мүмкіндігін орнату"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Жөндеу"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Жөндеу қолданбасын таңдау"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Жөндеу қолданбалары орнатылмаған"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Жөндеу қолданбасы: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Қолданба таңдау"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ешнәрсе"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Жөндеушіні күту"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Орындау алдында бекіту үшін жөнделген қолданба жөндеушіні күтеді."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Кіріс"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Сызу"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Бейнелеуді жабдықпен жылдамдату"</string>
+ <string name="media_category" msgid="4388305075496848353">"Meдиа"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Бақылау"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Қатаң режим қосылған"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Қолданбалар негізгі жолда ұзақ әрекеттерді орындағанда экранды жыпылықтату"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Меңзер орны"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Экран бетіне түртілген элемент дерегі көрсетіледі"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Саусақ ізін көрсету"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Түртілген жерлерде із қалдыру"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Беткейлік жаңартуларды көрсету"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Жаңартылғанда бүкіл терезе беткейінің жыпылықтауы"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Графикалық процессор көрінісінің жаңартуларын көрсету"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Графикалық процессор сызғанда терезе ішіндегі көріністердің жыпылықтауы"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Компьютерлік жабдықтама қабаттарының жаңартулары"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Жаңартылғанда компьютерлік жабдықтама қабаттарының жасыл шамы жануы"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Үстінен бастырылғанды жөндеу"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Жабдықпен үстінен бастыруды өшіру"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Экранды жасақтау үшін әрқашан графикалық процессор қолдану қажет"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Түстер аймағына еліктеу"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL трейстерін қосу"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB аудио бағыттау. өшіру"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB перифериялық аудио құр-на автоматты бағ. өшіру"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Орналасу жиектерін көрсету"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Қию шектерін, жиектерін, т.б көрсету."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Оңнан солға орналасу бағытына реттеу"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Экранның орналасу бағытын барлық тілдер үшін оңнан солға қарату"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU (орталық өңдеу бірлігі) қолданысы"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Экран бетіне ағымдағы CPU қолданысы көрсетіледі"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU рендерингін жылдамдату"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Графикалық процессорды 2d сызбаларына қолдану"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA қолдану"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA функциясын OpenGL ES 2.0 (ашық графикалық кітапхана) қолданбаларында іске қосу"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Тіктөртбұрышты емес кесу жұмыстарын жөндеу"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU жұмыс уақытын жазу"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Терезе анимациясының өлшемі"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Ауысу анимациясының өлшемі"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматор ұзақтығының межесі"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Қосымша дисплейлерге еліктеу"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Қолданбалар"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Әрекеттерді сақтамау"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Әр әрекетті пайдаланушы аяқтай салысымен жою"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Фондық үрдіс шектеуі"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Барлық ANR (қолданба жауап бермеді) хабарларын көрсетіңіз"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Фондық қолданбалардың жауап бермегенін көрсету"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Сыртқыда қолданбаларға мәжбүрлеп рұқсат ету"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Манифест мәндеріне қарамастан кез келген қолданбаны сыртқы жадқа жазуға жарамды етеді"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Әрекеттерді өлшемін өзгертуге болатын етуге мәжбүрлеу"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Манифест мәндеріне қарамастан барлық әрекеттерді бірнеше терезе үшін өлшемін өзгертуге болатын етеді."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Компьютер үстелінің сақтық көшірмесі"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Жұмыс үстелінің сақтық көшірмелері қазір қорғалмаған"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Жұмыс үстелінің толық сақтық көшірмесінің кілтсөзін өзгерту немесе жою үшін түртіңіз"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Жаңа сақтық кілтсөзі тағайындалды"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Жаңа кілтсөз және растау сәйкес емес"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Сақтық кілтсөзі тағайындалмады"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Жарқын (әдепкі)"</item>
+ <item msgid="8446070607501413455">"Табиғи"</item>
+ <item msgid="6553408765810699025">"Стандартты"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Жақсартылған түстер"</item>
+ <item msgid="8280754435979370728">"Көзбен көргендегі табиғи түстер"</item>
+ <item msgid="5363960654009010371">"Сандық мазмұн үшін оңтайландырылған түстер"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Белсенді емес қолданбалар"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Белсенді емес. Ауыстыру үшін түртіңіз."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Белсенді. Ауыстыру үшін түртіңіз."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Қосылып тұрған қызметтер"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ағымдағы қосылып тұрған қызметтерді көру және басқару"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Түнгі режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Өшірілген"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Әрқашан қосулы"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Aвтоматты"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Файлды шифрлауға түрлендіру"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Түрлендіру..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Файл шифрланып қойылған"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Файлға негізделген шифрлауға түрлендіру"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Деректер бөлімін файлға негізделген шифрлауға түрлендіру.\n !!Ескерту!! Бұл барлық деректерді өшіреді.\n Бұл мүмкіндік альфа кезеңінде және дұрыс жұмыс істемеуі мүмкін.\n Жалғастыру үшін \"Сүрту және түрлендіру...\" түймесін басыңыз."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Сүрту және түрлендіру..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Сурет түс режимі"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB пайдалану"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Өшірулі"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монохромазия"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Дейтераномалия (қызыл-жасыл)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалия (қызыл-жасыл)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалия (көк-сары)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Түсті түзету"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Бұл мүмкіндік эксперименттік болып табылады және өнімділікке әсер етуі мүмкін."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> үстінен басқан"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-km-rKH/arrays.xml b/packages/SettingsLib/res/values-km-rKH/arrays.xml
index 3c65bf3..50c1299 100644
--- a/packages/SettingsLib/res/values-km-rKH/arrays.xml
+++ b/packages/SettingsLib/res/values-km-rKH/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"បានទប់ស្កាត់"</item>
<item msgid="1805837518286731242">"ជៀសវាងការតភ្ជាប់ខ្សោយជាបណ្ដោះអាសន្ន"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"កុំពិនិត្យមើល"</item>
+ <item msgid="6042769699089883931">"ពិនិត្យតែមាតិកា DRM"</item>
+ <item msgid="9174900380056846820">"ពិនិត្យជានិច្ច"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"កុំប្រើការពិនិត្យ HDCP"</item>
+ <item msgid="3878793616631049349">"ប្រើការពិនិត្យ HDCP សម្រាប់តែមាតិកា DRM ប៉ុណ្ណោះ"</item>
+ <item msgid="45075631231212732">"ប្រើការពិនិត្យ HDCP ជានិច្ច"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K per log buffer"</item>
+ <item msgid="2822309747675758628">"256K per log buffer"</item>
+ <item msgid="6699306198357496731">"1M per log buffer"</item>
+ <item msgid="5748528643937500349">"4M per log buffer"</item>
+ <item msgid="1978629051085111592">"16M per log buffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"បិទចលនា"</item>
+ <item msgid="6624864048416710414">"មាត្រដ្ឋានចលនា .5x"</item>
+ <item msgid="2219332261255416635">"មាត្រដ្ឋានចលនា 1x"</item>
+ <item msgid="3544428804137048509">"មាត្រដ្ឋានចលនា 1.5x"</item>
+ <item msgid="3110710404225974514">"មាត្រដ្ឋានចលនា 2x"</item>
+ <item msgid="4402738611528318731">"មាត្រដ្ឋានចលនា 5x"</item>
+ <item msgid="6189539267968330656">"មាត្រដ្ឋានចលនា 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"បិទចលនា"</item>
+ <item msgid="3375781541913316411">"មាត្រដ្ឋានចលនា .5x"</item>
+ <item msgid="1991041427801869945">"មាត្រដ្ឋានចលនា 1x"</item>
+ <item msgid="4012689927622382874">"មាត្រដ្ឋានចលនា 1.5x"</item>
+ <item msgid="3289156759925947169">"មាត្រដ្ឋានចលនា 2x"</item>
+ <item msgid="7705857441213621835">"មាត្រដ្ឋានចលនា 5x"</item>
+ <item msgid="6660750935954853365">"មាត្រដ្ឋានចលនា 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"បិទចលនា"</item>
+ <item msgid="1138649021950863198">"មាត្រដ្ឋានចលនា .5x"</item>
+ <item msgid="4394388961370833040">"មាត្រដ្ឋានចលនា 1x"</item>
+ <item msgid="8125427921655194973">"មាត្រដ្ឋានចលនា 1.5x"</item>
+ <item msgid="3334024790739189573">"មាត្រដ្ឋានចលនា 2x"</item>
+ <item msgid="3170120558236848008">"មាត្រដ្ឋានចលនា 5x"</item>
+ <item msgid="1069584980746680398">"មាត្រដ្ឋានចលនា 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"គ្មាន"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (សុវត្ថិភាព)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (សុវត្ថិភាព)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (សុវត្ថិភាព)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (សុវត្ថិភាព)"</item>
+ <item msgid="3547211260846843098">"4K (បង្កើនគុណភាព)"</item>
+ <item msgid="5411365648951414254">"4K (បង្កើនគុណភាព, សុវត្ថិភាព)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (អេក្រង់ទ្វេ)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"គ្មាន"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (ក្រាហ្វិក)"</item>
+ <item msgid="1340692776955662664">"លំដាប់ហៅលើ glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"បិទ"</item>
+ <item msgid="675719912558941285">"គូរតំបន់កាត់មិនមែនរាងចតុកោណជាពណ៌ខៀវ"</item>
+ <item msgid="1064373276095698656">"រំលេចពាក្យបញ្ជាគូរបានសាកល្បងជាពណ៌បៃតង"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"បិទ"</item>
+ <item msgid="2751513398307949636">"លើអេក្រង់ជារបារ"</item>
+ <item msgid="1851438178120770973">"ក្នុង adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"បិទ"</item>
+ <item msgid="7688197031296835369">"បង្ហាញតំបន់ដែលលើស"</item>
+ <item msgid="2290859360633824369">"បង្ហាញតំបន់សម្រាប់ Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ដែនកំណត់ស្តង់ដារ"</item>
+ <item msgid="4071574792028999443">"គ្មានដំណើរការក្នុងផ្ទៃខាងក្រោយ"</item>
+ <item msgid="4810006996171705398">"ជិត ១ ដំណើរការ"</item>
+ <item msgid="8586370216857360863">"ដំណើរការច្រើនបំផុត ២"</item>
+ <item msgid="836593137872605381">"ដំណើរការច្រើនបំផុត ៣"</item>
+ <item msgid="7899496259191969307">"ជិត ៤ ដំណើរការ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"កំពុងសាកថ្ម"</item>
+ <item msgid="5220695614993094977">"MTP (ពិធីការផ្ទេរមេឌៀ)"</item>
+ <item msgid="2086000968159047375">"PTP (ពិធីការផ្ទេររូបភាព)"</item>
+ <item msgid="7398830860950841822">"RNDIS (អ៊ីសឺណិតយូអេសប៊ី)"</item>
+ <item msgid="1718924214939774352">"ប្រភពអូឌីយ៉ូ"</item>
+ <item msgid="8126315616613006284">"មីឌី"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km-rKH/strings.xml
index dd13d21..3e91925 100644
--- a/packages/SettingsLib/res/values-km-rKH/strings.xml
+++ b/packages/SettingsLib/res/values-km-rKH/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ជ្រើសប្រវត្តិរូប"</string>
<string name="category_personal" msgid="1299663247844969448">"ផ្ទាល់ខ្លួន"</string>
<string name="category_work" msgid="8699184680584175622">"កន្លែងធ្វើការ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ជម្រើសអ្នកអភិវឌ្ឍ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"បើកដំណើរការជម្រើសអ្នកអភិវឌ្ឍន៍"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"កំណត់ជម្រើសសម្រាប់ការអភិវឌ្ឍកម្មវិធី"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ជម្រើសអ្នកអភិវឌ្ឍមិនអាចប្រើបានសម្រាប់អ្នកប្រើនេះ"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"ការកំណត់ VPN មិនអាចប្រើបានសម្រាប់អ្នកប្រើនេះ"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"កំណត់ការភ្ជាប់មិនអាចប្រើបានសម្រាប់អ្នកប្រើនេះ"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ការកំណត់ឈ្មោះចូលដំណើរការមិនអាចប្រើបានសម្រាប់អ្នកប្រើនេះ"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"ការកែកំហុសតាមយូអេសប៊ី"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"របៀបកែកំហុស ពេលភ្ជាប់យូអេសប៊ី"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"ដកសិទ្ធិកែកំហុសយូអេសប៊ី"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ផ្លូវការរាយការណ៍កំហុស"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"បង្ហាញប៊ូតុងក្នុងម៉ឺនុយប៊ូតុងថាមពលសម្រាប់ការទទួលយករបាយការណ៍កំហុស"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"កុំបិទអេក្រង់"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"អេក្រង់នឹងមិនដេកពេលបញ្ចូលថ្ម"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"បើកកំណត់ហេតុ HCI snoop ប៊្លូធូស"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ចាប់យកកញ្ចប់ HCI ប៊្លូធូស ទាំងអស់នៅក្នុងឯកសារ"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"ការដោះសោ OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"អនុញ្ញាតឲ្យដោះសោកម្មវិធីចាប់ផ្តើមប្រព័ន្ធ"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"អនុញ្ញាតការដោះសោ OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ព្រមាន៖ លក្ខណៈពិសេសការពារឧបករណ៍នឹងមិនដំណើរការនៅលើឧបករណ៍នេះទេ ខណៈពេលដែលការកំណត់នេះត្រូវបានបើក។"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"ជ្រើរើសកម្មវិធីទីតាំងបញ្ឆោត"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"គ្មានកម្មវិធីទីតាំងបញ្ឆោតត្រូវបានកំណត់ទេ"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"កម្មវិធីទីតាំងបញ្ឆោត៖ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ការភ្ជាប់បណ្ដាញ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"បង្ហាញការកំណត់រចនាសម្ព័ន្ធឥតខ្សែ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"បើកកំណត់ហេតុរៀបរាប់វ៉ាយហ្វាយ"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"វ៉ាយហ្វាយបង្ខំទៅការបញ្ជូនចល័ត"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"តែងតែអនុញ្ញាតការវិភាគរ៉ូមវ៉ាយហ្វាយ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ប្រើម៉ាស៊ីនកូន DHCP ចាស់"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ទិន្នន័យចល័តសកម្មជានិច្ច"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"អនុញ្ញាត/មិនអនុញ្ញាតការវិភាគរ៉ូមវ៉ាយហ្វាយផ្អែកលើចំនួនការបង្ហាញចរាចរណ៍ទិន្នន័យនៅចំណុចប្រទាក់"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ទំហំ buffer របស់ Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ជ្រើសទំហំ Logger per log buffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"ជ្រើសការកំណត់រចនាសម្ព័ន្ធយូអេសប៊ី"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"ជ្រើសការកំណត់រចនាសម្ព័ន្ធយូអេសប៊ី"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ឲ្យក្លែងទីតាំង"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"អនុញ្ញាតទីតាំងក្លែងក្លាយ"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"បើកការត្រួតពិនិត្យគុណលក្ខណៈទិដ្ឋភាព"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ប្រើម៉ាស៊ីនកូន DHCP ចេញពី Lollipop ជំនួសឲ្យម៉ាស៊ីនកូន Android DHCP ថ្មី។"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"រក្សាទិន្នន័យចល័តឲ្យសកម្មជានិច្ច បើទោះបីជា Wi‑Fi សកម្មក៏ដោយ (សម្រាប់ការប្តូរបណ្តាញដែលមានល្បឿនលឿន)។"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"អនុញ្ញាតការកែកំហុសយូអេសប៊ី?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"ការកែកំហុសយូអេសប៊ីគឺសម្រាប់តែការអភិវឌ្ឍប៉ុណ្ណោះ។ ប្រើវាដើម្បីចម្លងទិន្នន័យរវាងកុំព្យូទ័រ និងឧបករណ៍របស់អ្នក ដំឡើងកម្មវិធីក្នុងឧបករណ៍របស់អ្នកដោយមិនជូនដំណឹង និងអានទិន្នន័យកំណត់ហេតុ។"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ដកសិទ្ធិចូលការកែកំហុសតាមយូអេសប៊ីពីគ្រប់កុំព្យូទ័រដែលអ្នកបានផ្ដល់សិទ្ធិពីមុន?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"អនុញ្ញាតកំណត់ការអភិវឌ្ឍ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ការកំណត់ទាំងនេះសម្រាប់តែការប្រើក្នុងការអភិវឌ្ឍប៉ុណ្ណោះ។ ពួកវាអាចធ្វើឲ្យឧបករណ៍ និងកម្មវិធីរបស់អ្នកខូច ឬដំណើរមិនត្រឹមត្រូវ។"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ផ្ទៀងផ្ទាត់កម្មវិធីតាមយូអេសប៊ី"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ពិនិត្យកម្មវិធីបានដំឡើងតាមរយៈ ADB/ADT សម្រាប់ឥរិយាបថដែលគ្រោះថ្នាក់។"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ស្ថានីយមូលដ្ឋាន"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"បើកកម្មវិធីស្ថានីយដែលផ្ដល់ការចូលសែលមូលដ្ឋាន"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"ពិនិត្យ HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"កំណត់ឥរិយាបថពិនិត្យ HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"កែកំហុស"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ជ្រើសកម្មវិធីកែកំហុស"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"គ្មានកម្មវិធីកំហុសបានកំណត់"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"កម្មវិធីកែកំហុស៖ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ជ្រើសកម្មវិធី"</string>
+ <string name="no_application" msgid="2813387563129153880">"គ្មានអ្វីទេ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"រង់ចាំកម្មវិធីកែកំហុស"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"កម្មវិធីបានកែកំហុសរង់ចាំឲ្យភ្ជាប់កម្មវិធីកែកំហុសមុនពេលអនុវត្ត"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"បញ្ចូល"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"គំនូរ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"បង្ហាញផ្នែករឹងបានបង្កើនល្បឿន"</string>
+ <string name="media_category" msgid="4388305075496848353">"មេឌៀ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"តាមដាន"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"បានបើករបៀបតឹងរឹង"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"បញ្ចេញពន្លឺអេក្រង់ពេលកម្មវិធីធ្វើប្រតិបត្តិការយូរលើសែស្រឡាយមេ"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ទីតាំងទ្រនិច"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"អេក្រង់ត្រួតគ្នាបង្ហាញទិន្នន័យប៉ះបច្ចុប្បន្ន"</string>
+ <string name="show_touches" msgid="1356420386500834339">"បង្ហាញការប៉ះ"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"បង្ហាញមតិត្រឡប់មើលឃើញសម្រាប់ប៉ះ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"បង្ហាញបច្ចុប្បន្នភាពផ្ទៃ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ផ្ទៃបង្អួចទាំងមូលបញ្ចេញពន្លឺពេលពួកវាធ្វើបច្ចុប្បន្នភាព"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"បង្ហាញបច្ចុប្បន្នភាពទិដ្ឋភាព GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"មើល Flash ក្នុងវីនដូពេលបានគូរជាមួយ GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"បង្ហាញបច្ចុប្បន្នភាពស្រទាប់ផ្នែករឹង"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ស្រទាប់ផ្នែករឹងបញ្ចេញពន្លឺបៃតង ពេលពួកវាធ្វើបច្ចុប្បន្នភាព"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"កែកំហុសការលើស GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"បិទការត្រួត HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ប្រើ GPU ជានិច្ចសម្រាប់ផ្សំអេក្រង់"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"ក្លែងធ្វើចន្លោះពណ៌"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"បើកដាន OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"បិទការនាំផ្លូវអូឌីយ៉ូយូអេសប៊ី"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"បិទការនាំផ្លូវស្វ័យប្រវត្តិទៅឧបករណ៍អូឌីយ៉ូយូអេសប៊ី"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"បង្ហាញព្រំដែនប្លង់"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"បង្ហាញការភ្ជាប់អត្ថបទសម្រង់ រឹម ។ល។"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"បង្ខំទិសប្លង់ RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"បង្ខំទិសប្លង់អេក្រង់ទៅកាន់ RTL សម្រាប់មូលដ្ឋានទាំងអស់"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"បង្ហាញការប្រើ CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"អេក្រង់ត្រួតគ្នាបង្ហាញការប្រើ CPU បច្ចុប្បន្ន"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"បង្ខំឲ្យបង្ហាញ GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"បង្ខំប្រើ GPU សម្រាប់ការគូរលើកទីពីរ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"បង្ខំ 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"បើក 4x MSAA ក្នុងកម្មវិធី OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"កែប្រតិបត្តិការស្រង់ non-rectangular"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"ការបង្ហាញទម្រង់ GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"មាត្រដ្ឋានចលនាបង្អួច"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"មាត្រដ្ឋានដំណើរផ្លាស់ប្ដូរចលនា"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"មាត្រដ្ឋានរយៈពេលនៃកម្មវិធីចលនា"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ក្លែងធ្វើការបង្ហាញទីពីរ"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"កម្មវិធី"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"កុំរក្សាទុកសកម្មភាព"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"បំផ្លាញគ្រប់សកម្មភាព ពេលអ្នកប្រើចាកចេញ"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ដែនកំណត់ដំណើរការក្នុងផ្ទៃខាងក្រោយ"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"បង្ហាញ ANRs ទាំងអស់"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"បង្ហាញប្រអប់កម្មវិធីមិនឆ្លើយតបសម្រាប់កម្មវិធីផ្ទៃខាងក្រោយ"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"បង្ខំឲ្យអនុញ្ញាតកម្មវិធីលើឧបករណ៍ផ្ទុកខាងក្រៅ"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ធ្វើឲ្យកម្មវិធីទាំងឡាយមានសិទ្ធិសរសេរទៅកាន់ឧបករណ៍ផ្ទុកខាងក្រៅ ដោយមិនគិតពីតម្លៃជាក់លាក់"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"បង្ខំឲ្យសកម្មភាពអាចប្តូរទំហំបាន"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"កំណត់ឲ្យសកម្មភាពទាំងអស់អាចប្តូរទំហំបានសម្រាប់ពហុផ្ទាំងវិនដូ ដោយមិនគិតពីតម្លៃមេនីហ្វេសឡើយ។"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ពាក្យសម្ងាត់បម្រុងទុកលើផ្ទៃតុ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ការបម្រុងទុកពេញលេញលើផ្ទៃតុបច្ចុប្បន្នមិនត្រូវបានការពារទេ។"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ប៉ះ ដើម្បីប្ដូរ ឬលុបពាក្យសម្ងាត់សម្រាប់ការបម្រុងទុកពេញលេញលើផ្ទៃតុ"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"កំណត់ពាក្យសម្ងាត់បម្រុងទុកថ្មី"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ពាក្យសម្ងាត់ថ្មី និងការបញ្ជាក់មិនដូចគ្នា"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"បរាជ័យក្នុងការកំណត់ពាក្យសម្ងាត់បម្រុងទុក"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"រស់រវើក (លំនាំដើម)"</item>
+ <item msgid="8446070607501413455">"ធម្មជាតិ"</item>
+ <item msgid="6553408765810699025">"ស្តង់ដារ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ពណ៌ដែលធ្វើឲ្យប្រសើរជាងមុន"</item>
+ <item msgid="8280754435979370728">"ពណ៌ធម្មជាតិដូចដែលបានឃើញដោយភ្នែក"</item>
+ <item msgid="5363960654009010371">"ពណ៌ដែលបានសម្រួលសម្រាប់មាតិកាឌីជីថល"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"កម្មវិធីដែលអសកម្ម"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"អសកម្ម។ ប៉ះដើម្បីបិទ/បើក។"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"សកម្ម។ ប៉ះដើម្បីបិទ/បើក។"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"សេវាកម្មកំពុងដំណើរការ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"មើល និងគ្រប់គ្រងសេវាកម្មកំពុងដំណើរការបច្ចុប្បន្ន"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"របៀបពេលយប់"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"បានបិទ"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"បើកជានិច្ច"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ស្វ័យប្រវត្តិ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"បម្លែងទៅជាការអ៊ីនគ្រីបឯកសារ"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"បម្លែង…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"បានអ៊ីនគ្រីបឯកសាររួចហើយ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"កំពុងបម្លែងទៅការអ៊ីនគ្រីបដែលផ្អែកលើឯកសារ"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"បម្លែងការបែងចែកទិន្នន័យទៅជាការអ៊ីនគ្រីបដែលផ្អែកលើឯកសារ។\n !!ព្រមាន!! សកម្មភាពនេះនឹងលុបទិន្នន័យរបស់អ្នកទាំងអស់។\n លក្ខណៈពិសេសនេះជាការសាកល្បងដំបូង ហើយអាចនឹងដំណើរការមិនប្រក្រតី។\n សូមចុច \'សម្អាត និងបម្លែង...\' ដើម្បីបន្ត។"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"សម្អាត និងបម្លែង…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"របៀបនៃពណ៌រូបភាព"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"ប្រើ sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"បានបិទ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (ក្រហមពណ៌បៃតង)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (ក្រហមពណ៌បៃតង)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (ពណ៌ខៀវ-លឿង)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ការកែពណ៌"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"លក្ខណៈនេះគឺជាការពិសោធន៍ ហើយអាចប៉ះពាល់ការអនុវត្ត។"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"បដិសេធដោយ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-kn-rIN/arrays.xml b/packages/SettingsLib/res/values-kn-rIN/arrays.xml
index 7e42fb4..fe04d28 100644
--- a/packages/SettingsLib/res/values-kn-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-kn-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</item>
<item msgid="1805837518286731242">"ಕಳಪೆ ಸಂಪರ್ಕವನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ತಡೆಗಟ್ಟಲಾಗುತ್ತಿದೆ"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ಎಂದಿಗೂ ಪರಿಶೀಲಿಸದಿರು"</item>
+ <item msgid="6042769699089883931">"DRM ವಿಷಯಗಳಿಗಾಗಿ ಮಾತ್ರ ಪರಿಶೀಲಿಸಿ"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ 64K"</item>
+ <item msgid="2822309747675758628">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ 256K"</item>
+ <item msgid="6699306198357496731">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ 1M"</item>
+ <item msgid="5748528643937500349">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ 4M"</item>
+ <item msgid="1978629051085111592">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ಆನಿಮೇಶನ್ ಆಫ್"</item>
+ <item msgid="6624864048416710414">"ಅನಿಮೇಶನ್ ಮಾಪಕ .5x"</item>
+ <item msgid="2219332261255416635">"ಆನಿಮೇಶನ್ ಮಾಪಕ 1x"</item>
+ <item msgid="3544428804137048509">"ಅನಿಮೇಶನ್ ಮಾಪಕ 1.5x"</item>
+ <item msgid="3110710404225974514">"ಆನಿಮೇಶನ್ ಮಾಪಕ 2x"</item>
+ <item msgid="4402738611528318731">"ಆನಿಮೇಶನ್ ಮಾಪಕ 5x"</item>
+ <item msgid="6189539267968330656">"ಆನಿಮೇಶನ್ ಮಾಪಕ 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ಆನಿಮೇಶನ್ ಆಫ್"</item>
+ <item msgid="3375781541913316411">"ಅನಿಮೇಶನ್ ಮಾಪಕ .5x"</item>
+ <item msgid="1991041427801869945">"ಆನಿಮೇಶನ್ ಮಾಪಕ 1x"</item>
+ <item msgid="4012689927622382874">"ಅನಿಮೇಶನ್ ಮಾಪಕ 1.5x"</item>
+ <item msgid="3289156759925947169">"ಅನಿಮೇಶನ್ ಮಾಪಕ 2x"</item>
+ <item msgid="7705857441213621835">"ಆನಿಮೇಶನ್ ಮಾಪಕ 5x"</item>
+ <item msgid="6660750935954853365">"ಆನಿಮೇಶನ್ ಮಾಪಕ 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ಅನಿಮೇಶನ್ ಆಫ್ ಮಾಡಿ"</item>
+ <item msgid="1138649021950863198">"ಅನಿಮೇಶನ್ ಮಾಪಕ .5x"</item>
+ <item msgid="4394388961370833040">"ಅನಿಮೇಶನ್ ಮಾಪಕ 1x"</item>
+ <item msgid="8125427921655194973">"ಅನಿಮೇಶನ್ ಮಾಪಕ 1.5x"</item>
+ <item msgid="3334024790739189573">"ಅನಿಮೇಶನ್ ಮಾಪಕ 2x"</item>
+ <item msgid="3170120558236848008">"ಅನಿಮೇಷನ್ ಸ್ಕೇಲ್ 5x"</item>
+ <item msgid="1069584980746680398">"ಅನಿಮೇಶನ್ ಮಾಪಕ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ಯಾವುದೂ ಇಲ್ಲ"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ಸುರಕ್ಷಿತ)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ಸುರಕ್ಷಿತ)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ಸುರಕ್ಷಿತ)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ಸುರಕ್ಷಿತ)"</item>
+ <item msgid="3547211260846843098">"4K (ಮಾಪನ ಮಾಡದ)"</item>
+ <item msgid="5411365648951414254">"4K (ಮಾಪನ ಮಾಡದ, ಸುರಕ್ಷಿತ)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ಡ್ಯುಯಲ್ ಸ್ಕ್ರೀನ್)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ಯಾವುದೂ ಇಲ್ಲ"</item>
+ <item msgid="9089630089455370183">"ಲಾಗ್ಕ್ಯಾಟ್"</item>
+ <item msgid="5397807424362304288">"Systrace (ಗ್ರಾಫಿಕ್ಸ್)"</item>
+ <item msgid="1340692776955662664">"glGetError ನಲ್ಲಿ ಕರೆಯ ಸ್ಟ್ಯಾಕ್"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ಆಫ್"</item>
+ <item msgid="675719912558941285">"ಆಯತಾಕಾರವಲ್ಲದ ಕ್ಲಿಪ್ ಸ್ಥಳವನ್ನು ನೀಲಿಯಲ್ಲಿ ಡ್ರಾ ಮಾಡಿ"</item>
+ <item msgid="1064373276095698656">"ಪರೀಕ್ಷಿತ ಚಿತ್ರ ಆದೇಶವನ್ನು ಹಸಿರಿನಲ್ಲಿ ಹೈಲೈಟ್ ಮಾಡಿ"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ಆಫ್"</item>
+ <item msgid="2751513398307949636">"ಪರದೆಯ ಮೇಲಿನ ಪಟ್ಟಿಗಳು"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ಆಫ್"</item>
+ <item msgid="7688197031296835369">"ಓವರ್ಡ್ರಾ ಪ್ರದೇಶಗಳನ್ನು ತೋರಿಸು"</item>
+ <item msgid="2290859360633824369">"ಡ್ಯೂಟರ್ನೋಮಲಿಗಾಗಿ ಪ್ರದೇಶಗಳನ್ನು ತೋರಿಸು"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ಪ್ರಮಾಣಿತ ಮಿತಿ"</item>
+ <item msgid="4071574792028999443">"ಹಿನ್ನೆಲೆ ಪ್ರಕ್ರಿಯೆಗಳು ಇಲ್ಲ"</item>
+ <item msgid="4810006996171705398">"ಬಹುತೇಕ 1 ಪ್ರಕ್ರಿಯೆ"</item>
+ <item msgid="8586370216857360863">"ಬಹುತೇಕ 2 ಪ್ರಕ್ರಿಯೆಗಳು"</item>
+ <item msgid="836593137872605381">"ಬಹುತೇಕ 3 ಪ್ರಕ್ರಿಯೆಗಳು"</item>
+ <item msgid="7899496259191969307">"ಬಹುತೇಕ 4 ಪ್ರಕ್ರಿಯೆಗಳು"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ"</item>
+ <item msgid="5220695614993094977">"MTP (ಮೀಡಿಯಾ ಟ್ರಾನ್ಸ್ಫರ್ ಪ್ರೊಟೋಕಾಲ್)"</item>
+ <item msgid="2086000968159047375">"PTP (ಪಿಕ್ಚರ್ ಟ್ರಾನ್ಸ್ಫರ್ ಪ್ರೊಟೋಕಾಲ್)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ಇಥರ್ನೆಟ್)"</item>
+ <item msgid="1718924214939774352">"ಆಡಿಯೊ ಮೂಲ"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml
index a3586b8..4d1f9e1 100644
--- a/packages/SettingsLib/res/values-kn-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ಪ್ರೊಫೈಲ್ ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="category_personal" msgid="1299663247844969448">"ವೈಯಕ್ತಿಕ"</string>
<string name="category_work" msgid="8699184680584175622">"ಕೆಲಸದ ಸ್ಥಳ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳು"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ಅಪ್ಲಿಕೇಶನ್ ಅಭಿವೃದ್ಧಿಗಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ಈ ಬಳಕೆದಾರರಿಗೆ ಡೆವಲಪರ್ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ಟೆಥರಿಂಗ್ ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ಪ್ರವೇಶ ಬಿಂದು ಹೆಸರಿನ ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿಲ್ಲ"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆ"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB ಸಂಪರ್ಕಗೊಂಡಾಗ ಡೀಬಗ್ ಮೋಡ್"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯ ಅಧಿಕೃತಗೊಳಿಸುವಿಕೆಗಳನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳಿ"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ದೋಷ ವರದಿಯ ಶಾರ್ಟ್ಕಟ್"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ದೋಷ ವರದಿ ಮಾಡಲು ಪವರ್ ಮೆನುನಲ್ಲಿ ಬಟನ್ ತೋರಿಸು"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ಎಚ್ಚರವಾಗಿರು"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪರದೆಯು ಎಂದಿಗೂ ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗುವುದಿಲ್ಲ"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ಬ್ಲೂಟೂತ್ HCI ಸ್ನೂಪ್ಲಾಗ್"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ಫೈಲ್ನಲ್ಲಿ ಎಲ್ಲ bluetooth HCI ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ಅನ್ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ಬೂಟ್ಲೋಡರ್ ಅನ್ಲಾಕ್ ಮಾಡಲು ಅನುಮತಿಸಿ"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ಅನ್ಲಾಕ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ಎಚ್ಚರಿಕೆ: ಈ ಸೆಟ್ಟಿಂಗ್ ಆನ್ ಇರುವಾಗ ಈ ಸಾಧನದಲ್ಲಿ ಸಾಧನ ಸಂರಕ್ಷಣಾ ವೈಶಿಷ್ಟ್ಯಗಳು ಕಾರ್ಯ ನಿರ್ವಹಿಸುವುದಿಲ್ಲ."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"ಅಣಕು ಸ್ಥಳ ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ಯಾವುದೇ ಅಣಕು ಸ್ಥಳ ಅಪ್ಲಿಕೇಶನ್ ಹೊಂದಿಕೆಯಾಗಿಲ್ಲ"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"ಅಣಕು ಸ್ಥಳ ಅಪ್ಲಿಕೇಶನ್: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ನೆಟ್ವರ್ಕಿಂಗ್"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ವೆರ್ಬೋಸ್ ಲಾಗಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ಸೆಲ್ಯುಲರ್ ಹಸ್ತಾಂತರಿಸಲು ಆಕ್ರಮಣಕಾರಿ Wi‑Fi"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi ರೋಮ್ ಸ್ಕ್ಯಾನ್ಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ಹಿಂದಿನ DHCP ಕ್ಲೈಂಟ್ ಬಳಸಿ"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ಸೆಲ್ಯುಲರ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಲಭ್ಯವಿರುವ ಡೇಟಾ ಟ್ರಾಫಿಕ್ ಆಧಾರದ ಮೇಲೆ Wi‑Fi ರೋಮ್ ಸ್ಕ್ಯಾನ್ಗಳನ್ನು ಅನುಮತಿಸಿ/ನಿರಾಕರಿಸಿ"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ಲಾಗರ್ ಬಫರ್ ಗಾತ್ರಗಳು"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ಪ್ರತಿ ಲಾಗ್ ಬಫರ್ಗೆ ಲಾಗರ್ ಗಾತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB ಕಾನ್ಫಿಗರೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ಅಣಕು ಸ್ಥಾನಗಳನ್ನು ಅನುಮತಿಸು"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ಅಣಕು ಸ್ಥಾನಗಳನ್ನು ಅನುಮತಿಸು"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"ವೀಕ್ಷಣೆ ಆಟ್ರಿಬ್ಯೂಟ್ ಪರಿಶೀಲನೆ"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ಹೊಸ Android DHCP ಕ್ಲೈಂಟ್ ಬದಲಾಗಿ Lollipop ನಿಂದ DHCP ಕ್ಲೈಂಟ್ ಬಳಸಿ."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi-Fi ಸಕ್ರಿಯವಾಗಿರುವಾಗಲೂ, ಯಾವಾಗಲೂ ಮೊಬೈಲ್ ಡೇಟಾ ಸಕ್ರಿಯವಾಗಿರಿಸಿ (ವೇಗವಾಗಿ ನೆಟ್ವರ್ಕ್ ಬದಲಾಯಿಸಲು)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯು ಅಭಿವೃದ್ಧಿ ಉದ್ದೇಶಗಳಿಗೆ ಮಾತ್ರ ಆಗಿದೆ. ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ನಡುವೆ ಡೇಟಾವನ್ನು ನಕಲಿಸಲು, ಅಧಿಸೂಚನೆ ಇಲ್ಲದೆ ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಮತ್ತು ಲಾಗ್ ಡೇಟಾ ಓದಲು ಅದನ್ನು ಬಳಸಿ."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ನೀವು ಹಿಂದೆ ಅಧಿಕೃತಗೊಳಿಸಿದ ಎಲ್ಲ ಕಂಪ್ಯೂಟರ್ಗಳಿಂದ USB ಡೀಬಗ್ಗೆ ಪ್ರವೇಶವನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"ಅಭಿವೃದ್ಧಿಯ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ಈ ಸೆಟ್ಟಿಂಗ್ಗಳು ಅಭಿವೃದ್ಧಿಯ ಬಳಕೆಗೆ ಮಾತ್ರ. ಅವುಗಳು ನಿಮ್ಮ ಸಾಧನ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಧಕ್ಕೆ ಮಾಡಬಹುದು ಅಥವಾ ಅವು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವಂತೆ ಮಾಡಬಹುದು."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ಮೂಲಕ ಆಪ್ ಪರಿಶೀಲಿಸಿ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ಹಾನಿಮಾಡುವಂತಹ ವರ್ತನೆಗಾಗಿ ADB/ADT ಮೂಲಕ ಸ್ಥಾಪಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ಸ್ಥಳೀಯ ಟರ್ಮಿನಲ್"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"ಸ್ಥಳೀಯ ಶೆಲ್ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸುವ ಟರ್ಮಿನಲ್ ಅಪ್ಲಿಕೇಶನ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ಪರೀಕ್ಷಿಸುವಿಕೆ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP ಪರಿಶೀಲನಾ ನಡವಳಿಕೆಯನ್ನು ಹೊಂದಿಸಿ"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ಡೀಬಗ್ ಮಾಡುವಿಕೆ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ಡೀಬಗ್ ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ಯಾವುದೇ ಡೀಬಗ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಹೊಂದಿಸಿಲ್ಲ"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ಡೀಬಗ್ ಅಪ್ಲಿಕೇಶನ್: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ"</string>
+ <string name="no_application" msgid="2813387563129153880">"ಏನೂ ಇಲ್ಲ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ಡೀಬಗರ್ಗಾಗಿ ನಿರೀಕ್ಷಿಸಿ"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ಲಗತ್ತನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೊದಲು ಡೀಬಗರ್ಗಾಗಿ ಡೀಬಗ್ ಮಾಡಿದ ಅಪ್ಲಿಕೇಶನ್ ಕಾಯುತ್ತದೆ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ಇನ್ಪುಟ್"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ಚಿತ್ರಣ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ಹಾರ್ಡ್ವೇರ್ ವೇಗವರ್ಧಿತ ರೆಂಡರಿಂಗ್"</string>
+ <string name="media_category" msgid="4388305075496848353">"ಮಾಧ್ಯಮ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"ಪರಿವೀಕ್ಷಣೆ ಮಾಡುವಿಕೆ"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ಸ್ಟ್ರಿಕ್ಟ್ ಮೋಡ್ ಸಕ್ರಿಯ"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮುಖ್ಯ ಥ್ರೆಡ್ನಲ್ಲಿ ದೀರ್ಘ ಕಾರ್ಯಾಚರಣೆ ನಿರ್ವಹಿಸಿದಾಗ ಪರದೆಯನ್ನು ಫ್ಲ್ಯಾಶ್ ಮಾಡು"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ಪಾಯಿಂಟರ್ ಸ್ಥಾನ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ಪ್ರಸ್ತುತ ಸ್ಪರ್ಶ ಡೇಟಾ ತೋರಿಸುವ ಪರದೆಯ ಓವರ್ಲೇ"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ಸ್ಪರ್ಶಗಳನ್ನು ತೋರಿಸು"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ಸ್ಪರ್ಶಗಳಿಗಾಗಿ ದೃಶ್ಯ ಪ್ರತ್ಯುತ್ತರವನ್ನು ತೋರಿಸು"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"ಸರ್ಫೇಸ್ ಅಪ್ಡೇಟ್"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ಅಪ್ಡೇಟ್ ಆಗುವಾಗ ವಿಂಡೋದ ಸರ್ಫೇಸ್ ಫ್ಲ್ಯಾಶ್ ಆಗುತ್ತದೆ"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ವೀಕ್ಷಣೆ ಅಪ್ಡೇಟ್"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ಡ್ರಾ ಮಾಡಿದಾಗ ವಿಂಡೊದಲ್ಲಿ ವೀಕ್ಷಣೆ ಫ್ಲ್ಯಾಶ್"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ಹಾರ್ಡ್ವೇರ್ ಲೇಯರ್ ಅಪ್ಡೇಟ್"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ಅವುಗಳು ನವೀಕರಿಸಿದಾಗ ಹಾರ್ಡ್ವೇರ್ ಲೇಯರ್ಗಳು ಹಸಿರು ಫ್ಲ್ಯಾಶ್ ಆಗುತ್ತದೆ"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ಓವರ್ಡ್ರಾ ಡೀಬಗ್"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ಓವರ್ಲೇ ನಿಷ್ಕ್ರಿಯ"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ಸ್ಕ್ರೀನ್ ಸಂಯೋಜನೆಗಾಗಿ ಯಾವಾಗಲೂ GPU ಬಳಸಿ"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"ಬಣ್ಣದ ಸ್ಥಳ ಸಿಮ್ಯುಲೇಟ್"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ಕುರುಹುಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ಆಡಿಯೋ ರೂಟಿಂಗ್ ನಿಷ್ಕ್ರಿ."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ಆಡಿಯೊ ಸಲಕರಣೆಗಳಿಗೆ ಸ್ವಯಂ ರೂಟಿಂಗ್ ನಿಷ್ಕ್ರಿಯ."</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ಲೇಔಟ್ ಪರಿಮಿತಿಗಳನ್ನು ತೋರಿಸು"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ಕ್ಲಿಪ್ನ ಗಡಿಗಳು, ಅಂಚುಗಳು, ಇತ್ಯಾದಿ ತೋರಿಸು."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ಲೇಔಟ್ ಪರಿಮಿತಿ ಬಲಗೊಳಿಸಿ"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ಎಲ್ಲ ಸ್ಥಳಗಳಿಗಾಗಿ RTL ಗೆ ಸ್ಕ್ರೀನ್ ಲೇಔಟ್ ದಿಕ್ಕನ್ನು ಪ್ರಬಲಗೊಳಿಸಿ"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU ಬಳಕೆಯನ್ನು ತೋರಿಸು"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"ಪ್ರಸ್ತುತ CPU ಬಳಕೆಯನ್ನು ತೋರಿಸುತ್ತಿರುವ ಪರದೆಯ ಓವರ್ಲೇ"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU ನೀಡುವಿಕೆ ಬಲಗೊಳಿಸು"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ಚಿತ್ರಕಲೆಗಾಗಿ GPU ಬಳಕೆ ಬಲಗೊಳಿಸಿ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ಪ್ರಬಲಗೊಳಿಸಿ"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ 4x MSAA ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"ಆಯತಾಕಾರವಲ್ಲದ ಕ್ಲಿಪ್ ಕಾರ್ಯಾಚರಣೆ ಡೀಬಗ್"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU ಪ್ರೊಫೈಲ್ ಸಲ್ಲಿಕೆ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Window ಅನಿಮೇಶನ್ ಸ್ಕೇಲ್"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ಪರಿವರ್ತನೆ ಅನಿಮೇಶನ್ ಸ್ಕೇಲ್"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ಅನಿಮೇಟರ್ ಅವಧಿಯ ಪ್ರಮಾಣ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ಮಾಧ್ಯಮಿಕ ಡಿಸ್ಪ್ಲೇ ಸಿಮ್ಯುಲೇಟ್"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ಚಟುವಟಿಕೆಗಳನ್ನು ಇರಿಸದಿರು"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ಬಳಕೆದಾರರು ಹೊರಹೋಗುತ್ತಿದ್ದಂತೆಯೇ ಚಟುವಟಿಕೆ ನಾಶಪಡಿಸು"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ಹಿನ್ನೆಲೆ ಪ್ರಕ್ರಿಯೆ ಮಿತಿ"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ಎಲ್ಲ ANR ಗಳನ್ನು ತೋರಿಸು"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"ಹಿನ್ನೆಲೆ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತಿಲ್ಲ ಎಂಬ ಸಂಭಾಷಣೆ ತೋರಿಸು"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ಬಾಹ್ಯವಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಒತ್ತಾಯವಾಗಿ ಅನುಮತಿಸಿ"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ಮ್ಯಾನಿಫೆಸ್ಟ್ ಮೌಲ್ಯಗಳನ್ನು ಪರಿಗಣಿಸದೇ, ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆಗೆ ಬರೆಯಲು ಅರ್ಹಗೊಳಿಸುತ್ತದೆ"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"ಚಟುವಟಿಕೆಗಳನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸುವಂತೆ ಒತ್ತಾಯ ಮಾಡಿ"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"ಮ್ಯಾನಿಫೆಸ್ಟ್ ಮೌಲ್ಯಗಳನ್ನು ಪರಿಗಣಿಸದೇ, ಬಹು-ವಿಂಡೊಗೆ ಎಲ್ಲಾ ಚಟುವಟಿಕೆಗಳನ್ನು ಮರುಗಾತ್ರಗೊಳಿಸುವಂತೆ ಮಾಡುತ್ತದೆ."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ಡೆಸ್ಕ್ಟಾಪ್ ಬ್ಯಾಕಪ್ ಪಾಸ್ವರ್ಡ್"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ಡೆಸ್ಕ್ಟಾಪ್ನ ಪೂರ್ಣ ಬ್ಯಾಕಪ್ಗಳನ್ನು ಪ್ರಸ್ತುತ ರಕ್ಷಿಸಲಾಗಿಲ್ಲ"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ಡೆಸ್ಕ್ಟಾಪ್ನ ಪೂರ್ಣ ಬ್ಯಾಕಪ್ಗಳಿಗೆ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಅಥವಾ ತೆಗೆದುಹಾಕಲು ಸ್ಪರ್ಶಿಸಿ"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"ಹೊಸ ಬ್ಯಾಕಪ್ ಪಾಸ್ವರ್ಡ್ ಹೊಂದಿಸಲಾಗಿದೆ"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ಹೊಸ ಪಾಸ್ವರ್ಡ್ ಮತ್ತು ದೃಢೀಕರಣ ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತಿಲ್ಲ"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ಬ್ಯಾಕಪ್ ಪಾಸ್ವರ್ಡ್ ಹೊಂದಿಕೆ ವಿಫಲಗೊಂಡಿದೆ"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"ಸ್ಪಂದನಾತ್ಮಕ (ಡೀಫಾಲ್ಟ್)"</item>
+ <item msgid="8446070607501413455">"ಪ್ರಾಕೃತಿಕ"</item>
+ <item msgid="6553408765810699025">"ಪ್ರಮಾಣಿತ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ವರ್ಧಿತ ಬಣ್ಣಗಳು"</item>
+ <item msgid="8280754435979370728">"ಕಣ್ಣಿಗೆ ಕಾಣಿಸುವ ರೀತಿಯಲ್ಲಿ ನೈಸರ್ಗಿಕ ಬಣ್ಣಗಳು"</item>
+ <item msgid="5363960654009010371">"ಡಿಜಿಟಲ್ ವಿಷಯಕ್ಕಾಗಿ ಆಪ್ಟಿಮೈಜ್ ಮಾಡಲಾಗಿರುವ ಬಣ್ಣಗಳು"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"ನಿಷ್ಕ್ರಿಯ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"ನಿಷ್ಕ್ರಿಯವಾಗಿದೆ. ಟಾಗಲ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"ಸಕ್ರಿಯವಾಗಿದೆ. ಟಾಗಲ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"ರನ್ ಆಗುತ್ತಿರುವ ಸೇವೆಗಳು"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ಈಗ ರನ್ ಆಗುತ್ತಿರುವ ಸೇವೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"ರಾತ್ರಿ ಮೋಡ್"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ಯಾವಾಗಲೂ ಆನ್"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ಸ್ವಯಂಚಾಲಿತ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ಫೈಲ್ ಎನ್ಕ್ರಿಪ್ಶನ್ಗೆ ಪರಿವರ್ತಿಸು"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ಪರಿವರ್ತಿಸು…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ಫೈಲ್ ಈಗಾಗಲೇ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ಫೈಲ್ ಆಧಾರಿತ ಎನ್ಕ್ರಿಪ್ಶನ್ಗೆ ಪರಿವರ್ತಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ಡೇಟಾ ವಿಭಜನೆಯನ್ನು ಫೈಲ್ ಆಧಾರಿತ ಎನ್ಕ್ರಿಪ್ಶನ್ ಆಗಿ ಪರಿವರ್ತಿಸಿ.\n !!ಎಚ್ಚರಿಕೆ!! ಇದು ನಿಮ್ಮ ಎಲ್ಲ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ.\n ಈ ವೈಶಿಷ್ಟ್ಯವು ಆಲ್ಫಾ ಆಗಿರುತ್ತದೆ ಮತ್ತು ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೆ ಇರಬಹುದು.\n ಮುಂದುವರಿಸಲು \'ಅಳಿಸು ಮತ್ತು ಪರಿವರ್ತಿಸು…\' ಒತ್ತಿರಿ."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ಅಳಿಸು ಮತ್ತು ಪರಿವರ್ತಿಸು…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ಚಿತ್ರ ಬಣ್ಣದ ಮೋಡ್"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ಬಳಸಿ"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"ಮೊನೊಕ್ರೋಮಸಿ"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"ಡ್ಯೂಟರ್ನೋಮಲಿ (ಕೆಂಪು-ಹಸಿರು)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"ಪ್ರೊಟನೋಮಲಿ (ಕೆಂಪು-ಹಸಿರು)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ಟ್ರಿಟನೋಮಲಿ (ನೀಲಿ-ಹಳದಿ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ಬಣ್ಣದ ತಿದ್ದುಪಡಿ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ಇದು ಪ್ರಾಯೋಗಿಕ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ. ಕಾರ್ಯಕ್ಷಮತೆ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರಬಹುದು."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> ಮೂಲಕ ಅತಿಕ್ರಮಿಸುತ್ತದೆ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index 0fcb70d..a8d548f 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"차단됨"</item>
<item msgid="1805837518286731242">"연결 상태 불량 일시적으로 방지"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"확인 안함"</item>
+ <item msgid="6042769699089883931">"DRM 콘텐츠만 확인"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"로그 버퍼당 64K"</item>
+ <item msgid="2822309747675758628">"로그 버퍼당 256K"</item>
+ <item msgid="6699306198357496731">"로그 버퍼당 1M"</item>
+ <item msgid="5748528643937500349">"로그 버퍼당 4M"</item>
+ <item msgid="1978629051085111592">"로그 버퍼당 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"애니메이션 사용 안함"</item>
+ <item msgid="6624864048416710414">"애니메이션 배율 .5x"</item>
+ <item msgid="2219332261255416635">"애니메이션 배율 1x"</item>
+ <item msgid="3544428804137048509">"애니메이션 배율 1.5x"</item>
+ <item msgid="3110710404225974514">"애니메이션 배율 2x"</item>
+ <item msgid="4402738611528318731">"애니메이션 배율 5x"</item>
+ <item msgid="6189539267968330656">"애니메이션 배율 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"애니메이션 사용 안함"</item>
+ <item msgid="3375781541913316411">"애니메이션 배율 .5x"</item>
+ <item msgid="1991041427801869945">"애니메이션 배율 1x"</item>
+ <item msgid="4012689927622382874">"애니메이션 배율 1.5x"</item>
+ <item msgid="3289156759925947169">"애니메이션 배율 2x"</item>
+ <item msgid="7705857441213621835">"애니메이션 배율 5x"</item>
+ <item msgid="6660750935954853365">"애니메이션 배율 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"애니메이션 사용 안함"</item>
+ <item msgid="1138649021950863198">"애니메이션 배율 .5x"</item>
+ <item msgid="4394388961370833040">"애니메이션 배율 1x"</item>
+ <item msgid="8125427921655194973">"애니메이션 배율 1.5x"</item>
+ <item msgid="3334024790739189573">"애니메이션 배율 2x"</item>
+ <item msgid="3170120558236848008">"애니메이션 배율 5x"</item>
+ <item msgid="1069584980746680398">"애니메이션 배율 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"없음"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p(보안)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p(보안)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p(보안)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K(보안)"</item>
+ <item msgid="3547211260846843098">"4K(업스케일됨)"</item>
+ <item msgid="5411365648951414254">"4K(업스케일됨, 보안)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p(듀얼 화면)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"없음"</item>
+ <item msgid="9089630089455370183">"로그캣"</item>
+ <item msgid="5397807424362304288">"Systrace(그래픽)"</item>
+ <item msgid="1340692776955662664">"glGetError의 스택 호출"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"사용 안함"</item>
+ <item msgid="675719912558941285">"사각형이 아닌 클립 영역을 파란색으로 그립니다."</item>
+ <item msgid="1064373276095698656">"테스트한 그림 그리기 명령을 초록색으로 강조표시합니다."</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"사용 안함"</item>
+ <item msgid="2751513398307949636">"화면에 막대로 표시"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo에서 사용"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"사용 안함"</item>
+ <item msgid="7688197031296835369">"오버드로 영역 표시"</item>
+ <item msgid="2290859360633824369">"녹색약 영역 표시"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"표준 제한"</item>
+ <item msgid="4071574792028999443">"백그라운드 프로세스 없음"</item>
+ <item msgid="4810006996171705398">"최대 1개 프로세스"</item>
+ <item msgid="8586370216857360863">"최대 2개 프로세스"</item>
+ <item msgid="836593137872605381">"최대 3개 프로세스"</item>
+ <item msgid="7899496259191969307">"최대 4개 프로세스"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"충전"</item>
+ <item msgid="5220695614993094977">"MTP(Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP(Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS(USB 이더넷)"</item>
+ <item msgid="1718924214939774352">"오디오 소스"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index 745fb5b..c4ab084 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"프로필 선택"</string>
<string name="category_personal" msgid="1299663247844969448">"개인"</string>
<string name="category_work" msgid="8699184680584175622">"직장"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"개발자 옵션"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"개발자 옵션 사용"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"앱 개발 옵션 설정"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"이 사용자는 개발자 옵션을 사용할 수 없습니다."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"이 사용자는 VPN 설정을 수정할 수 없습니다."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"이 사용자는 테더링 설정을 수정할 수 없습니다."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"이 사용자는 액세스포인트 네임(APN) 설정을 수정할 수 없습니다."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB 디버깅"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB가 연결된 경우 디버그 모드 사용"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB 디버깅 권한 승인 취소"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"버그 신고 바로가기"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"전원 메뉴에 버그 신고 버튼 표시"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"화면 켜짐 상태 유지"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"충전하는 동안 화면이 꺼지지 않음"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"블루투스 HCI 스누프 로그 사용"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"모든 블루투스 HCI 패킷을 하나의 파일에 캡처"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 잠금 해제"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"부트로더 잠금 해제 허용"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM 잠금 해제를 허용하시겠습니까?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"경고: 이 설정을 사용하는 동안에는 이 기기에서 기기 보호 기능이 작동하지 않습니다."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"모의 위치 앱 선택"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"모의 위치 앱이 설정되어 있지 않음"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"모의 위치 앱: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"네트워크"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"무선 디스플레이 인증서"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi 상세 로깅 사용"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi-Fi-셀룰러 적극 핸드오버"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi 로밍 스캔 항상 허용"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"이전 DHCP 클라이언트 사용"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"모바일 데이터 항상 활성화"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"인터페이스에 표시되는 데이터 트래픽의 양을 기반으로 Wi-Fi 로밍 스캔을 허용하거나 허용하지 않습니다."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"로거 버퍼 크기"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"로그 버퍼당 로거 크기 선택"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB 설정 선택"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB 설정 선택"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"모의 위치 허용"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"모의 위치 허용"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"보기 속성 검사 사용"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"새로운 Android DHCP 클라이언트 대신 Lollipop의 DHCP 클라이언트 사용"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi가 활성화되어 있을 때에도 빠른 네트워크 전환을 위하여 항상 모바일 데이터를 활성 상태로 유지합니다."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB 디버깅을 허용하시겠습니까?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB 디버깅은 개발용으로만 설계되었습니다. 이 기능을 사용하면 컴퓨터와 기기 간에 데이터를 복사하고 알림 없이 기기에 앱을 설치하며 로그 데이터를 읽을 수 있습니다."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"이전에 승인한 모든 컴퓨터에서 USB 디버깅에 대한 액세스 권한을 취소하시겠습니까?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"개발자 설정을 허용하시겠습니까?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"이 설정은 개발자용으로만 설계되었습니다. 이 설정을 사용하면 기기 및 애플리케이션에 예기치 않은 중단이나 오류가 발생할 수 있습니다."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB를 통해 설치된 앱 확인"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT을 통해 설치된 앱에 유해한 동작이 있는지 확인"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"로컬 터미널"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"로컬 셸 액세스를 제공하는 터미널 앱 사용"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP 확인"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP 확인 동작 설정"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"디버깅"</string>
+ <string name="debug_app" msgid="8349591734751384446">"디버깅할 앱 선택"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"디버깅할 애플리케이션이 설정되지 않음"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"디버깅할 애플리케이션: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"애플리케이션 선택"</string>
+ <string name="no_application" msgid="2813387563129153880">"없음"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"디버거 연결을 위해 대기"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"디버깅된 애플리케이션이 실행되기 전에 디버거 연결을 위해 대기"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"입력"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"그림"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"하드웨어 가속 렌더링"</string>
+ <string name="media_category" msgid="4388305075496848353">"미디어"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"모니터링"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"엄격 모드 사용"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"앱이 기본 스레드에서 오래 작업하면 화면 깜박이기"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"포인터 위치"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"현재 터치 데이터 오버레이 표시"</string>
+ <string name="show_touches" msgid="1356420386500834339">"터치한 항목 표시"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"터치한 항목에 대해 시각적으로 표시"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"표면 업데이트 표시"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"전체 창 표면이 업데이트되었을 때 플래시 처리"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU 보기 업데이트 표시"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU로 드로잉했을 때 창 내부 보기 플래시 처리"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"하드웨어 업데이트 표시"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"업데이트 할 때 하드웨어 레이어 깜박이기"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU 오버드로 디버깅"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW 오버레이 사용 안함"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"화면 합성 목적으로 항상 GPU 사용"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"색상 공간 시뮬레이션"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL 추적 사용 설정"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB 오디오 연결 사용 중지"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB 오디오 주변기기로 자동 연결 사용 중지"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"레이아웃 범위 표시"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"클립 경계, 여백 등을 표시"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL 레이아웃 방향 강제 적용"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"모든 언어에 대해 화면 레이아웃 방향을 RTL로 강제 적용"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU 사용량 표시"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"현재 CPU 사용량 오버레이 표시"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU 렌더링 강제 설정"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2D 드로잉용으로 GPU 강제 사용"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA 강제 사용"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 앱에서 4x MSAA 사용"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"사각형이 아닌 클립 작업 디버그"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"프로필 GPU 렌더링"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"창 애니메이션 배율"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"전환 애니메이션 배율"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator 길이 배율"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"보조 디스플레이 시뮬레이션"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"앱"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"액티비티 유지 안함"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"사용자가 종료하는 즉시 바로 제거"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"백그라운드 프로세스 수 제한"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"모든 ANR 보기"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"백그라운드 앱에 대해 앱 응답 없음 대화상자 표시"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"외부에서 앱 강제 허용"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"매니페스트 값에 관계없이 앱을 외부 저장소에 작성"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"활동의 크기가 조정 가능하도록 설정"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"모든 활동을 매니페스트 값에 관계없이 멀티 윈도우용으로 크기 조정 가능하도록 설정"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"데스크톱 백업 비밀번호"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"데스크톱 전체 백업에 비밀번호가 설정되어 있지 않음"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"데스크톱 전체 백업에 대한 비밀번호를 변경하거나 삭제하려면 터치하세요."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"새 백업 비밀번호가 설정되었습니다."</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"새 비밀번호와 확인한 비밀번호가 일치하지 않습니다."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"백업 비밀번호를 설정하지 못했습니다."</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"생동감(기본값)"</item>
+ <item msgid="8446070607501413455">"내츄럴"</item>
+ <item msgid="6553408765810699025">"표준"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"보정 색상"</item>
+ <item msgid="8280754435979370728">"눈으로 보는 듯한 내츄럴 색상"</item>
+ <item msgid="5363960654009010371">"디지털 콘텐츠에 최적화된 색상"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"비활성 앱"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"비활성 상태입니다. 전환하려면 터치하세요."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"활성 상태입니다. 전환하려면 터치하세요."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"실행 중인 서비스"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"현재 실행 중인 서비스 보기 및 제어"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"야간 모드"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"사용 안함"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"항상 사용"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"자동"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"파일 암호화로 변환"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"변환..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"파일이 이미 암호화됨"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"파일 기반 암호화로 변환"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"데이터 파티션을 파일 기반 암호화로 변환하세요.\n !!경고!! 이 기능을 사용하면 모든 데이터가 삭제됩니다.\n 이 기능은 알파 버전이며 제대로 작동하지 않을 수 있습니다.\n 계속하려면 \'삭제 및 변환...\'을 누르세요."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"삭제 및 변환..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"사진 색상 모드"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB 사용"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"사용 중지됨"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"전색맹"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"녹색약(적녹)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"적색약(적녹)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"청색약(청황)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"색보정"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"실험실 기능이며 성능에 영향을 줄 수 있습니다."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> 우선 적용됨"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ky-rKG/arrays.xml b/packages/SettingsLib/res/values-ky-rKG/arrays.xml
index 207dea1..7ec569e 100644
--- a/packages/SettingsLib/res/values-ky-rKG/arrays.xml
+++ b/packages/SettingsLib/res/values-ky-rKG/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Бөгөттөлгөн"</item>
<item msgid="1805837518286731242">"Начар байланыштан убактылуу баш тартууда"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Эч качан текшерилбесин"</item>
+ <item msgid="6042769699089883931">"DRM мазмунун гана текшерүү"</item>
+ <item msgid="9174900380056846820">"Ар дайым текшерүү"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Эч качан HDCP текшерүү колдонулбасын"</item>
+ <item msgid="3878793616631049349">"HDCP текшерүү DRM мазмунуна гана колдонулсун"</item>
+ <item msgid="45075631231212732">"Ар дайым HDCP текшерүү колдонулсун"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K каттоо буфери үчүн"</item>
+ <item msgid="2822309747675758628">"256 K каттоо буфери үчүн"</item>
+ <item msgid="6699306198357496731">"1 M каттоо буфери үчүн"</item>
+ <item msgid="5748528643937500349">"4 M каттоо буфери үчүн"</item>
+ <item msgid="1978629051085111592">"16 M каттоо буфери үчүн"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Анимацияны өчүрүү"</item>
+ <item msgid="6624864048416710414">"Анимация масштабы .5x"</item>
+ <item msgid="2219332261255416635">"Анимация масштабы 1x"</item>
+ <item msgid="3544428804137048509">"Анимация масштабы 1.5x"</item>
+ <item msgid="3110710404225974514">"Анимация масштабы 2x"</item>
+ <item msgid="4402738611528318731">"Анимация масштабы 5x"</item>
+ <item msgid="6189539267968330656">"Анимация масштабы 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Анимацияны өчүрүү"</item>
+ <item msgid="3375781541913316411">"Анимация масштабы .5x"</item>
+ <item msgid="1991041427801869945">"Анимация масштабы 1x"</item>
+ <item msgid="4012689927622382874">"Анимация масштабы 1.5x"</item>
+ <item msgid="3289156759925947169">"Анимация масштабы 2x"</item>
+ <item msgid="7705857441213621835">"Анимация масштабы 5x"</item>
+ <item msgid="6660750935954853365">"Анимация масштабы 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Анимацияны токтотуу"</item>
+ <item msgid="1138649021950863198">"Анимация масштабы .5x"</item>
+ <item msgid="4394388961370833040">"Анимация масштабы 1x"</item>
+ <item msgid="8125427921655194973">"Анимация масштабы 1.5x"</item>
+ <item msgid="3334024790739189573">"Анимация масштабы 2x"</item>
+ <item msgid="3170120558236848008">"Анимация масштабы 5x"</item>
+ <item msgid="1069584980746680398">"Анимация масштабы 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Эчтеке жок"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (коопсуз)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (коопсуз)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (коопсуз)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (коопсуз)"</item>
+ <item msgid="3547211260846843098">"4K (жогорку сапатта)"</item>
+ <item msgid="5411365648951414254">"4K (жогорку сапатта, коопсуз)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (кош экран)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Эчтеке жок"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+ <item msgid="1340692776955662664">"glGetError\'го карата стекти чакыруу"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Өчүрүү"</item>
+ <item msgid="675719912558941285">"Тик бурчтуу эмес кесилген аймакты көк түстө тартуу"</item>
+ <item msgid="1064373276095698656">"Текшерилген тартуу буйруктарын жашыл менен белгилөө"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Өчүк"</item>
+ <item msgid="2751513398307949636">"Экранда тилке катары"</item>
+ <item msgid="1851438178120770973">"adb кабыгында dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Өчүк"</item>
+ <item msgid="7688197031296835369">"Үстүнө тартуу аймагын көргөзүү"</item>
+ <item msgid="2290859360633824369">"Дейтераномалиялуулар үчүн мейкиндикти көргөзүү"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандарттык чектөө"</item>
+ <item msgid="4071574792028999443">"Фондо процесстер жок"</item>
+ <item msgid="4810006996171705398">"Эң көп дегенде 1 процесс"</item>
+ <item msgid="8586370216857360863">"Эң көп дегенде 2 процесс"</item>
+ <item msgid="836593137872605381">"Эң көп дегенде 3 процесс"</item>
+ <item msgid="7899496259191969307">"Эң көп дегенде 4 процесс"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Кубатталууда"</item>
+ <item msgid="5220695614993094977">"MTP (Медиа өткөрүүчү протокол)"</item>
+ <item msgid="2086000968159047375">"PTP (Сүрөт өткөрүүчү протокол)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Аудио булак"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky-rKG/strings.xml
index 946f55b..43d9790 100644
--- a/packages/SettingsLib/res/values-ky-rKG/strings.xml
+++ b/packages/SettingsLib/res/values-ky-rKG/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Профиль тандоо"</string>
<string name="category_personal" msgid="1299663247844969448">"Жеке"</string>
<string name="category_work" msgid="8699184680584175622">"Жумуш"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Иштеп чыгуучунун параметрлери"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Иштеп чыгуучунун параметрлери иштетүү"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Колдонмо өндүрүү мүмкүнчүлүктөрүн орнотуу"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Бул колдонуучуга өнүктүүрүүчү мүмкүнчүлүктөрү берилген эмес."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Бул колдонуучу VPN жөндөөлөрүн колдоно албайт"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Бул колдонуучу тетеринг жөндөөлөрүн колдоно албайт"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Бул колдонуучу мүмкүндүк алуу түйүнүнүн аталышынын жөндөөлөрүн колдоно албайт"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB аркылуу мүчүлүштүктөрдү оңдоо"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB туташтырылган учурдагы мүчүлүштүктөрдү оңдоо режими"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB аркылуу жөндөө уруксатын кайтарып алуу"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Мүчүлүштүктөр жөнүндө кабардын кыска жолу"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Мүчүлүштүктөр жөнүндө кабар алуу үчүн, жандыруу менюсунда баскыч көрсөтүлсүн"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Ойгоо туруу"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Кубаттоо учурунда экран эч уктабайт"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI уруксатсыздарды каттоону иштетүү"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Бардык Bluetooth HCI пакеттерин бир файлга жазуу"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бөгөттөн чыгаруу"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бөгөттөн чыгарууга уруксатпы?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ЭСКЕРТҮҮ: Бул жөндөө күйгүзүлүп турганда түзмөктү коргоо өзгөчөлүктөрү иштебейт."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Жалган жайгашкан жерлер үчүн колдонмо тандоо"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Жалган жайгашкан жерлер үчүн колдонмо коюлган жок"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Жалган жайгашкан жерлер үчүн колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Тармактык байланыштарды кеңейтүү"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Зымсыз дисплейди аныктоо"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дайын-даректүү протоколун иштетүү"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Уюктук хэндоверге өжөр Wi-Fi"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi Роуминг Скандоо мүмкүнчүлүгүнө ар дайым уруксат берилсин"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Эскирген DHCP кардарын колдонуу"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Уюлдук дайындар ар дайым активдүү"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Интерфейстеги дайындар трафигинин көлөмүнө жараша Wi-Fi Роуминг скандоо мүмкүнчүлүгүн иштетүү/өчүрүү"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Каттагыч буферлеринин өлчөмдөрү"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Каттоо буфери үчүн Каттагычтын көлөмүн тандаңыз"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB конфигурациясын тандоо"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB конфигурациясын тандоо"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Жасалма жайгашкан жерди көрсөтүүгө уруксат берилсин"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Жасалма жайгашкан жерди көрсөтүүгө уруксат берилсин"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Аттрибут текшерүүсүнүн көрүнүшүн иштетүү"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Жаңы Android DHCP кардарынын ордуна Lollipop\'тон DHCP кардарын колдонуңуз."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi-Fi иштеп турганда да дайындар мобилдик тармак аркылуу өткөрүлө берсин (тармактар ортосунда тезирээк которулуу үчүн)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB аркылуу жөндөөгө уруксат берилсинби?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-жөндөө - өндүрүү максатында гана түзүлгөн. Аны компүтериңиз менен түзмөгүңүздүн ортосунда берилиштерди алмашуу, түзмөгүңүзгө колдонмолорду эскертүүсүз орнотуу жана лог берилиштерин окуу үчүн колдонсоңуз болот."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Сиз мурун USB жөндөөлөрүнө уруксат берген бардык компүтерлердин жеткиси жокко чыгарылсынбы?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Өндүрүүчүнүн мүмкүнчүлүктөрүнө уруксат берилсинби?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Бул орнотуулар өндүрүүчүлөр үчүн гана берилген. Булар түзмөгүңүздүн колдонмолорун бузулушуна же туура эмес иштешине алып келиши мүмкүн."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB аркылуу келген колдонмолорду ырастоо"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT аркылуу орнотулган колдонмолорду зыянкечтикке текшерүү."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Жергиликтүү терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Жергиликтүү буйрук кабыгын сунуштаган терминалга уруксат берүү"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP текшерүү"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP текшерүү арактн коюу"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Жөндөө"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Жөндөөчү колдонмону тандоо"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Эч бир жөндөөчү колдонмо орнотулган жок."</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Жөндөөчү колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Колдонмо тандоо"</string>
+ <string name="no_application" msgid="2813387563129153880">"Эч бирөө"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Жөндөөчү күтүлүүдө"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Жөндөлүүчү колдонмо аткаруудан мурун жөндөөчүнүнүн тиркелишин күтүп жатат"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Киргизүү"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Тартуу"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Визуалдаштырууну аппарат менен ылдамдатуу"</string>
+ <string name="media_category" msgid="4388305075496848353">"Медиа"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Мониторинг"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Катаал режим иштетилди"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Колдонмолор негизги жикте узак иш-аракеттерди аткарганда экран жаркылдасын"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Көрсөткүчтүн жайгшкн жери"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Учурдагы басылган дайндрд көрсөтүүчү экран катмары"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Басууларды көрсөтүү"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Басууларды белгилеп көрсөтүү"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Экран жаңыруусун көрсөтүү"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Экран жаңырганда аны бүт бойдон жарык кылуу"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU көрүнүш жаңыртуулары"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU м-н тартканда экрандын аймактарын жарк эттирүү"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Катмарлардын аппараттык жаңырышы"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Катмарлардын аппараттык жаңырышын жашыл м-н белг."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU үстүнө тартуусун жөндөө"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Аппар. катмарлаш-у өчүрүү"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Экранды калыптоодо ар дайым GPU колдонулсун"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Түс мейкиндигин эмуляциялоо"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL трейстерин иштетүү"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB аудио багыттама өчүр"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Тышкы USB аудио жабдыктарына авто багыттама өчрүү"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Катмардын чектерин көргөзүү"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Клиптин чектерин, талааларын ж.б. көргөзүү"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Солдон оңго багытына мажбурлоо"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Экрандын жайгашуу багытын бардык тилдер үчүн Оңдон-солго кылуу"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU колдонулушун көрсөтүү"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Учурдагы CPU колдонулушун көрсөтүүчү экран катмары"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU иштетүүсүн мажбурлоо"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d тартуу үчүн GPU\'ну колдонууга мажбурлоо"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA мажбурлоо"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 колдонмолорунда 4x MSAA иштетүү"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Түз бурчтук эмес кесүү операцияларын жөндөө"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU иштетүү профайлы"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Терезе анимцснын шкаласы"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Өткөрүү анимацснн шкаласы"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматор узактык масштабы"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Экинчи экран эмуляциясы"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Колдонмолор"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Аракеттер сакталбасын"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Колдонуучу аракетти таштап кетээр замат аны бузуу"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Фондогу процесстер чеги"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Бардык ANR\'лерди көрсөтүү"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Фондогу колдонмолорго Колдонмо Жооп Бербейт деп көрсөтүү"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Тышкы сактагычка сактоого уруксат берүү"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Манифест маанилерине карабастан бардык колдонмолорду тышкы сактагычка сактоого уруксат берет"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Аракеттердин өлчөмүн өзгөртүүнү мажбурлоо"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Манифест маанилерине карабастан бардык аракеттерди мульти-терезеге өлчөмү өзгөртүлгүдөй кылат."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Компүтердеги бэкаптын сырсөзү"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Компүтердеги толук бэкап учурда корголгон эмес"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Тийип, компүтердеги толук бэкаптын сырсөзүн өзгөртүңүз же жок кылыңыз"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Жаңы бэкапка сырсөз коюулду"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Жаңы сырсөз жана анын ырастоосу дал келген жок"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Жаңы бэкапка сырсөз коюлган жок"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Толкундуу (демейки)"</item>
+ <item msgid="8446070607501413455">"Табигый"</item>
+ <item msgid="6553408765810699025">"Кадимки"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Жакшыртылган түстөр"</item>
+ <item msgid="8280754435979370728">"Көзгө көрүнгөн табигый түстөр"</item>
+ <item msgid="5363960654009010371">"Санарип мазмун үчүн оптималдаштырылган түстөр"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Иштебеген колдонмолор"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Иштеген жок. Которуу үчүн тийип коюңуз."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Иштеп турат. Которуу үчүн тийип коюңуз."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Иштеп жаткан кызматтар"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Учурда иштеп жаткан кызматтарды көрүү жана көзөмөлдөө"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Түнкү режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Өчүрүлгөн"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Ар дайым күйгүзүлгөн"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматтык"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Файл шифрлөөсүнө айландыруу"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Айландыруу…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Файл мурунтан эле шифрленген"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Файл негизиндеги шифрлөөгө айландырылууда"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Дайындардын бөлүнүшүн файл негизиндеги шифрлөөгө айландыруу.\n !!Эскертүү!! Бул бардык дайындарыңызды тазалайт.\n Бул функция - альфа жана туура иштебеши мүмкүн.\n Улантуу үчүн \'Сүрүп салуу жана айландыруу…\' дегенди басыңыз."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Сүрүп салуу жана айландыруу…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Сүрөт түсү режими"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB колдонуңуз"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Токтотулган"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монохроматизм"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Дейтераномалия (кызыл-жашыл)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалия (кызыл-жашыл)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалия (көк-сары)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Түсүн тууралоо"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Бул сынамык мүмкүнчүлүк болгондуктан, иштин майнаптуулугуна таасир этиши мүмкүн."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> менен алмаштырылган"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lo-rLA/arrays.xml b/packages/SettingsLib/res/values-lo-rLA/arrays.xml
index 799a6ec..6422174 100644
--- a/packages/SettingsLib/res/values-lo-rLA/arrays.xml
+++ b/packages/SettingsLib/res/values-lo-rLA/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ປິດກັ້ນແລ້ວ"</item>
<item msgid="1805837518286731242">"ຫຼີກເວັ້ນການເຊື່ອມຕໍ່ເຄືອຂ່າຍສັນຍານອ່ອນຊົ່ວຄາວ"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ບໍ່ຕ້ອງກວດ"</item>
+ <item msgid="6042769699089883931">"ກວດສອບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item>
+ <item msgid="9174900380056846820">"ກວດສອບສະເໝີ"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"ບໍ່ໃຊ້ການກວດສອບ HDCP"</item>
+ <item msgid="3878793616631049349">"ໃຊ້ການກວດສອບ HDCP ສຳລັບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item>
+ <item msgid="45075631231212732">"ໃຊ້ການກວດສອບ HDCP ສະເໝີ"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"ບັບເຟີ 64K ຕໍ່ລັອກ"</item>
+ <item msgid="2822309747675758628">"ບັບເຟີ 256K ຕໍ່ລັອກ"</item>
+ <item msgid="6699306198357496731">"ບັບເຟີ 1M ຕໍ່ລັອກ"</item>
+ <item msgid="5748528643937500349">"ບັບເຟີ 4M ຕໍ່ລັອກ"</item>
+ <item msgid="1978629051085111592">"ບັບເຟີ 16M ຕໍ່ລັອກ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ປິດອະນິເມຊັນ"</item>
+ <item msgid="6624864048416710414">"ຂະໜາດອະນິເມຊັນ .5x"</item>
+ <item msgid="2219332261255416635">"ຂະໜາດອະນິເມຊັນ 1x"</item>
+ <item msgid="3544428804137048509">"ຂະໜາດອະນິເມຊັນ 1.5x"</item>
+ <item msgid="3110710404225974514">"ຂະໜາດອະນິເມຊັນ 2x"</item>
+ <item msgid="4402738611528318731">"ຂະໜາດອະນິເມຊັນ 5x"</item>
+ <item msgid="6189539267968330656">"ຂະໜາດອະນິເມຊັນ 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ປິດອະນິເມຊັນ"</item>
+ <item msgid="3375781541913316411">"ຂະໜາດອະນິເມຊັນ .5x"</item>
+ <item msgid="1991041427801869945">"ຂະໜາດອະນິເມຊັນ 1x"</item>
+ <item msgid="4012689927622382874">"ຂະໜາດອະນິເມຊັນ 1.5x"</item>
+ <item msgid="3289156759925947169">"ຂະໜາດອະນິເມຊັນ 2x"</item>
+ <item msgid="7705857441213621835">"ຂະໜາດອະນິເມຊັນ 5x"</item>
+ <item msgid="6660750935954853365">"ຂະໜາດອະນິເມຊັນ 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ປິດອະນິເມຊັນ"</item>
+ <item msgid="1138649021950863198">"ຂະໜາດອະນິເມຊັນ .5x"</item>
+ <item msgid="4394388961370833040">"ຂະໜາດອະນິເມຊັນ 1x"</item>
+ <item msgid="8125427921655194973">"ຂະໜາດອະນິເມຊັນ 1.5x"</item>
+ <item msgid="3334024790739189573">"ຂະໜາດອະນິເມຊັນ 2x"</item>
+ <item msgid="3170120558236848008">"ຂະໜາດອະນິເມຊັນ 5x"</item>
+ <item msgid="1069584980746680398">"ຂະໜາດອະນິເມຊັນ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ບໍ່ມີ"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ປອດໄພ)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ປອດໄພ)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080 (ປອດໄພ)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ປອດໄພ)"</item>
+ <item msgid="3547211260846843098">"4K (ເພີ່ມຂຶ້ນແລ້ວ)"</item>
+ <item msgid="5411365648951414254">"4K (ເພີ່ມຂຶ້ນແລ້ວ, ປອດໄພ)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ໜ້າຈໍຄູ່)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ບໍ່ມີ"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (ກຣາບຟິກ)"</item>
+ <item msgid="1340692776955662664">"Call stack ໃນ glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ປິດ"</item>
+ <item msgid="675719912558941285">"ແຕ້ມຄລິບທີ່ບໍ່ແມ່ນສີ່ຫຼ່ຽມເປັນສີຟ້າ"</item>
+ <item msgid="1064373276095698656">"ສະແດງຄຳສັ່ງແຕ້ມທີ່ທົດສອບເປັນສີຂຽວ"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ປິດ"</item>
+ <item msgid="2751513398307949636">"ເປັນແຖບເທິງໜ້າຈໍ"</item>
+ <item msgid="1851438178120770973">"ໃນ adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ປິດ"</item>
+ <item msgid="7688197031296835369">"ສະແດງຂອບເຂດການແຕ້ມທັບ"</item>
+ <item msgid="2290859360633824369">"ສະແດງພື້ນທີ່ສຳລັບ Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ຂີດຈຳກັດມາດຕະຖານ"</item>
+ <item msgid="4071574792028999443">"ບໍ່ມີໂປຣເຊສພື້ນຫຼັງ"</item>
+ <item msgid="4810006996171705398">"ຫຼາຍສຸດ 1 ໂປຣເຊສ"</item>
+ <item msgid="8586370216857360863">"ຫຼາຍສຸດ 2 ໂປຣເຊສ"</item>
+ <item msgid="836593137872605381">"ຫຼາຍສຸດ 3 ໂປຣເຊສ"</item>
+ <item msgid="7899496259191969307">"ສູງສຸດ 4 ໂປຣເຊສ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ກຳລັງສາກໄຟ"</item>
+ <item msgid="5220695614993094977">"MTP (ຊ່ອງທາງການໂອນມີເດຍ)"</item>
+ <item msgid="2086000968159047375">"PTP (ຊ່ອງທາງການໂອນຮູບ)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ອີເທີເນັດ)"</item>
+ <item msgid="1718924214939774352">"ແຫຼ່ງທີ່ມາຂອງສຽງ"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo-rLA/strings.xml
index 894d4d9..806e1c0 100644
--- a/packages/SettingsLib/res/values-lo-rLA/strings.xml
+++ b/packages/SettingsLib/res/values-lo-rLA/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ເລືອກໂປຣໄຟລ໌"</string>
<string name="category_personal" msgid="1299663247844969448">"ສ່ວນໂຕ"</string>
<string name="category_work" msgid="8699184680584175622">"ບ່ອນເຮັດວຽກ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ໂຕເລືອກນັກພັດທະນາ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"ເປີດໃຊ້ຕົວເລືອກນັກພັດທະນາ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ຕັ້ງຄ່າໂຕເລືອກສຳລັບການພັດທະນາແອັບຯ"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ໂຕເລືອກສຳລັບນັກພັດທະນາບໍ່ສາມາດໃຊ້ໄດ້ກັບຜູ່ໃຊ້ນີ້"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"ຜູ່ໃຊ້ນີ້ບໍ່ສາມາດຕັ້ງຄ່າ VPN ໄດ້"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ຜູ່ໃຊ້ນີ້ບໍ່ສາມາດຕັ້ງຄ່າການປ່ອຍສັນຍານໄດ້"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ຜູ່ໃຊ້ນີ້ບໍ່ສາມາດຕັ້ງຄ່າຊື່ເອດເຊສພອຍໄດ້"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"ການດີບັ໊ກຜ່ານ USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"ເປີດໃຊ້ໂໝດດີບັ໊ກເມື່ອເຊື່ອມຕໍ່ USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"ຖອດຖອນການອະນຸຍາດການດີບັ໊ກຜ່ານ USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ທາງລັດລາຍງານຂໍ້ຜິດພາດ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ສະແດງປຸ່ມໃນເມນູປິດເປີດເພື່ອບັນທຶກການລາຍງານຂໍ້ຜິດພາດ"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ເປີດໜ້າຈໍຕະຫຼອດ"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ໜ້າຈໍຈະບໍ່ປິດໃນຂະນະທີ່ສາກໄຟຢູ່"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ເປີດໃຊ້ງານການຊອດແນມ Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ເກັບກຳທຸກແພັກເກັດໃນໄຟລ໌ bluetooth HCI"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"ການປົດລັອກ OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ອະນຸຍາດໃຫ້ປົດລັອກບູດໂຫຼດເດີ"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ອະນຸຍາດການປົກລັອກ OEM ບໍ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ຄຳເຕືອນ: ຄຸນສົມບັດປົກປ້ອງອຸປະກອນຈະບໍ່ເຮັດວຽກຢູ່ໃນອຸປະກອນນີ້ ໃນຂະນະທີ່ການຕັ້ງຄ່ານີ້ເປີດຢູ່."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"ເລືອກແອັບທີ່ຕັ້ງຈຳລອງ"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ບໍ່ມີແອັບທີ່ຕັ້ງຈຳລອງທີ່ຕັ້ງໄວ້"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"ແອັບທີ່ຕັ້ງຈຳລອງ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ການສ້າງເຄືອຂ່າຍ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ສະແດງການຮັບຮອງຂອງລະບົບໄຮ້ສາຍ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"ເປີດນຳໃຊ້ການເກັບປະຫວັດ Verbose Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ໃຫ້ບຸລິມະສິດການປ່ຽນຈາກ Wi-Fi ເປັນເຄືອຂ່າຍໂທລະສັບ"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ອະນຸຍາດການສະແກນການໂຣມ Wi‑Fi ສະເໝີ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ໃຊ້ລູກຄ້າ DHCP ຕຳນານ"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ຂໍ້ມູນມືຖືເປີດຢູ່ສະເໝີ"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ອະນຸຍາດ/ບໍ່ອະນຸຍາດການສະແກນການໂຣມ Wi-Fi ອີງຕາມຈຳນວນຂໍ້ມູນທີ່ເກີດຂຶ້ນໃນລະດັບສ່ວນຕິດຕໍ່"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ຂະໜາດບັບເຟີໂຕລັອກ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ເລືອກຂະໜາດລັອກຕໍ່ບັບເຟີ"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"ເລືອກການຕັ້ງຄ່າ USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"ເລືອກການຕັ້ງຄ່າ USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ອະນຸຍາດໃຫ້ຈຳລອງຕຳແໜ່ງ"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ອະນຸຍາດໃຫ້ຈຳລອງຕຳແໜ່ງ"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"ເປີດນຳໃຊ້ການກວດສອບຄຸນສົມບັດມຸມມອງ"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ໃຊ້ລູກຄ້າ DHCP ຈາກ Lollipop ແທນລູກຄ້າ Android DHCP ໃໝ່."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ໃຫ້ຂໍ້ມູນມືຖືເປີດຢູ່ສະເໝີ, ແມ້ແຕ່ເມື່ອ Wi‑Fi ເປີດຢູ່ (ສຳລັບການສະຫຼັບເຄືອຂ່າຍໄວ)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"ອະນຸຍາດໃຫ້ດີບັ໊ກຜ່ານ USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"ການດີບັ໊ກຜ່ານ USB ແມ່ນມີຈຸດປະສົງເພື່ອການພັດທະນາເທົ່ານັ້ນ. ມັນສາມາດໃຊ້ເພື່ອສຳເນົາຂໍ້ມູນລະຫວ່າງຄອມພິວເຕີ ແລະອຸປະກອນຂອງທ່ານ, ຕິດຕັ້ງແອັບຯໂດຍບໍ່ຜ່ານການແຈ້ງເຕືອນ ແລະອ່ານຂໍ້ມູນການບັນທຶກ."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ຖອດຖອນການເຂົ້າເຖິງການດີບັ໊ກຜ່ານ USB ຈາກຄອມພິວເຕີທຸກເຄື່ອງ ທີ່ທ່ານເຄີຍອະນຸຍາດກ່ອນໜ້ານີ້?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"ອະນຸຍາດການຕັ້ງຄ່າສຳລັບນັກພັດທະນາ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ການຕັ້ງຄ່າເຫຼົ່ານີ້ແມ່ນມີຈຸດປະສົງເພື່ອການພັດທະນາເທົ່ານັ້ນ. ພວກມັນສາມາດເຮັດໃຫ້ອຸປະກອນ ແລະແອັບພລິເຄຊັນຂອງທ່ານຢຸດເຮັດວຽກ ຫຼືເຮັດວຽກຜິດປົກກະຕິໄດ້."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ຢືນຢັນແອັບຯຜ່ານທາງ USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ກວດສອບແອັບຯທີ່ຕິດຕັ້ງແລ້ວຜ່ານທາງ ADB/ADT ເພື່ອກວດຫາພຶດຕິກຳທີ່ເປັນອັນຕະລາຍ."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal ໃນໂຕເຄື່ອງ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"ເປີດນຳໃຊ້ແອັບຯ Terminal ທີ່ໃຫ້ການເຂົ້າເຖິງ shell ໃນໂຕເຄື່ອງໄດ້"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"ການກວດສອບ HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"ຕັ້ງວິທີການກວດສອບ HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ການດີບັ໊ກ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ເລືອກແອັບຯສຳລັບດີບັ໊ກ"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ບໍ່ໄດ້ຕັ້ງການດີບັ໊ກແອັບພລິເຄຊັນ"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ແອັບພລິເຄຊັນສຳລັບການດີບັ໊ກ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ເລືອກແອັບພລິເຄຊັນ"</string>
+ <string name="no_application" msgid="2813387563129153880">"ບໍ່ມີຫຍັງ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ລໍຖ້າໂຕດີບັ໊ກ"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ແອັບພລິເຄຊັນທີ່ດີບັ໊ກແລ້ວ ຈະຖ້າໂຕດີບັ໊ກກ່ອນການເຮັດວຽກ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ການປ້ອນຂໍ້ມູນ"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ການແຕ້ມ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ການສະແດງຜົນໂດຍໃຊ້ຮາດແວຊ່ວຍ"</string>
+ <string name="media_category" msgid="4388305075496848353">"ມີເດຍ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"ກຳລັງກວດສອບ"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ເປີດໃຊ້ໂໝດເຂັ່ງຂັດ"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ກະພິບໜ້າຈໍເມື່ອມີແອັບຯ ເຮັດວຽກດົນເກີນໄປໃນເທຣດຫຼັກ"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ຕຳແໜ່ງໂຕຊີ້"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ການວາງຊ້ອນໜ້າຈໍກຳລັງ ສະແດງຂໍ້ມູນການສຳພັດໃນປັດຈຸບັນ"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ສະແດງການສຳພັດ"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ສະແດງການຕອບສະໜອງທາງພາບຂອງການສຳພັດ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"ສະແດງການອັບເດດພື້ນຜິວ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ກະພິບໜ້າຈໍທັງໜ້າເມື່ອມີການອັບເດດ"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"ສະແດງມຸມມອງການອັບເດດ GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ກະພິບມຸມມອງໃນໜ້າຈໍເມື່ອຖືກແຕ້ມດ້ວຍ GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ສະແດງການອັບເດດເລເຢີຂອງຮາດແວ"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ກະພິບເລເຢີຂອງຮາດແວໃຫ້ເປັນສີຂຽວເມື່ອມີການອັບເດດ"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"ແກ້ບັນຫາການແຕ້ມທັບຂອງ GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"ປິດການເຮັດວຽກ HW overlays"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ໃຊ້ GPU ໃນການວາງອົງປະກອບໜ້າຈໍສະເໝີ"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"ຈຳລອງ color space"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"ເປີດການໃຊ້ຮ່ອງຮອຍໃນ OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"ປິດການນຳໃຊ້ເສັ້ນທາງສຽງ USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"ປິດການນຳໃຊ້ເສັ້ນທາງອັດຕະໂນມັດໄປຫາອຸປະກອນຕໍ່ພ່ວງສຽງ USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ສະແດງຂອບການຈັດວາງ"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ສະແດງໜ້າປົກຄລິບ, ຂອບ ແລະອື່ນໆ."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"ບັງຄັບໃຫ້ຮູບຮ່າງຂຽນຈາກຂວາຫາຊ້າຍ"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ບັງຄັບໃຫ້ຮູບຮ່າງໜ້າຈໍ ຂຽນຈາກຂວາໄປຊ້າຍ ສຳລັບທຸກພາສາ"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"ສະແດງການນຳໃຊ້ CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"ການວາງຊ້ອນໜ້າຈໍທີ່ສະແດງການນຳໃຊ້ CPU ໃນປັດຈຸບັນ"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"ບັງຄັບໃຊ້ GPU ປະມວນພາບ"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"ບັງຄັບໃຊ້ GPU ເພື່ອການແຕ້ມພາບ 2 ມິຕິ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"ບັງຄັບໃຊ້ 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"ເປິດໃຊ້ 4x MSAA ໃນແອັບຯ OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"ດີບັ໊ກການເຮັດວຽກຂອງຄລິບທີ່ບໍ່ແມ່ນສີ່ຫຼ່ຽມ"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"ການສະແດງຜົນ GPU ຕາມໂປຣໄຟລ໌"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ຂະໜາດອະນິເມຊັນ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ຂະໜາດສະລັບອະນິເມຊັນ"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ໄລຍະເວລາອະນິເມຊັນ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ຈຳລອງຈໍສະແດງຜົນທີ່ສອງ"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ແອັບຯ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ບໍ່ຕ້ອງຮັກສາການເຮັດວຽກ"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ລຶບທຸກການເຄື່ອນໄຫວທັນທີທີ່ຜູ່ໃຊ້ອອກຈາກມັນ"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ການຈຳກັດໂປຣເຊສໃນພື້ນຫຼັງ"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ສະແດງ ANRs ທັງຫມົດ"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"ສະແດງໜ້າຈໍແອັບຯທີ່ບໍ່ຕອບສະໜອງສຳລັບແອັບຯພື້ນຫຼັງ"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ບັງຄັບອະນຸຍາດແອັບຢູ່ພາຍນອກ"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ເຮັດໃຫ້ທຸກແອັບມີສິດໄດ້ຮັບການຂຽນໃສ່ບ່ອນຈັດເກັບພາຍນອກ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າທີ່ຈະແຈ້ງ"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"ບັງຄັງໃຫ້ກິດຈະກຳປ່ຽນຂະໜາດໄດ້"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"ເຮັດໃຫ້ທຸກກິດຈະກຳປ່ຽນຂະໜາດໄດ້ສຳລັບຫຼາຍໜ້າຕ່າງ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າທີ່ຈະແຈ້ງ."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ລະຫັດຜ່ານການສຳຮອງຂໍ້ມູນເດັກສະທັອບ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ການສຳຮອງຂໍ້ມູນເຕັມຮູບແບບໃນເດັກສະທັອບຍັງບໍ່ໄດ້ຮັບການປ້ອງກັນໃນເວລານີ້"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ແຕະເພື່ອປ່ຽນ ຫຼືລຶບລະຫັດຂອງການສຳຮອງຂໍ້ມູນເຕັມຮູບແບບໃນເດັກສະທັອບ"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"ຕັ້ງລະຫັດສຳຮອງໃໝ່ແລ້ວ"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ລະຫັດຜ່ານໃໝ່ ແລະລະຫັດຢືນຢັນບໍ່ກົງກັນ"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ການຕັ້ງລະຫັດສຳຮອງຂໍ້ມູນລົ້ມເຫລວ"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"ຕົວສັ່ນ (ມາດຕະຖານ)"</item>
+ <item msgid="8446070607501413455">"ທຳມະຊາດ"</item>
+ <item msgid="6553408765810699025">"ມາດຕະຖານ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ສີທີ່ປັບປຸງແລ້ວ"</item>
+ <item msgid="8280754435979370728">"ສີທຳມະຊາດຕາມທີ່ເຫັນດ້ວຍຕາ"</item>
+ <item msgid="5363960654009010371">"ສີທີ່ປັບໃຫ້ເໝາະສົມສຳລັບເນື້ອໃນດິຈີຕອລ"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"ແອັບບໍ່ໃຊ້ງານຢູ່"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"ບໍ່ໃຊ້ງານຢູ່. ສຳພັດເພື່ອສະຫຼັບ."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"ໃຊ້ງານຢູ່. ສຳພັດເພື່ອສະຫຼັບ."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"ບໍລິການທີ່ເຮັດວຽກຢູ່"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ເບິ່ງ ແລະຈັດການບໍລິການທີ່ກຳລັງເຮັດວຽກຢູ່ໃນປັດຈຸບັນ"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"ໂໝດກາງຄືນ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ປິດໃຊ້ງານແລ້ວ"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ເປີດຕະຫຼອດ"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ອັດຕະໂນມັດ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ປ່ຽນເປັນການເຂົ້າລະຫັດໄຟລ໌"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ປ່ຽນ..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ໄຟລ໌ເຂົ້າລະຫັດຮຽບຮ້ອຍແລ້ວ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ກຳລັງປ່ຽນເປັນການເຂົ້າລະຫັດແບບອີງໃສ່ໄຟລ໌"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ປ່ຽນການແບ່ງສ່ວນຂໍ້ມູນເປັນການເຂົ້າລະຫັດແບບອີງໃສ່ໄຟລ໌.\n !!ຄຳເຕືອນ!! ນີ້ຈະເປັນການລຶບຂໍ້ມູນທັງໝົດຂອງທ່ານ.\n ຄຸນສົມບັດນີ້ແມ່ນຢູ່ໃນຂັ້ນທົດລອງ alpha ແລະອາດຈະເຮັດວຽກໄດ້ບໍ່ຖືກຕ້ອງດີເທື່ອ.\n ກົດ \'ລຶບ ແລະ ປ່ຽນ...\' ເພື່ອດຳເນີນການຕໍ່."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ລຶບ ແລະປ່ຽນ..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ໂໝດສີຮູບ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"ໃຊ້ sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ປິດນຳໃຊ້ແລ້ວ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (ສີແດງ-ສີຂຽວ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (ສີແດງ-ສີຂຽວ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (ສີຟ້າ-ສີເຫຼືອງ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ການປັບແຕ່ງສີ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ຄຸນສົມບັດນີ້ກຳລັງຢູ່ໃນການທົດລອງແລະອາດມີຜົນຕໍ່ປະສິດທິພາບ."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"ຖືກແທນໂດຍ <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index 8b16385..0d20a8a 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Užblokuota"</item>
<item msgid="1805837518286731242">"Laikinai vengiama prasto ryšio"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Niekada netikrinti"</item>
+ <item msgid="6042769699089883931">"Tikrinti tik DRM turinį"</item>
+ <item msgid="9174900380056846820">"Visada tikrinti"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Niekada nenaudoti HDCP tikrinimo"</item>
+ <item msgid="3878793616631049349">"Taikyti HDCP tikrinimą tik DRM turiniui"</item>
+ <item msgid="45075631231212732">"Visada naudoti HDCP tikrinimą"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB žurn. bufer."</item>
+ <item msgid="2822309747675758628">"256 KB žurn. bufer."</item>
+ <item msgid="6699306198357496731">"1 MB žurn. bufer."</item>
+ <item msgid="5748528643937500349">"4 MB žurn. bufer."</item>
+ <item msgid="1978629051085111592">"16 MB žurn. bufer."</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animacija išjungta"</item>
+ <item msgid="6624864048416710414">"Animacijos mastelis 0,5x"</item>
+ <item msgid="2219332261255416635">"Animacijos mastelis 1x"</item>
+ <item msgid="3544428804137048509">"Animacijos mastelis 1,5x"</item>
+ <item msgid="3110710404225974514">"Animacijos mastelis 2x"</item>
+ <item msgid="4402738611528318731">"Animacijos mastelis 5x"</item>
+ <item msgid="6189539267968330656">"Animacijos mastelis 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animacija išjungta"</item>
+ <item msgid="3375781541913316411">"Animacijos mastelis 0,5x"</item>
+ <item msgid="1991041427801869945">"Animacijos mastelis 1x"</item>
+ <item msgid="4012689927622382874">"Animacijos mastelis 1,5x"</item>
+ <item msgid="3289156759925947169">"Animacijos mastelis 2x"</item>
+ <item msgid="7705857441213621835">"Animacijos mastelis 5x"</item>
+ <item msgid="6660750935954853365">"Animacijos mastelis 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animacija išjungta"</item>
+ <item msgid="1138649021950863198">"Animacijos mastelis 0,5 x"</item>
+ <item msgid="4394388961370833040">"Animacijos mastelis 1 x"</item>
+ <item msgid="8125427921655194973">"Animacijos mastelis 1,5 x"</item>
+ <item msgid="3334024790739189573">"Animacijos mastelis 2 x"</item>
+ <item msgid="3170120558236848008">"Animacijos mastelis 5 x"</item>
+ <item msgid="1069584980746680398">"Animacijos mastelis 10 x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nėra"</item>
+ <item msgid="9033194758688161545">"480 piks."</item>
+ <item msgid="1025306206556583600">"480 piks. (saugus)"</item>
+ <item msgid="1853913333042744661">"720 piks."</item>
+ <item msgid="3414540279805870511">"720 piks. (saugus)"</item>
+ <item msgid="9039818062847141551">"1 080 piks."</item>
+ <item msgid="4939496949750174834">"1 080 piks. (saugus)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (saugus)"</item>
+ <item msgid="3547211260846843098">"4K (didesnio mastelio)"</item>
+ <item msgid="5411365648951414254">"4K (didesnio mastelio, saugus)"</item>
+ <item msgid="1311305077526792901">"720 piks., 1 080 piks. (dvig. ekr.)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nėra"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"„Systrace“ (grafika)"</item>
+ <item msgid="1340692776955662664">"Kreipinių dėklas „glGetError“"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Išjungta"</item>
+ <item msgid="675719912558941285">"Piešti ne stačiak. reg. mėlyna sp."</item>
+ <item msgid="1064373276095698656">"Paryš. išban. pieš. kom. žalia sp."</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Išjungta"</item>
+ <item msgid="2751513398307949636">"Ekrane (stulpeliai)"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Išjungti"</item>
+ <item msgid="7688197031296835369">"Rodyti perdangos sritis"</item>
+ <item msgid="2290859360633824369">"Rodyti deuteranomalijos sritis"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standartinis apribojimas"</item>
+ <item msgid="4071574792028999443">"Nėra fono procesų"</item>
+ <item msgid="4810006996171705398">"Daugiausia 1 procesas"</item>
+ <item msgid="8586370216857360863">"Daugiausia 2 procesai"</item>
+ <item msgid="836593137872605381">"Daugiausia 3 procesai"</item>
+ <item msgid="7899496259191969307">"Daugiausia 4 procesai"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Kraunama"</item>
+ <item msgid="5220695614993094977">"MTP (medijos perdavimo protokolas)"</item>
+ <item msgid="2086000968159047375">"PTP (nuotraukų perdavimo protokolas)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB eternetas)"</item>
+ <item msgid="1718924214939774352">"Garso šaltinis"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 132ad1f..0b04f53 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profilio pasirinkimas"</string>
<string name="category_personal" msgid="1299663247844969448">"Asmeninės"</string>
<string name="category_work" msgid="8699184680584175622">"Darbo"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Kūrėjo parinktys"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Įgalinti kūrėjo parinktis"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Nustatyti programos kūrimo parinktis"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Kūrėjo parinktys negalimos šiam naudotojui"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN nustatymai šiam naudotojui nepasiekiami"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Įrenginio kaip modemo naudojimo nustatymai šiam naudotojui nepasiekiami"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Prieigos taško pavadinimo nustatymai šiam naudotojui nepasiekiami"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB perkrova"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Derinimo režimas, kai prijungtas USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Panaikinti USB derinimo prieigos teises"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Pranešimo apie riktą spartusis klavišas"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Rodyti pranešimo apie riktą mygtuką maitinimo meniu"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Veikti"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Kraunant ekranas niekada neveiks miego režimu"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Įgalinti „Bluetooth“ HCI šnipinėjimo žurnalą"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Užfiksuoti visus faile esančius „Bluetooth“ HCI paketus"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OĮG atrakinimas"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leisti atrakinti oper. sistemos paleidimo progr."</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leisti OĮG atrakinimą?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ĮSPĖJIMAS: kol šis nustatymas bus įjungtas, šiame įrenginyje neveiks įrenginio apsaugos funkcijos."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Pasirinkti imituotos vietovės programą"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Imituotos vietovės programa nenustatyta"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Imituotos vietovės programa: „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Tinklai"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Belaidžio rodymo sertifikavimas"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Įgal. „Wi‑Fi“ daugiaž. įraš. į žurnalą"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agres. „Wi‑Fi“ duom. perd. į mob. tinklą"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Visada leisti „Wi-Fi“ tarptiklinio ryšio nuskaitymą"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Naudoti seną DHCP kliento programą"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Korinio ryšio duomenys visada aktyvūs"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Leisti / neleisti „Wi‑Fi“ tarptinklinio ryšio nuskaitymo, atsižvelgiant į sąsajos duomenų srauto kiekį"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Registruotuvo buferio dydžiai"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Pasir. registr. dydž. žurn. bufer."</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Pasirinkite USB konfigūraciją"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Pasirinkite USB konfigūraciją"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Leisti imituoti vietas"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Leisti imituoti vietas"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Įgalinti peržiūros atributų tikrinimą"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"DHCP kliento programos iš „Lollipop“ versijos naudojimas vietoje naujos „Android“ DHCP kliento programos."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Visada suaktyvinti mobiliojo ryšio duomenis, net kai aktyvus „Wi‑Fi“ ryšys (kad būtų galima greitai perjungti tinklą)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Leisti USB perkrovimą?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB derinimas skirtas naudoti tik kūrimo tikslais. Jis gali būti naudojamas norint kopijuoti duomenis iš kompiuterio į įrenginį ir atvirkščiai, įdiegti programas įrenginyje be pranešimo ir skaityti žurnalo duomenis."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Panaikinti visų kompiuterių, kuriems anksčiau suteikėte prieigos teisę, prieigą prie USB derinimo?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Leisti kūrėjų nustatymus?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Šie nustatymai skirti tik kūrėjams. Nustačius juos įrenginys ir jame naudojamos programos gali nustoti veikti arba veikti netinkamai."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Patvirtinti progr. naudojant USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Patikrinkite, ar programų, įdiegtų naudojant ADB / ADT, veikimas nėra žalingas."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Vietinis terminalas"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Įgal. terminalo progr., siūlančią prieigą prie viet. apvalkalo"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP tikrinimas"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Nust. HDCP tikrin. elgs."</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Derinimas"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Pasirinkite derinimo programą"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nenustatyta jokia derinimo programa"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Derinimo programa: „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
+ <string name="select_application" msgid="5156029161289091703">"Pasirinkti programą"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nieko"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Laukti derintuvės"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Derinta progr. laukia derint., kad galėtų tęsti."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Įvestis"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Atvaizdavimas"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Aparatinės įrangos paspartintas pateikimas"</string>
+ <string name="media_category" msgid="4388305075496848353">"Medija"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Stebėjimas"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Įgal. griežtas režimas"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Ekr. blyksės, kai pr. atl. ilgus proc. pgr. gijoje"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Žymiklio vieta"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Ekrano perdanga rodo dabartinius lietimo duomenis"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Rodyti palietimus"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Rodyti vaizdinius palietimų atsiliepimus"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Rodyti paviršiaus naujin."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Naujinant mirginti visus langų paviršius"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Rodyt GPU rodinių naujin."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"„Flash“ rodiniai languose atvaizduojant su GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Rod. apar. įr. sl. nauj."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Kai atsin. apar. įr. sl., rod. juos blyks. ž. sp."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Derinti GPU perdangą"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Neleisti HW perdangų"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Komponuojant ekraną visada naudoti GPU"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Imituoti spalvų erdvę"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Įgalinti „OpenGL“ pėdsak."</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Išj. USB garso marš. par."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Išj. aut. maršr. parink. į USB garso išor. įtaisus"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Rodyti išdėstymo ribas"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Rodyti iškarpų ribas, kraštines ir t. t."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Išdėst. iš dešin. į kairę"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Nust. visų lokalių ekran. išdėst. iš deš. į kairę"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Rodyti centr. proc. naud."</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Ekrano perdanga rodo dabartinį centr. proc. naud."</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Priverst. GPU atvaizd."</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Priverstinai naudoti GPU atvaizduojant 2D formatą"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Priverst. vykdyti 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Įgalinti 4x MSAA „OpenGL ES 2.0“ programose"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Derinti ne stačiakampio klipo operacijas"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profiliuotas GPU atvaizd."</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Lango animacijos mast."</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Animuoto perėjimo mast."</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator. trukmės skalė"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Imituoti antrin. ekranus"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Programos"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Nesaugoti veiklos"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Sunaikinti visą veiklą, kai naud. iš jos išeina"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Fono procesų apribojimas"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Rodyti visus ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Fon. programose rodyti dialogo langą „Neatsako“"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Priverstinai leisti programas išorinėje atmintin."</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Vis. pr. gal. įr. į vid. saug. nepais. apr. vert."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Priv. nust., kad veiksm. b. g. atl. kelių d. lang."</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Nustatoma, kad visus veiksmus būtų galima atlikti kelių dydžių languose, nepaisant aprašo verčių."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Viet. atsrg. kop. slapt."</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Šiuo metu visos vietinės atsarginės kopijos neapsaugotos"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Jei norite pakeisti ar pašalinti visų vietinių atsarginių kopijų slaptažodį, palieskite"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nustatytas naujas atsarginės kopijos slaptažodis"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Naujas slaptažodis ir patvirtinimas neatitinka"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nustatant atsarginės kopijos slaptažodį įvyko klaida"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Ryškus (numatytasis)"</item>
+ <item msgid="8446070607501413455">"Natūralus"</item>
+ <item msgid="6553408765810699025">"Standartinis"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Patobulintos spalvos"</item>
+ <item msgid="8280754435979370728">"Natūralios spalvos"</item>
+ <item msgid="5363960654009010371">"Skaitmeniniam turiniui optimizuotos spalvos"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktyvios programos"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Neaktyvi. Palieskite, kad perjungtumėte."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktyvi. Palieskite, kad perjungtumėte."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Vykdomos paslaugos"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Žiūrėti ir valdyti dabar vykdomas paslaugas"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Naktinis režimas"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Išjungta"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Visada įjungta"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatinė"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertuoti į failų šifruotę"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertuoti…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Jau konvertuota į failų šifruotę"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konvertuojama į failais pagrįstą šifruotę"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Duomenų skaidinys bus konvertuotas į failais pagrįstą šifruotę.\n Įspėjimas! Visi duomenys bus ištrinti.\n Ši funkcija yra alfa versijos ir gali netinkamai veikti.\n Paspauskite „Išvalyti ir konvertuoti...“, kad galėtumėte tęsti."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Išvalyti ir konvertuoti…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Nuotraukos spalvos režimas"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Naudoti sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Išjungtas"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromazija"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalija (raudona, žalia)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalija (raudona, žalia)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalija (mėlyna, geltona)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Spalvų taisymas"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ši funkcija yra eksperimentinė ir ji gali turėti įtakos našumui."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Nepaisyta naudojant nuostatą „<xliff:g id="TITLE">%1$s</xliff:g>“"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 40ba222..a033d1b 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloķēts"</item>
<item msgid="1805837518286731242">"Pagaidām netiek izmantots vājš savienojums."</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nekad nepārbaudīt"</item>
+ <item msgid="6042769699089883931">"Pārbaudīt tikai DRM saturu"</item>
+ <item msgid="9174900380056846820">"Vienmēr pārbaudīt"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nekad neizmantot HDCP pārbaudi"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB žurn. buferis"</item>
+ <item msgid="2822309747675758628">"256 KB žurn. buf."</item>
+ <item msgid="6699306198357496731">"1 MB žurn. buferis"</item>
+ <item msgid="5748528643937500349">"4 MB žurn. buferis"</item>
+ <item msgid="1978629051085111592">"16 MB žurn. buferis"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animācija ir izslēgta"</item>
+ <item msgid="6624864048416710414">"Animācijas mērogs: 0,5x"</item>
+ <item msgid="2219332261255416635">"Animācijas mērogs: 1x"</item>
+ <item msgid="3544428804137048509">"Animācijas mērogs: 1,5x"</item>
+ <item msgid="3110710404225974514">"Animācijas mērogs: 2x"</item>
+ <item msgid="4402738611528318731">"Animācijas mērogs: 5x"</item>
+ <item msgid="6189539267968330656">"Animācijas mērogs: 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animācija ir izslēgta"</item>
+ <item msgid="3375781541913316411">"Animācijas mērogs: 0,5x"</item>
+ <item msgid="1991041427801869945">"Animācijas mērogs: 1x"</item>
+ <item msgid="4012689927622382874">"Animācijas mērogs: 1,5x"</item>
+ <item msgid="3289156759925947169">"Animācijas mērogs: 2x"</item>
+ <item msgid="7705857441213621835">"Animācijas mērogs: 5x"</item>
+ <item msgid="6660750935954853365">"Animācijas mērogs: 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animācija izslēgta"</item>
+ <item msgid="1138649021950863198">"Animācijas mērogs: 0,5x"</item>
+ <item msgid="4394388961370833040">"Animācijas mērogs: 1x"</item>
+ <item msgid="8125427921655194973">"Animācijas mērogs: 1,5x"</item>
+ <item msgid="3334024790739189573">"Animācijas mērogs: 2x"</item>
+ <item msgid="3170120558236848008">"Animācijas mērogs: 5x"</item>
+ <item msgid="1069584980746680398">"Animācijas mērogs: 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nav"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (drošs)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (drošs)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (drošs)"</item>
+ <item msgid="1833612718524903568">"4 KB videoklipi"</item>
+ <item msgid="238303513127879234">"4 KB (drošs)"</item>
+ <item msgid="3547211260846843098">"4 KB (mērogots)"</item>
+ <item msgid="5411365648951414254">"4 KB (mērogots, drošs)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dubults ekrāns)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nav"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"glGetError: zvanu kaskāde"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Izslēgts"</item>
+ <item msgid="675719912558941285">"Lieko daļu iekrāsot zilā krāsā"</item>
+ <item msgid="1064373276095698656">"Pārb. zīmēš. kom. iezīmēt zaļu"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Izslēgta"</item>
+ <item msgid="2751513398307949636">"Ekrānā kā joslas"</item>
+ <item msgid="1851438178120770973">"Komandā “adb shell dumpsys gfxinfo”"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Izslēgta"</item>
+ <item msgid="7688197031296835369">"Rādīt apgab., kur pārsn. kapacitāte"</item>
+ <item msgid="2290859360633824369">"Rādīt laukumus deiteranomālijai"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standarta ierobežojums"</item>
+ <item msgid="4071574792028999443">"Nav fona procesu"</item>
+ <item msgid="4810006996171705398">"Ne vairāk kā 1 process"</item>
+ <item msgid="8586370216857360863">"Ne vairāk kā 2 procesi"</item>
+ <item msgid="836593137872605381">"Ne vairāk kā 3 procesi"</item>
+ <item msgid="7899496259191969307">"Ne vairāk kā 4 procesi"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Notiek uzlāde"</item>
+ <item msgid="5220695614993094977">"MTP (satura pārsūtīšanas protokols)"</item>
+ <item msgid="2086000968159047375">"PTP (attēlu pārsūtīšanas protokols)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB tīkls Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio avots"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index f3dd7e7..b955162 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profila izvēlēšanās"</string>
<string name="category_personal" msgid="1299663247844969448">"Privāts"</string>
<string name="category_work" msgid="8699184680584175622">"Darba"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Izstrādātāju opcijas"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Izstrādātājam paredzēto opciju iespējošana"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Iestatīt lietotņu izstrādes opcijas"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Šim lietotājam nav pieejamas izstrādātāja opcijas."</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN iestatījumi šim lietotājam nav pieejami."</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Piesaistes iestatījumi šim lietotājam nav pieejami."</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Piekļuves punkta nosaukuma iestatījumi šim lietotājam nav pieejami."</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB atkļūdošana"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Atkļūdošanas režīms, kad ir pievienota kopne USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Atsaukt piekļuvi USB atkļūdošanai"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Kļūdu pārskata saīsne"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Izslēgšanas izvēlnē rādīt kļūdu pārskata veidošanas pogu"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Atstāt nomodā"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Uzlādes laikā ekrāns nekad nepārslēgsies miega režīmā"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Iespējot Bluetooth HCI analizētāja žurnālu"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Tvert visas Bluetooth HCI paketes failā"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM atbloķēšana"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Atļaut palaišanas ielādētāja atbloķēšanu"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vai atļaut OEM atbloķēšanu?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"BRĪDINĀJUMS. Kamēr šis iestatījums būs ieslēgts, ierīces aizsardzības funkcijas nedarbosies."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Atlasīt imitētas atrašanās vietas lietotni"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nav iestatīta imitētas atrašanās vietas lietotne"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Imitētas atrašanās vietas lietotne: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Tīklošana"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Bezvadu attēlošanas sertifikācija"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Iespējot Wi‑Fi detalizēto reģistrēšanu"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agresīva pāreja no Wi‑Fi uz mobilo tīklu"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vienmēr atļaut Wi‑Fi meklēšanu"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Lietot mantoto DHCP klientu"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Vienmēr aktīvs mobilo datu savienojums"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Atļaujiet/neatļaujiet Wi‑Fi meklēšanu, pamatojoties uz saskarnē saņemto datplūsmas apjomu."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Reģistrētāja buferu lielumi"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Atlasīt reģistrētāja bufera liel."</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Atlasīt USB konfigurāciju"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Atlasīt USB konfigurāciju"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Atļaut neīstas vietas"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Atļaut neīstas vietas"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Iespējot atribūtu pārbaudi"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Lietot DHCP klientu no operētājsistēmas Lollipop, nevis jauno Android DHCP klientu."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobilo datu savienojums būs vienmēr aktīvs, pat ja būs aktīvs Wi-Fi savienojums (ātrai ierīces pārslēgšanai uz citu tīklu)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Vai atļaut USB atkļūdošanu?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB atkļūdošana ir paredzēta tikai ar izstrādi saistītām darbībām. Izmantojiet to datu kopēšanai no datora uz ierīci un pretēji, lietotņu instalēšanai ierīcē bez paziņojumiem un žurnāla datu lasīšanai."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vai atcelt piekļuvi USB atkļūdošanai no visiem datoriem, kuriem iepriekš piešķīrāt piekļuvi?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vai atļaut izstrādes iestatījumus?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Šie iestatījumi ir paredzēti tikai izstrādei. To dēļ var tikt pārtraukta vai traucēta ierīces un lietojumprogrammu darbība."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificēt, ja instalētas no USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Pārbaudīt, vai lietotņu, kuru instalēšanai izmantots ADB/ADT, darbība nav kaitīga."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Vietējā beigu lietotne"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Iespējot beigu lietotni, kurā piedāvāta vietējā čaulas piekļuve"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP pārbaude"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP pārb. iestatīšana"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Atkļūdošana"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Atlasīt atkļūdošanas lietotni"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nav iestatīta neviena atkļūdošanas lietotne"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Atkļūdošanas lietotne: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Lietotnes atlase"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nekas"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Gaidīt atkļūdotāju"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Gaida atkļūdotāju, ko pirms izp. piev. atkļ. liet."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ievade"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Zīmējums"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Aparatūras paātrinātā atveidošana"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multivide"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Pārraudzība"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Precīzais rež. ir iespēj."</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Zibsnīt ekrānu, ja liet. ilgi darbojas galv. pav."</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Rādītāja atrašanās vieta"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Ekrāna pārklājums ar aktuāliem pieskāriena datiem"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Rādīt skārienus"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Rādīt vizuālo reakciju, kad tiek veikts skāriens"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Rādīt virsmas atjauninājumus WL: 294"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Atjaunināt visa loga virsmas, kad tās tiek atjauninātas WL: 294"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Rādīt GPU skat. atjaun."</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Atjaunināt logu skat., ja zīm. tiek liet. GPU."</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Rādīt apar. slāņu atjaun."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Atjaunin. aparatūras slāņiem ir jāmirgo zaļā krāsā"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Atkļūdot graf. proc. kapac. pārsn."</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Atspējot HW pārklājumus"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Vienmēr izmantot GPU atveidi ekrāna salikšanai"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulēt krāstelpu"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Iespējot OpenGL trases"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Atspējot USB audio maršr."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Atspējot auto maršr. uz USB audio ārējām ierīcēm"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Rādīt izkārtojuma robežas"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Rādīt klipu robežas, malas utt."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Virziens no labās uz kreiso (Obligāts) WL: 295"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Obl. izkārt. virz. no labās uz kr. pusi visām lok."</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Rādīt CPU lietojumu"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Ekrāna pārklājums ar aktuālo CPU lietojumu"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Piespiedu GPU render."</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Izmantot GPU atveidi divdimensiju zīmējumiem"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA piespiedu palaiš."</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Iespējot 4x MSAA OpenGL ES 2.0 lietotnēs"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Atkļūdot darbības daļā, kas nav taisnstūris."</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profila GPU atveide"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Loga animācijas mērogs"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Pārejas animācijas mērogs"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animācijas ilguma mērogs"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulēt sekundāros ekr."</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Lietotnes"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Nesaglabāt darbības"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Iznīcināt katru darbību, kad lietotājs to pārtrauc"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Fona procesu ierobežojums"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Rādīt visus ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Rādīt fona lietotņu dialoglodz. Lietotne nereaģē"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Lietotņu piespiedu atļaušana ārējā krātuvē"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Ļauj jebkuru lietotni ierakstīt ārējā krātuvē neatkarīgi no manifesta vērtības."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Pielāgot darbības"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Pielāgo visas darbības vairāku logu režīmam neatkarīgi no vērtībām manifestā."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Datora dublējuma parole"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Darbvirsmas pilnie dublējumi pašlaik nav aizsargāti."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Pieskarieties, lai mainītu vai noņemtu paroli pilniem darbvirsmas dublējumiem."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Jaunā dublējuma parole ir iestatīta."</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Jaunā parole un apstiprinājums neatbilst."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Iestatot dublējuma paroli, radās kļūme."</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Spilgts (noklusējums)"</item>
+ <item msgid="8446070607501413455">"Dabisks"</item>
+ <item msgid="6553408765810699025">"Standarta"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Uzlabotas krāsas"</item>
+ <item msgid="8280754435979370728">"Dabiskas krāsas"</item>
+ <item msgid="5363960654009010371">"Digitālajam saturam optimizētas krāsas"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktīvās lietotnes"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Lietotne nav aktīva. Pieskarieties, lai pārslēgtu."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Lietotne ir aktīva. Pieskarieties, lai pārslēgtu."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktīvie pakalpojumi"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Pašreiz darbojošos pakalpojumu skatīšana un vadība"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nakts režīms"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Atspējots"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Vienmēr ieslēgts"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automātiski"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Pārvērst par failu šifrējumu"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Pārvērst…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Jau šifrēts failu līmenī"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Pārvēršana par failu līmeņa šifrējumu"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Pārvērtiet datu sadalījumu par failu līmeņa šifrējumu.\n Brīdinājums! Tiks dzēsti visi jūsu dati.\n Šī funkcija ir alfa izstrādes stadijā un var nedarboties, kā paredzēts.\n Lai turpinātu, nospiediet pogu “Dzēst un pārvērst…”"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Dzēst un pārvērst…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Attēla krāsu režīms"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Izmantot sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Atspējota"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Vienkrāsains"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deiteranomālija (sarkans/zaļš)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomālija (sarkans/zaļš)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomālija (zils/dzeltens)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Krāsu korekcija"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Šī funkcija ir eksperimentāla un var ietekmēt veiktspēju."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Jaunā preference: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mk-rMK/arrays.xml b/packages/SettingsLib/res/values-mk-rMK/arrays.xml
index 5c51a7d..c97b577 100644
--- a/packages/SettingsLib/res/values-mk-rMK/arrays.xml
+++ b/packages/SettingsLib/res/values-mk-rMK/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Блокирано"</item>
<item msgid="1805837518286731242">"Привремено избегнува лоша врска"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Никогаш не проверувај"</item>
+ <item msgid="6042769699089883931">"Провери само ДРМ содржина"</item>
+ <item msgid="9174900380056846820">"Секогаш проверувај"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Никогаш не користи ХДЦП проверка"</item>
+ <item msgid="3878793616631049349">"Користи ХДЦП проверка само за ДРМ содржина"</item>
+ <item msgid="45075631231212732">"Секогаш користи ХДЦП проверка"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64.000"</item>
+ <item msgid="3534782711045262344">"256.000"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/меѓумеморија"</item>
+ <item msgid="2822309747675758628">"256 K/меѓумеморија"</item>
+ <item msgid="6699306198357496731">"1 M/меѓумеморија"</item>
+ <item msgid="5748528643937500349">"4 M/меѓумеморија"</item>
+ <item msgid="1978629051085111592">"16 M/меѓумеморија"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Без анимација"</item>
+ <item msgid="6624864048416710414">"Опсег на анимација 0,5x"</item>
+ <item msgid="2219332261255416635">"Опсег на анимација 1x"</item>
+ <item msgid="3544428804137048509">"Опсег на анимација 1,5x"</item>
+ <item msgid="3110710404225974514">"Опсег на анимација 2x"</item>
+ <item msgid="4402738611528318731">"Опсег на анимација 5x"</item>
+ <item msgid="6189539267968330656">"Опсег на анимација 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Без анимација"</item>
+ <item msgid="3375781541913316411">"Опсег на анимација 0,5x"</item>
+ <item msgid="1991041427801869945">"Опсег на анимација 1x"</item>
+ <item msgid="4012689927622382874">"Опсег на анимација 1,5x"</item>
+ <item msgid="3289156759925947169">"Опсег на анимација 2x"</item>
+ <item msgid="7705857441213621835">"Опсег на анимација 5x"</item>
+ <item msgid="6660750935954853365">"Опсег на анимација 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Исклучи анимација"</item>
+ <item msgid="1138649021950863198">"Опсег на анимација 5x"</item>
+ <item msgid="4394388961370833040">"Опсег на анимација 1x"</item>
+ <item msgid="8125427921655194973">"Опсег на анимација 1,5x"</item>
+ <item msgid="3334024790739189573">"Опсег на анимација 2x"</item>
+ <item msgid="3170120558236848008">"Опсег на анимација 5x"</item>
+ <item msgid="1069584980746680398">"Опсег на анимација 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ниедна"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (безбедно)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (безбедно)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (безбедно)"</item>
+ <item msgid="1833612718524903568">"4 илјади"</item>
+ <item msgid="238303513127879234">"4 илјади (безбедно)"</item>
+ <item msgid="3547211260846843098">"4 илјади (подобрено)"</item>
+ <item msgid="5411365648951414254">"4 илјади (подобрено, безбедно)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (двоен екран)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ниедна"</item>
+ <item msgid="9089630089455370183">"Евиденција за систем"</item>
+ <item msgid="5397807424362304288">"Systrace (Графика)"</item>
+ <item msgid="1340692776955662664">"Повици насобрани во glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Исклучено"</item>
+ <item msgid="675719912558941285">"Нацртај неправоаголен реон со сино"</item>
+ <item msgid="1064373276095698656">"Со зелено тестир. наредби за цртање"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Исклучено"</item>
+ <item msgid="2751513398307949636">"На екранот како цртички"</item>
+ <item msgid="1851438178120770973">"Во adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Исклучено"</item>
+ <item msgid="7688197031296835369">"Прикажи пречекорени делови"</item>
+ <item msgid="2290859360633824369">"Прикажи делови за лица со девтераномалија"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандардна граница"</item>
+ <item msgid="4071574792028999443">"Нема процеси во заднина"</item>
+ <item msgid="4810006996171705398">"Најмногу 1 процес"</item>
+ <item msgid="8586370216857360863">"Најмногу 2 процеса"</item>
+ <item msgid="836593137872605381">"Најмногу 3 процеси"</item>
+ <item msgid="7899496259191969307">"Најмногу 4 процеси"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Се полни"</item>
+ <item msgid="5220695614993094977">"МТП (Протокол за трансфер на медиуми)"</item>
+ <item msgid="2086000968159047375">"ПТП (Протокол за трансфер на слика)"</item>
+ <item msgid="7398830860950841822">"РНДИС (УСБ за етернет)"</item>
+ <item msgid="1718924214939774352">"Аудиоизвор"</item>
+ <item msgid="8126315616613006284">"МИДИ"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml
index a6f45d2..f19b7b3 100644
--- a/packages/SettingsLib/res/values-mk-rMK/strings.xml
+++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Изберете профил"</string>
<string name="category_personal" msgid="1299663247844969448">"Лични"</string>
<string name="category_work" msgid="8699184680584175622">"Работа"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Опции на развивач"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Овозможете ги опциите за програмери"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Постави опции за развој на апликација"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Опциите на програмерот не се достапни за овој корисник"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Поставките за ВПН не се достапни за овој корисник"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Поставките за спојување не се достапни за овој корисник"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Поставките за името на пристапната точка не се достапни за овој корисник"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Отстранување грешки на USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Режим на отстранување грешки кога е поврзано USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Отповикај овластувања за отстранување грешки од УСБ"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Кратенка за извештај за грешка"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Прикажи копче во менито за вклучување за да се направи извештај за грешка"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Остани во активен режим"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранот никогаш нема да биде во режим на штедење додека се полни"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Овозможи Bluetooth HCI за евиденција на пресретнување пакети"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Сними ги сите Bluetooth HCI пакети во датотека"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Отклучување со OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи да се отклучи подигнувачот"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволете отклучување со OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ПРЕДУПРЕДУВАЊЕ: функциите за заштита на уредот нема да работат на овој уред додека е вклучена оваа поставка."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Изберете апликација за лажна локација"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Нема поставено апликација за лажна локација"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Апликација за лажна локација: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Вмрежување"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Приказ на сертификација на безжична мрежа"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Овозможи преопширно пријавување Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Агресивно предавање од Wi‑Fi на мобилен"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Секогаш дозволувај Wi‑Fi скенирање во роаминг"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Користете наследен клиент на DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Мобилниот интернет е секогаш активен"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Дозволи/Забрани Wi‑Fi скенирање во роаминг според количината на постоечкиот податочен сообраќај на интерфејсот."</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Величини на меѓумеморија на забележувач"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Величина/меѓумеморија на дневник"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Изберете конфигурација за УСБ"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Изберете конфигурација за УСБ"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Овозможи лажни локации"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Овозможи лажни локации"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Овозможете проверка на атрибутот на приказот"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Користете го клиентот на DHCP од Lollipop наместо новиот клиент на DHCP на Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Секогаш држи го активен мобилниот интернет, дури и при активно Wi-Fi (за брзо префрлување мрежа)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Овозможи отстранување грешки на УСБ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Отстранувањето грешки на УСБ е наменето само за целите на развој. Користете го за копирање податоци меѓу вашиот компјутер и вашиот уред, за инсталирање апликации на вашиот уред без известување и за читање евиденција на податоци."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Отповикај пристап кон отстранување грешка од УСБ од сите претходно овластени компјутери?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Дозволи подесувања за развој?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Овие подесувања се наменети само за употреба за развој. Тие може да предизвикаат уредот и апликациите во него да се расипат или да се однесуваат необично."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Потврди апликации преку УСБ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Провери апликации инсталирани преку ADB/ADT за штетно однесување."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локален терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Овозможи апликација на терминал што овозможува локален пристап кон школка."</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Проверување HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Постави однесување на проверка на HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Отстранување грешки"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Избери апликација за отстранување грешки"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Нема поставено апликација за отстранување грешки"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Апликација за отстранување грешки: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Избери апликација"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ништо"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Почекај ја програмата за отстранување грешки"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Пред да се изврши, апликација за отстранување грешки чека програмата за отстранување грешки да се закачи"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Внес"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Цртање"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Прикажување забрзување на хардвер"</string>
+ <string name="media_category" msgid="4388305075496848353">"Медиуми"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Следење"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Овозможен е строг режим"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Осветли екран при. долги операции на главна нишка"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Локација на покажувач"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Прекривката на екран ги покажува тековните податоци на допир"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Прикажи допири"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Прикажи визуелни повратни информации за допири"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Прикажи ажурир. површина"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Осветли површ. на прозорци при нивно ажурирање"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Прикажи ажурир. со GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Осветли прегледи во прозорците при цртање со GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ажурир. слоеви на хардвер"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Осветли слоеви на хардвер со зелено кога се ажур."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Отстр. греш. на GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Оневозможи HW преклопувања"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Секогаш користи GPU за составување екран"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Симулирај простор на бои"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Овозможи траги на OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Исклучи УСБ-пренасочување"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Исклучи автоматско пренасочување до УСБ-аудиоуреди"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Прикажи граници на слој"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Прикажи граници на клип, маргини, итн."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Сила на RTL за насока на слој"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Присилно постави насока на распоред на екран во РТЛ за сите локални стандарди"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Прикажи употреба на ЦПУ"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Прекривка на екран прикаж. употреба на тековен ЦПУ"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Присили рендерирање на GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Присилно користење на GPU за цртеж 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Сила 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Овозможи 4x MSAA за апликации OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Отстрани грешка на неправоаголни клип операции"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Прикажување пофил на GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Опсег на аним. на прозор."</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Опсег на преодна анимац."</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Скала за времетраење на аниматор"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Симул. секундарен екран"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Апликации"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Не чувај активности"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Уништи ја секоја активност штом корисникот ќе го остави"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Граница на процес во зад."</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Прикажи ги сите ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Прикажи „Апл. не реагира“ за. апл. во заднина"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Принуд. дозволете апликации на надворешна меморија"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Запишува апл. во надв.меморија, незав. од манифест"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Принуди ги активностите да ја менуваат големината"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Ги прави сите активности да бидат со променлива големина за мултипрозорец, без разлика на вредностите на манифестот."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Резервна лозинка за работна површина"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Целосни резервни копии на работната површина кои во моментов не се заштитени"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Допрете за да се промени или отстрани лозинката за целосна резервна копија на работната површина"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Подесена нова лозинка на резервна копија"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Новата лозинка и потврдата не се исти"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Неуспешно подесување лозинка на резервна копија"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Динамично (стандардно)"</item>
+ <item msgid="8446070607501413455">"Природно"</item>
+ <item msgid="6553408765810699025">"Стандардно"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Подобрени бои"</item>
+ <item msgid="8280754435979370728">"Природни бои како што со гледаат со голо око"</item>
+ <item msgid="5363960654009010371">"Оптимизирани бои за дигитална содржина"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивни апликации"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Неактивно. Допрете за префрлање."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Активно. Допрете за префрлање."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Активни услуги"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Погледнете и контролирајте услуги што се моментално активни"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Ноќен режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Оневозможено"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Секогаш вклучено"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматски"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Конвертирајте до шифрирање датотеки"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Конвертирај..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Датотеката е веќе шифрирана"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Конвертирајте до шифрирање на база на датотеки"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Конвертирајте ја партицијата со податоци до шифрирање на база на датотеки.\n !!Предупредување!! Тоа ќе ги избрише сите податоци.\n Функцијава е алфа и може да не работи правилно.\n Притиснете „Избриши и конвертирај... за да продолжите."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Избриши и конвертирај..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Режим на боја на слика"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Користи sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Оневозможено"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Скала со сиви тонови"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Девтераномалија (слепило за црвена и зелена)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалија (слепило за црвена и зелена)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалија (слепило за сина и жолта)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Корекција на боја"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Функцијата е експериментална и може да влијае на изведбата."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Прескокнато според <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ml-rIN/arrays.xml b/packages/SettingsLib/res/values-ml-rIN/arrays.xml
index 4d3261a..404b20a 100644
--- a/packages/SettingsLib/res/values-ml-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-ml-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"തടഞ്ഞിരിക്കുന്നു"</item>
<item msgid="1805837518286731242">"മോശം കണക്ഷൻ താൽക്കാലികമായി ഒഴിവാക്കുന്നു"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ഒരിക്കലും പരിശോധിക്കരുത്"</item>
+ <item msgid="6042769699089883931">"DRM ഉള്ളടക്കത്തിനുമാത്രമായി പരിശോധിക്കുക"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"ഓരോ ലോഗ് ബഫറിനും 64K"</item>
+ <item msgid="2822309747675758628">"ഓരോ ലോഗ് ബഫറിനും 256K"</item>
+ <item msgid="6699306198357496731">"ഓരോ ലോഗ് ബഫറിനും 1M"</item>
+ <item msgid="5748528643937500349">"ഓരോ ലോഗ് ബഫറിനും 4M"</item>
+ <item msgid="1978629051085111592">"ഓരോ ലോഗ് ബഫറിനും 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ആനിമേഷൻ ഓഫുചെയ്യുക"</item>
+ <item msgid="6624864048416710414">"ആനിമേഷൻ സ്കെയിൽ .5x"</item>
+ <item msgid="2219332261255416635">"ആനിമേഷൻ സ്കെയിൽ 1x"</item>
+ <item msgid="3544428804137048509">"ആനിമേഷൻ സ്കെയിൽ 1.5x"</item>
+ <item msgid="3110710404225974514">"ആനിമേഷൻ സ്കെയിൽ 2x"</item>
+ <item msgid="4402738611528318731">"ആനിമേഷൻ സ്കെയിൽ 5x"</item>
+ <item msgid="6189539267968330656">"ആനിമേഷൻ സ്കെയിൽ 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ആനിമേഷൻ ഓഫുചെയ്യുക"</item>
+ <item msgid="3375781541913316411">"ആനിമേഷൻ സ്കെയിൽ .5x"</item>
+ <item msgid="1991041427801869945">"ആനിമേഷൻ സ്കെയിൽ 1x"</item>
+ <item msgid="4012689927622382874">"ആനിമേഷൻ സ്കെയിൽ 1.5x"</item>
+ <item msgid="3289156759925947169">"ആനിമേഷൻ സ്കെയിൽ 2x"</item>
+ <item msgid="7705857441213621835">"ആനിമേഷൻ സ്കെയിൽ 5x"</item>
+ <item msgid="6660750935954853365">"ആനിമേഷൻ സ്കെയിൽ 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ആനിമേഷൻ രഹിതം"</item>
+ <item msgid="1138649021950863198">"ആനിമേഷൻ സ്കെയിൽ .5x"</item>
+ <item msgid="4394388961370833040">"ആനിമേഷൻ സ്കെയിൽ 1x"</item>
+ <item msgid="8125427921655194973">"ആനിമേഷൻ സ്കെയിൽ 1.5x"</item>
+ <item msgid="3334024790739189573">"ആനിമേഷൻ സ്കെയിൽ 2x"</item>
+ <item msgid="3170120558236848008">"ആനിമേഷൻ സ്കെയിൽ 5x"</item>
+ <item msgid="1069584980746680398">"ആനിമേഷൻ സ്കെയിൽ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ഒന്നുമില്ല"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (സുരക്ഷിതം)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (സുരക്ഷിതം)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (സുരക്ഷിതം)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (സുരക്ഷിതം)"</item>
+ <item msgid="3547211260846843098">"4K (അപ്സ്കെയിൽ ചെയ്തത്)"</item>
+ <item msgid="5411365648951414254">"4K (അപ്സ്കെയിൽ ചെയ്തത്, സുരക്ഷിതം)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ഇരട്ട സ്ക്രീൻ)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ഒന്നുമില്ല"</item>
+ <item msgid="9089630089455370183">"ലോഗ്ക്യാറ്റ്"</item>
+ <item msgid="5397807424362304288">"സിസ്ട്രേസ് (ഗ്രാഫിക്സ്)"</item>
+ <item msgid="1340692776955662664">"glGetError-ലെ കോൾ സ്റ്റാക്ക്"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ഓഫ്"</item>
+ <item msgid="675719912558941285">"നീലനിറത്തിൽ ചതുരമല്ലാത്ത ക്ലിപ്പ് ഭാഗം വരയ്ക്കുക"</item>
+ <item msgid="1064373276095698656">"പരിശോധിച്ച ഡ്രോയിംഗ് കമാൻഡുകൾ പച്ചനിറത്തിൽ ഹൈലൈറ്റുചെയ്യുക"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ഓഫ്"</item>
+ <item msgid="2751513398307949636">"സ്ക്രീനിൽ ബാറുകളായി"</item>
+ <item msgid="1851438178120770973">"adb ഷെൽ dumpsys gfxinfo-യിൽ"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ഓഫ്"</item>
+ <item msgid="7688197031296835369">"ഓവർഡ്രോ ഭാഗങ്ങൾ ദൃശ്യമാക്കുക"</item>
+ <item msgid="2290859360633824369">"വർണ്ണാന്ധതയ്ക്കായുള്ള ഭാഗങ്ങൾ ദൃശ്യമാക്കുക"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"അടിസ്ഥാന പരിധി"</item>
+ <item msgid="4071574792028999443">"പശ്ചാത്തല പ്രോസസ്സുകൾ ഒന്നുമില്ല"</item>
+ <item msgid="4810006996171705398">"പരമാവധി ഒരു പ്രോസസ്സ്"</item>
+ <item msgid="8586370216857360863">"പരമാവധി 2 പ്രോസസ്സുകൾ"</item>
+ <item msgid="836593137872605381">"പരമാവധി 3 പ്രോസസ്സുകൾ"</item>
+ <item msgid="7899496259191969307">"പരമാവധി 4 പ്രോസസ്സുകൾ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ചാർജ്ജുചെയ്യുന്നു"</item>
+ <item msgid="5220695614993094977">"MTP (മീഡിയ ട്രാൻസ്ഫർ പ്രോട്ടോക്കോള്)"</item>
+ <item msgid="2086000968159047375">"PTP (പിക്ചർ ട്രാൻസ്ഫർ പ്രോട്ടോക്കോള്)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ഇതർനെറ്റ്)"</item>
+ <item msgid="1718924214939774352">"ഓഡിയോ ഉറവിടം"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml
index 16e33d1..373a00d 100644
--- a/packages/SettingsLib/res/values-ml-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"പ്രൊഫൈൽ തിരഞ്ഞെടുക്കുക"</string>
<string name="category_personal" msgid="1299663247844969448">"വ്യക്തിഗതം"</string>
<string name="category_work" msgid="8699184680584175622">"ഔദ്യോഗികം"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ഡവലപ്പർ ഓപ്ഷനുകൾ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"ഡെവലപ്പർ ഓപ്ഷനുകൾ പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"അപ്ലിക്കേഷൻ വികസനത്തിന് ഓപ്ഷനുകൾ സജ്ജീകരിക്കുക"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ഈ ഉപയോക്താവിനായി ഡവലപ്പർ ഓപ്ഷനുകൾ ലഭ്യമല്ല"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"ഈ ഉപയോക്താവിനായി VPN ക്രമീകരണങ്ങൾ ലഭ്യമല്ല"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ഈ ഉപയോക്താവിനായി ടെതറിംഗ് ക്രമീകരണങ്ങൾ ലഭ്യമല്ല"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ആക്സസ്സ് പോയിന്റ് നെയിം ക്രമീകരണങ്ങൾ ഈ ഉപയോക്താവിനായി ലഭ്യമല്ല"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ഡീബഗ്ഗിംഗ്"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB കണക്റ്റുചെയ്തിരിക്കുമ്പോൾ ഡീബഗ് മോഡ്"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ഡീബഗ്ഗിംഗ് അംഗീകാരം പിൻവലിക്കുക"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ബഗ് റിപ്പോർട്ട് കുറുക്കുവഴി"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ബഗ് റിപ്പോർട്ട് എടുക്കുന്നതിന് പവർ മെനുവിൽ ഒരു ബട്ടൺ കാണിക്കുക"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"സജീവമായി തുടരുക"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ചാർജ്ജുചെയ്യുമ്പോൾ സ്ക്രീൻ ഒരിക്കലും സുഷുപ്തിയിലാകില്ല"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ബ്ലൂടൂത്ത് HCI സ്നൂപ്പ് ലോഗ് സജീവമാക്കൂ"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ഒരു ഫയലിൽ എല്ലാ ബ്ലൂടൂത്ത് HCI പാക്കറ്റുകളും ക്യാപ്ചർ ചെയ്യുക"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM അൺലോക്കുചെയ്യൽ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"അൺലോക്കാകാൻ ബൂട്ട്ലോഡറിനെ അനുവദിക്കുക"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM അൺലോക്കുചെയ്യൽ അനുവദിക്കണോ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"മുന്നറിയിപ്പ്: ഈ ക്രമീകരണം ഓണായിരിക്കുമ്പോൾ, ഉപകരണ സുരക്ഷാ ഫീച്ചറുകൾ ഈ ഉപകരണത്തിൽ പ്രവർത്തിക്കില്ല."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"മോക്ക്ലൊക്കേഷൻ ആപ്പ് തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"വ്യാജ ലൊക്കേഷൻ ആപ്പ് സജ്ജമാക്കിയിട്ടില്ല"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"വ്യാജ ലൊക്കേഷൻ ആപ്പ്: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"നെറ്റ്വര്ക്കിംഗ്"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷൻ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"വൈഫൈ വെർബോസ് ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"സെല്ലുലാർ ഹാൻഡ്ഓവറിലേക്ക് വൈഫൈ അഗ്രസ്സീവാക്കുക"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"എപ്പോഴും വൈഫൈ റോം സ്കാൻ അനുവദിക്കൂ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"പഴയ DHCP ക്ലയന്റ് ഉപയോഗിക്കുക"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"സെല്ലുലാർ ഡാറ്റ എല്ലായ്പ്പോഴും സജീവം"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ഇന്റർഫേസിലെ ഡാറ്റ ട്രാഫിക്ക് സാന്നിദ്ധ്യത്തിന്റെ കണക്ക് അടിസ്ഥാനമാക്കി വൈഫൈ റോം സ്കാനുകൾ അനുവദിക്കുക/അനുവദിക്കാതിരിക്കുക"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ലോഗർ ബഫർ വലുപ്പം"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ഓരോ ലോഗ് ബഫറിനും വലുപ്പം തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB കോൺഫിഗറേഷൻ തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB കോൺഫിഗറേഷൻ തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"വ്യാജ ലൊക്കേഷനുകൾ അനുവദിക്കുക"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"വ്യാജ ലൊക്കേഷനുകൾ അനുവദിക്കുക"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"ആട്രിബ്യൂട്ട് പരിശോധന കാണൽ സജീവമാക്കൂ"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"പുതിയ Android DHCP ക്ലയന്റിനുപകരം Lollipop-ൽ നിന്ന് DHCP ക്ലയന്റ് ഉപയോഗിക്കുക."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"വൈഫൈ സജീവമാണെങ്കിലും, മൊബൈൽ ഡാറ്റ സജീവമായി നിർത്തുക (വേഗത്തിൽ നെറ്റ്വർക്ക് മാറുന്നതിനായി)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ഡീബഗ്ഗുചെയ്യാൻ അനുവദിക്കണോ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ഡീബഗ്ഗിംഗ് വികസന ആവശ്യകതകൾക്ക് മാത്രമുള്ളതാണ്. നിങ്ങളുടെ കമ്പ്യൂട്ടറിനും ഉപകരണത്തിനുമിടയിൽ ഡാറ്റ പകർത്തുന്നതിനും അറിയിപ്പില്ലാതെ തന്നെ നിങ്ങളുടെ ഉപകരണത്തിൽ അപ്ലിക്കേഷനുകൾ ഇൻസ്റ്റാളുചെയ്യുന്നതിനും ലോഗ് ഡാറ്റ റീഡുചെയ്യുന്നതിനും ഇത് ഉപയോഗിക്കുക."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"നിങ്ങൾ മുമ്പ് അംഗീകരിച്ച എല്ലാ കമ്പ്യൂട്ടറുകളിൽ നിന്നും USB ഡീബഗ്ഗുചെയ്യുന്നതിനുള്ള ആക്സസ്സ് പിൻവലിക്കണോ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"വികസന ക്രമീകരണങ്ങൾ അനുവദിക്കണോ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ഈ ക്രമീകരണങ്ങൾ വികസന ഉപയോഗത്തിന് മാത്രമായുള്ളതാണ്. അവ നിങ്ങളുടെ ഉപകരണവും അതിലെ അപ്ലിക്കേഷനുകളും തകരാറിലാക്കുന്നതിനോ തെറ്റായി പ്രവർത്തിക്കുന്നതിനോ ഇടയാക്കാം."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB വഴി ആപ്സ് പരിശോധിച്ചുറപ്പിക്കൂ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"കേടാക്കുന്ന പ്രവർത്തനരീതിയുള്ള ADB/ADT വഴി ഇൻസ്റ്റാളുചെയ്ത അപ്ലിക്കേഷനുകൾ പരിശോധിക്കുക."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"പ്രാദേശിക ടെർമിനൽ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"പ്രാദേശിക ഷെൽ ആക്സസ് നൽകുന്ന ടെർമിനൽ അപ്ലിക്കേഷൻ പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP പരിശോധന"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP ചെക്കിംഗ്രീതി സജ്ജമാക്കുക"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ഡീബഗ് ചെയ്യുന്നു"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ഡീബഗ് അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ഡീബഗ് അപ്ലിക്കേഷനുകളൊന്നും സജ്ജമാക്കിയിട്ടില്ല"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ഡീബഗ്ഗുചെയ്യൽ അപ്ലിക്കേഷൻ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ആപ്പ് തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="no_application" msgid="2813387563129153880">"ഒന്നുമില്ല"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ഡീബഗ്ഗറിനായി കാത്തിരിക്കുക"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ഡീബഗ്ഗുചെയ്ത അപ്ലിക്കേഷൻ നിർവ്വഹണത്തിനുമുമ്പായി അറ്റാച്ചുചെയ്യുന്നതിന് ഡീബഗ്ഗറിനായി കാത്തിരിക്കുന്നു."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ഇൻപുട്ട്"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ഡ്രോയിംഗ്"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ഹാർഡ്വെയർ ത്വരിതപ്പെടുത്തിയ റെൻഡർ ചെയ്യൽ"</string>
+ <string name="media_category" msgid="4388305075496848353">"മീഡിയ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"മോണിറ്ററിംഗ്"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ഫോഴ്സ്മോഡ് സജീവമാക്കി"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"പ്രധാന ത്രെഡിൽ അപ്ലിക്കേഷനുകൾ ദൈർഘ്യമേറിയ പ്രവർത്തനങ്ങൾ നടത്തുമ്പോൾ സ്ക്രീൻ ഫ്ലാഷ് ചെയ്യുക"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"പോയിന്റർ ലൊക്കേഷൻ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"സ്ക്രീൻ ഓവർലേ നിലവിലെ ടച്ച് ഡാറ്റ ദൃശ്യമാക്കുന്നു"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ടച്ചുകൾ ദൃശ്യമാക്കുക"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ടച്ചുകൾക്കുള്ള ദൃശ്യ ഫീഡ്ബാക്ക് ദൃശ്യമാക്കുക"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"സർഫേസ് അപ്ഡേറ്റ് കാണിക്കൂ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"മുഴുവൻ വിൻഡോ സർഫേസുകളും അപ്ഡേറ്റുചെയ്തുകഴിയുമ്പോൾ അവ ഫ്ലാഷുചെയ്യുക"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU കാഴ്ച അപ്ഡേറ്റ് കാണിക്കൂ"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ഉപയോഗിച്ച് വലിക്കുമ്പോൾ വിൻഡോകൾക്കുള്ളിൽ കാഴ്ചകൾ ഫ്ലാഷുചെയ്യുക"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ഹാർഡ്വെയർ ലേയർ അപ്ഡേറ്റ് കാണിക്കൂ"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ഹാർഡ്വെയർ ലേയറുകളുടെ അപ്ഡേറ്റുകൾ പൂർത്തിയാകുമ്പോൾ അവ പച്ച നിറത്തിൽ പ്രകാശിപ്പിക്കുക"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ഓവർഡ്രോ ഡീബഗ്ഗുചെയ്യുക"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ഓവർലേ നിഷ്ക്രിയമാക്കൂ"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"സ്ക്രീൻ കമ്പോസിറ്റുചെയ്യലിനായി എല്ലായ്പ്പോഴും GPU ഉപയോഗിക്കുക"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"വർണ്ണ സ്പെയ്സ് പ്രവർത്തിപ്പിക്കുക"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ട്രെയ്സ് സജീവമാക്കൂ"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ഓഡിയോ റൂട്ടിംഗ് പ്രവർത്തനരഹിതമാക്കുക"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ഓഡിയോ പെരിഫറലുകളിലേക്കുള്ള യാന്ത്രിക റൂട്ടിംഗ് പ്രവർത്തനരഹിതമാക്കുക"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ലേഔട്ട് ബൗണ്ട് കാണിക്കൂ"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ക്ലിപ്പ് ബൗണ്ടുകൾ, മാർജിനുകൾ തുടങ്ങിയവ ദൃശ്യമാക്കുക"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ലേഔട്ട് ഡയറക്ഷൻ നിർബന്ധമാക്കുക"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"എല്ലാ ഭാഷകൾക്കുമായി സ്ക്രീൻ ലേഔട്ട് ഡയറക്ഷൻ RTL-ലേക്ക് നിർബന്ധമാക്കുക"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU ഉപയോഗം ദൃശ്യമാക്കുക"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"സ്ക്രീൻ ഓവർലേ നിലവിലെ CPU ഉപയോഗം ദൃശ്യമാക്കുന്നു"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU റെൻഡറിംഗ് ഫോഴ്സ്ചെയ്യുക"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ഡ്രോയിംഗിനായുള്ള നിരബന്ധിത GPU ഉപയോഗം"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA നിർബന്ധമാക്കുക"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 അപ്ലിക്കേഷനുകളിൽ 4x MSAA പ്രവർത്തനക്ഷമമാക്കുക"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"ചതുരാകൃതിയിലല്ലാത്ത ക്ലിപ്പ്പ്രവർത്തനം ഡീബഗുചെയ്യൂ"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"പ്രൊഫൈൽ GPU റെൻഡർചെയ്യൽ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"വിൻഡോ ആനിമേഷൻ സ്കെയിൽ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"സംക്രമണ ആനിമേഷൻ സ്കെയിൽ"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ആനിമേറ്റർ ദൈർഘ്യ സ്കെയിൽ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"രണ്ടാം ഡിസ്പ്ലേകൾ പ്രവർത്തിപ്പിക്കുക"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"അപ്ലിക്കേഷനുകൾ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"പ്രവർത്തനങ്ങൾ സൂക്ഷിക്കരുത്"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ഉപയോക്താവ് ഉപേക്ഷിക്കുന്നതിനനുസരിച്ച് എല്ലാ പ്രവർത്തനങ്ങളും നശിപ്പിക്കുക"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"പശ്ചാത്തല പ്രോസസ്സ് പരിധി"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"എല്ലാ ANR-കളും ദൃശ്യമാക്കുക"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"പശ്ചാത്തല അപ്ലിക്കേഷനുകൾക്ക് അപ്ലിക്കേഷൻ പ്രതികരിക്കുന്നില്ല എന്ന ഡയലോഗ് കാണിക്കുക"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ബാഹ്യമായതിൽ നിർബന്ധിച്ച് അനുവദിക്കുക"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"മാനിഫെസ്റ്റ് മൂല്യങ്ങൾ പരിഗണിക്കാതെ, ബാഹ്യ സ്റ്റോറേജിലേക്ക് എഴുതപ്പെടുന്നതിന് ഏതൊരു ആപ്പിനെയും യോഗ്യമാക്കുന്നു"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"വലിപ്പം മാറ്റാൻ പ്രവർത്തനങ്ങളെ നിർബന്ധിക്കുക"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"മാനിഫെസ്റ്റ് മൂല്യങ്ങൾ പരിഗണിക്കാതെ, എല്ലാ പ്രവർത്തനങ്ങളെയും മൾട്ടി-വിൻഡോയ്ക്കായി വലിപ്പം മാറ്റുന്നു."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ഡെസ്ക്ടോപ്പ് ബാക്കപ്പ് പാസ്വേഡ്"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ഡെസ്ക്ടോപ്പ് പൂർണ്ണ ബാക്കപ്പുകൾ നിലവിൽ പരിരക്ഷിച്ചിട്ടില്ല"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ഡെസ്ക്ടോപ്പ് പൂർണ്ണ ബാക്കപ്പുകൾക്കായി പാസ്വേഡുകൾ മാറ്റാനോ നീക്കംചെയ്യാനോ സ്പർശിക്കുക"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"പുതിയ ബാക്കപ്പ് പാസ്വേഡ് സജ്ജമാക്കി"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"പുതിയ പാസ്വേഡും സ്ഥിരീകരണവും പൊരുത്തപ്പെടുന്നില്ല"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ബാക്കപ്പ് പാസ്വേഡ് സജ്ജമാക്കുന്നതിൽ പരാജയപ്പെട്ടു"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"വൈബ്രന്റ് (സ്ഥിരമായത്)"</item>
+ <item msgid="8446070607501413455">"സ്വാഭാവികം"</item>
+ <item msgid="6553408765810699025">"സ്റ്റാന്ഡേര്ഡ്"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"മെച്ചപ്പെടുത്തിയ വര്ണ്ണങ്ങൾ"</item>
+ <item msgid="8280754435979370728">"നമ്മൾ കാണുന്നത് പോലെയുള്ള സ്വാഭാവിക വർണ്ണങ്ങൾ"</item>
+ <item msgid="5363960654009010371">"ഡിജിറ്റൽ ഉള്ളടക്കത്തിനായി വർണ്ണങ്ങൾ ഒപ്റ്റിമൈസ് ചെയ്തു"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"നിഷ്ക്രിയ ആപ്പ്സ്"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"നിഷ്ക്രിയം. ടോഗിൾ ചെയ്യാൻ സ്പർശിക്കുക."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"സജീവം. ടോഗിൾ ചെയ്യാൻ സ്പർശിക്കുക."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"പ്രവർത്തിക്കുന്ന സേവനങ്ങൾ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"നിലവിൽ പ്രവർത്തിക്കുന്ന സേവങ്ങൾ കാണുക, നിയന്ത്രിക്കുക"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"നൈറ്റ് മോഡ്"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"എല്ലായ്പ്പോഴും ഓണാണ്"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ഓട്ടോമാറ്റിക്"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ഫയൽ എൻക്രിപ്ഷനിലേക്ക് പരിവർത്തിപ്പിക്കുക"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"പരിവർത്തിപ്പിക്കുക…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ഇതിനകം തന്നെ ഫയൽ എൻക്രിപ്റ്റ് ചെയ്തു"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ഫയൽ അധിഷ്ഠിത എൻക്രിപ്ഷനിലേക്ക് പരിവർത്തിപ്പിക്കുന്നു"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ഡാറ്റാ വിഭജനം, ഫയൽ അധിഷ്ഠിത എൻക്രിപ്ഷനിലേക്ക് പരിവർത്തിപ്പിക്കുക.\n !!മുന്നറിയിപ്പ്!! ഇങ്ങനെ ചെയ്താൽ നിങ്ങളുടെ എല്ലാ ഡാറ്റയും മായ്ക്കപ്പെടും.\n ഈ ഫീച്ചറിപ്പോൾ ആൽഫാ ഘട്ടത്തിലാണ്, ശരിയായി പ്രവർത്തിച്ചേക്കില്ല.\n തുടരുന്നതിന് \'വൈപ്പുചെയ്ത് പരിവർത്തിപ്പിക്കുക...\' അമർത്തുക."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"വൈപ്പുചെയ്ത് പരിവർത്തിപ്പിക്കുക…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ചിത്ര വർണ്ണ മോഡ്"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ഉപയോഗിക്കുക"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"മോണോക്രോമസി"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"വർണ്ണാന്ധത (ചുവപ്പ്-പച്ച)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"പ്രോട്ടാനോമലി (ചുവപ്പ്-പച്ച)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ട്രിട്ടാനോമലി (നീല-മഞ്ഞ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"വർണ്ണം ക്രമീകരിക്കൽ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ഈ ഫീച്ചർ പരീക്ഷണാത്മകമായതിനാൽ പ്രകടനത്തെ ബാധിച്ചേക്കാം."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> ഉപയോഗിച്ച് അസാധുവാക്കി"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mn-rMN/arrays.xml b/packages/SettingsLib/res/values-mn-rMN/arrays.xml
index 2849b51..c4c6d28 100644
--- a/packages/SettingsLib/res/values-mn-rMN/arrays.xml
+++ b/packages/SettingsLib/res/values-mn-rMN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Хориглогдсон"</item>
<item msgid="1805837518286731242">"Муу холболтоос түр зайлсхийж байна"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Хэзээ ч шалгахгүй"</item>
+ <item msgid="6042769699089883931">"Зөвхөн DRM контентыг шалгах"</item>
+ <item msgid="9174900380056846820">"Байнга шалгах"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"HDCP шалгахыг хэзээ ч ашиглахгүй"</item>
+ <item msgid="3878793616631049349">"HDCP шалгахыг зөвхөн DRM контентэд ашиглах"</item>
+ <item msgid="45075631231212732">"Байнга HDCP шалгахыг ашиглах"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1М"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1М"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"лог буфер бүрт 64K"</item>
+ <item msgid="2822309747675758628">"лог буфер бүрт 256K"</item>
+ <item msgid="6699306198357496731">"лог буфер бүрт 1M"</item>
+ <item msgid="5748528643937500349">"лог буфер бүрт 4M"</item>
+ <item msgid="1978629051085111592">"лог буфер бүрт 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Дүрс амилуулалт идэвхгүй"</item>
+ <item msgid="6624864048416710414">"Дүрс амилуулах далайц .5x"</item>
+ <item msgid="2219332261255416635">"Дүрс амилуулах далайц 1x"</item>
+ <item msgid="3544428804137048509">"Дүрс амилуулах далайц 1.5x"</item>
+ <item msgid="3110710404225974514">"Дүрс амилуулалтын далайц 2x"</item>
+ <item msgid="4402738611528318731">"Дүрс амилуулалтын далайц 5x"</item>
+ <item msgid="6189539267968330656">"Дүрс амилуулалтын далайц 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Дүрс амилуулалт идэвхгүй"</item>
+ <item msgid="3375781541913316411">"Дүрс амилуулах далайц .5x"</item>
+ <item msgid="1991041427801869945">"Дүрс амилуулах далайц 1x"</item>
+ <item msgid="4012689927622382874">"Дүрс амилуулах далайц 1.5x"</item>
+ <item msgid="3289156759925947169">"Дүрс амилуулалтын далайц 2x"</item>
+ <item msgid="7705857441213621835">"Дүрс амилуулалтын далайц 5x"</item>
+ <item msgid="6660750935954853365">"Дүрс амилуулалтын далайц 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Дүрс амилуулалт идэвхгүй"</item>
+ <item msgid="1138649021950863198">"Дүрс амилуулах далайц .5x"</item>
+ <item msgid="4394388961370833040">"Дүрс амилуулах далайц 1x"</item>
+ <item msgid="8125427921655194973">"Дүрс амилуулах далайц 1.5x"</item>
+ <item msgid="3334024790739189573">"Дүрс амилуулалтын далайц 2x"</item>
+ <item msgid="3170120558236848008">"Дүрс амилуулалтын далайц 5x"</item>
+ <item msgid="1069584980746680398">"Дүрс амилуулалтын далайц 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Байхгүй"</item>
+ <item msgid="9033194758688161545">"480пиксель"</item>
+ <item msgid="1025306206556583600">"480пиксель (найдвартай)"</item>
+ <item msgid="1853913333042744661">"720пиксель"</item>
+ <item msgid="3414540279805870511">"720пиксель (найдвартай)"</item>
+ <item msgid="9039818062847141551">"1080пиксель"</item>
+ <item msgid="4939496949750174834">"1080пиксель (найдвартай)"</item>
+ <item msgid="1833612718524903568">"4К"</item>
+ <item msgid="238303513127879234">"4К (найдвартай)"</item>
+ <item msgid="3547211260846843098">"4К (өндөр чанартай)"</item>
+ <item msgid="5411365648951414254">"4К (өндөр чанартай, найдвартай)"</item>
+ <item msgid="1311305077526792901">"720пиксель, 1080пиксель (хос дэлгэц)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Алийг нь ч биш"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (График)"</item>
+ <item msgid="1340692776955662664">"Стекийг glGetError дээр дуудах"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Идэвхгүй"</item>
+ <item msgid="675719912558941285">"Тэгш өнцөгт бус клипийн бүсийг цэнхэрээр зурах"</item>
+ <item msgid="1064373276095698656">"Шалгасан зурах командуудыг ногоон өнгөөр тэмдэглэх"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Идэвхгүй"</item>
+ <item msgid="2751513398307949636">"Дэлгэц дээр савхаар"</item>
+ <item msgid="1851438178120770973">"adb шел доторх dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Идэвхгүй"</item>
+ <item msgid="7688197031296835369">"Давхар дүрслэлтэй хэсгийг харуулах"</item>
+ <item msgid="2290859360633824369">"Өнгө үл ялгагчид зориулсан бүсүүдийг харуулах"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандарт хязгаар"</item>
+ <item msgid="4071574792028999443">"Далд процесс байхгүй"</item>
+ <item msgid="4810006996171705398">"Хамгийн ихдээ 1 процесс"</item>
+ <item msgid="8586370216857360863">"Хамгийн ихдээ 2 процесс"</item>
+ <item msgid="836593137872605381">"Хамгийн ихдээ 3 процесс"</item>
+ <item msgid="7899496259191969307">"Хамгийн ихдээ 4 процесс"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Цэнэглэж байна"</item>
+ <item msgid="5220695614993094977">"MTP (Медиа дамжуулах протокол)"</item>
+ <item msgid="2086000968159047375">"PTP (Зураг Дамжуулах Протокол)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Аудио эх сурвалж"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn-rMN/strings.xml
index 53c71a4..62e2c39 100644
--- a/packages/SettingsLib/res/values-mn-rMN/strings.xml
+++ b/packages/SettingsLib/res/values-mn-rMN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Профайлаа сонгоно уу"</string>
<string name="category_personal" msgid="1299663247844969448">"Хувийн"</string>
<string name="category_work" msgid="8699184680584175622">"Ажил"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Хөгжүүлэгчийн тохиргоо"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Хөгжүүлэгчийн сонголтыг идэвхжүүлэх"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Апп хөгжүүлэлтэд зориулсан сонголтуудыг тохируулах"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Энэ хэрэглэгч хөгжүүлэгчийн тохиргоог ашиглах боломжгүй"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Энэ хэрэглэгчид VPN тохиргоог ашиглах боломжгүй"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Энэ хэрэглэгчид тетеринг тохиргоог ашиглах боломжгүй"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Энэ хэрэглэгчийн хувьд Хандалтын цэгийн нэрийн тохиргоог ашиглах боломжгүй"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB дебаг"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB холбодсон үеийн согог засах горим"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB дебагын зөвшөөрлийг хураах"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Согог мэдээлэх товчлол"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Цэсэнд согогийн репорт авахад зориулсан товчийг харуулах"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Идэвхтэй байлгах"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Блютүүт HCI снүүп логыг идэвхжүүлэх"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Файл доторх бүх блютүүт HCI пакетуудыг унших"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM түгжээ тайлагч"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-н түгжээг тайлахыг зөвшөөрөх"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM түгжээ тайлагчийг зөвшөөрөх үү?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"АНХААР: Энэ тохиргоо асаалттай байгаа үед тухайн төхөөрөмжийн хамгаалалтын функцүүд ажиллахгүй."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Хуурамч байршлын апп сонгох"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Хуурамч байршлын апп-ыг тохируулаагүй байна"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Хуурамч байршлын апп: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Сүлжээ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Утасгүй дэлгэцийн сертификат"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Verbose лог-г идэвхжүүлэх"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Үүрэн шилжүүлэг рүү идэвхтэй Wi‑Fi"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi Роум сканыг байнга зөвшөөрөх"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Хуучин DHCP харилцагчийг хэрэглэх"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Үүрэн холбооны датаг үргэлж идэвхтэй байлгана"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Интерфэйс дээрх дата трафикын хэмжээнээс хамааран Wi‑Fi Роум Скан-г зөвшөөрөх/үл зөвшөөрөх"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Логгерын буферын хэмжээ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Лог буфер бүрт ногдох логгерын хэмжээг сонгоно уу"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB Тохируулга сонгох"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB Тохируулга сонгох"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Хуурамч байршлыг зөвшөөрөх"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Хуурамч байршлыг зөвшөөрөх"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Харах тохируулгын шалгалтыг идэвхжүүлэх"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Шинэ Андройд DHCP харилцагчийн оронд Lollipop-ийн DHCP харилцагчийг хэрэглэ."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi идэвхтэй байхад ч гэсэн гар утасны датаг идэвхтэй байлгадаг (сүлжээг түргэн солихын тулд)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB дебаг хийхийг зөвшөөрөх үү?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB дебаг нь зөвхөн хөгжүүлэлтийн зорилготой. Үүнийг өөрийн компьютер болон төхөөрөмжийн хооронд өгөгдөл хуулах, өөрийн төхөөрөмж дээр мэдэгдэлгүйгээр аппликешн суулгах, лог датаг унших зэрэгт ашиглаж болно."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Таны өмнө нь зөвшөөрөл өгсөн бүх компьютерээс USB дебаг хандалтыг нь хураах уу?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Хөгжлийн тохиргоог зөвшөөрөх үү?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Эдгээр тохиргоо нь зөвхөн хөгжүүлэлтэд ашиглах зорилготой. Эдгээр нь таны төхөөрөмж буюу түүн дээрх аппликешнүүдийг эвдрэх, буруу ажиллах шалтгаан нь болж болно."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Апп-г USB-р тулгах"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT-р суулгасан апп-уудыг хорлонтой авиртай эсэхийг шалгах."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локал терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Локал суурьт хандалт хийх боломж олгодог терминалын апп-г идэвхжүүлэх"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP шалгах"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP шалгах авирыг тохируулах"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Согог хайх"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Согог засах апп сонгоно уу"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Дебаг аппликешн тохируулаагүй"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Согог засах аппликешн: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Аппликешн сонгох"</string>
+ <string name="no_application" msgid="2813387563129153880">"Юуг ч биш"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Согог засагчийг хүлээх"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Согог засагдсан аппликешн ажиллахын өмнө согог засагчийг хавсаргагдахыг хүлээнэ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Оруулах"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Зураг"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Техник хангамжийн хурдатгалтай үзүүлэлт"</string>
+ <string name="media_category" msgid="4388305075496848353">"Медиа"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Мониторинг"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Хатуу горимыг идэвхжүүлсэн"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Апп-ууд үндсэн хэлхээс дээр удаан хугацаанд үйлдлүүд хийх үед дэлгэцийг анивчуулах"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Чиглүүлэгчийн байршил"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Дэлгэцийн давхаргаар одоогийн хүрэлтийн өгөгдлийг харуулж байна"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Хүрэлтүүдийг харуулах"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Хүрэлтийн үзэгдэх хариу үйлдлийг харуулах"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Гадаргын шинэчлэлтүүдийг харуулах"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Шинэчлэгдэх үед цонхны гадаргыг бүхэлд нь анивчуулах"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU харагдацын шинэчлэлтүүдийг харуулах"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU-тай зурагдсан үед цонхнуудын доторхыг гялс харуулна"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Техник хангамжийн давхаргын шинэчлэлтүүдийг харуулах"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Техник хангамжууд шинэчлэх үед давхаргыг анивчуулах"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU давхар дүрслэлийг дебаг хийх"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW давхаргыг идэвхгүйжүүлэх"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Дэлгэц нийлүүлэхэд GPU-г байнга ашиглах"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Өнгөний орчныг дууриах"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL тэмдэглэлийг идэвхжүүлэх"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB аудио роутинг идэвхгүйжүүлэх"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB аудио периферал руу автоматаар роутинг хийхийг идэвхгүйжүүлэх"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Байршлын хүрээг харуулах"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Клипийн зах, хязгаар зэргийг харуулах"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL байрлалын чиглэлийг хүчээр тогтоох"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Бүх локалын хувьд дэлгэцийн байрлалын чиглэлийг хүчээр RTL болгох"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU ашиглалтыг харуулах"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Дэлгэцийн давхцалаар одоогийн CPU ашиглалтыг харуулж байна"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Хүчээр GPU ашиглах"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"GPU-г 2d зурагт хүчээр ашиглах"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Хүчээр 4x MSAA ашиглах"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 апп-уудад 4x MSAA-г идэвхжүүлэх"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Тэгш өнцөгт бус клипийн үйлдлүүдийн согогийг засах"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Профайл GPU гаргах"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Цонхны дүрс амилуулалтын далайц"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Шилжилтийн дүрс амилуулалтын далайц"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Дүрс амилуулалт үргэлжлэх далайц"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Хоёрдох дэлгэцийн симуляци хийх"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Апп"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Үйлдлүүдийг хадгалахгүй"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Үйлдэл бүрийг хэрэглэгч орхимогц нь устгах"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Далд процессын хязгаар"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Бүх ANRs харуулах"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Далд апп-уудад Апп Хариу Өгөхгүй байна гэснийг харуулах"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Апп-ыг гадаад санах ойд хадгалахыг зөвшөөрөх"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Манифест утгыг нь үл хамааран дурын апп-ыг гадаад санах ойд бичих боломжтой болгодог"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Үйл ажиллагааны хэмжээг өөрчилж болохуйц болгох"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Тодорхойлогч файлын утгыг үл хамааран, бүх үйл ажиллагааг олон цонхонд хэмжээг нь өөрчилж болохуйц болгох."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Десктоп нөөшлөлтийн нууц үг"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Десктоп бүрэн нөөцлөлт одоогоор хамгаалалтгүй байна"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Десктоп дээрх бүрэн нөөшлөлтийн нууц үгийг өөрчлөх буюу арилгахын тулд хүрнэ үү"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Нөөцлөлтийн шинэ нууц үг тохирууллаа"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Шинэ нууц үг болон баталгаажуулалт таарахгүй байна"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Нөөшлөлтийн нууц үгийг тохируулахад алдаа гарлаа"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Хурц (үндсэн)"</item>
+ <item msgid="8446070607501413455">"Байгалийн"</item>
+ <item msgid="6553408765810699025">"Стандарт"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Сайжруулсан өнгө"</item>
+ <item msgid="8280754435979370728">"Нүдээр харж болох байгалийн өнгө"</item>
+ <item msgid="5363960654009010371">"Дижитал агуулгад зориулан тааруулсан өнгө"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Идэвхгүй апп-ууд"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Идэвхгүй. Сэлгэхийн тулд хүрнэ үү."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Идэвхтэй. Сэлгэхийн тулд хүрнэ үү."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Ажиллаж байгаа үйлчилгээнүүд"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Одоо ажиллаж байгаа үйлчилгээнүүдийг харах болон хянах"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Шөнийн горим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Идэвхгүй"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Байнга асаалттай"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматаар"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Файлын шифрлэлт болгон хөрвүүлэх"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Хөрвүүлэх..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Аль хэдийнэ файл шифрлэгдсэн"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Шифрлэлтэд суурилсан файлыг хөрвүүлж байна"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Өгөгдлийн хуваалтыг файлд суурилсан шифрлэлтэд хөрвүүлэх.\n !!Анхааруулга!! Энэ нь таны бүх өгөгдлийг устгах болно.\n Энэ онцлог нь альфа бөгөөд зөв ажиллахгүй байж болзошгүй.\n Үргэлжлүүлэхийн тулд \"Арчаад, хөрвүүлэх...\"-г дарна уу."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Арчаад, хөрвүүлэх..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"\"Зургийн өнгө\" горим"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB-г ашиглах"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Идэвхгүй болсон"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монотон өнгө"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Дьютераномаль (улаан-ногоон)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномаль (улаан-ногоон)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомаль (цэнхэр-шар)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Өнгө тохируулах"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Энэ функц туршилтынх бөгөөд ажиллагаанд нөлөөлж болзошгүй."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Давхарласан <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-mr-rIN/arrays.xml b/packages/SettingsLib/res/values-mr-rIN/arrays.xml
index db21ccc..70c1157 100644
--- a/packages/SettingsLib/res/values-mr-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-mr-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"अवरोधित"</item>
<item msgid="1805837518286731242">"तात्पुरते खराब कनेक्शन टाळत आहे"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"कधीही तपासू नका"</item>
+ <item msgid="6042769699089883931">"केवळ DRM सामग्रीसाठी तपासा"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"प्रति लॉग बफर 64K"</item>
+ <item msgid="2822309747675758628">"प्रति लॉग बफर 256K"</item>
+ <item msgid="6699306198357496731">"प्रति लॉग बफर 1M"</item>
+ <item msgid="5748528643937500349">"प्रति लॉग बफर 4M"</item>
+ <item msgid="1978629051085111592">"प्रति लॉग बफर 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"अॅनिमेशन बंद"</item>
+ <item msgid="6624864048416710414">"अॅनिमेशन स्केल .5x"</item>
+ <item msgid="2219332261255416635">"अॅनिमेशन स्केल 1x"</item>
+ <item msgid="3544428804137048509">"अॅनिमेशन स्केल 1.5x"</item>
+ <item msgid="3110710404225974514">"अॅनिमेशन स्केल 2x"</item>
+ <item msgid="4402738611528318731">"अॅनिमेशन स्केल 5x"</item>
+ <item msgid="6189539267968330656">"अॅनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"अॅनिमेशन बंद"</item>
+ <item msgid="3375781541913316411">"अॅनिमेशन स्केल .5x"</item>
+ <item msgid="1991041427801869945">"अॅनिमेशन स्केल 1x"</item>
+ <item msgid="4012689927622382874">"अॅनिमेशन स्केल 1.5x"</item>
+ <item msgid="3289156759925947169">"अॅनिमेशन स्केल 2x"</item>
+ <item msgid="7705857441213621835">"अॅनिमेशन स्केल 5x"</item>
+ <item msgid="6660750935954853365">"अॅनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"अॅनिमेशन बंद"</item>
+ <item msgid="1138649021950863198">"अॅनिमेशन स्केल .5x"</item>
+ <item msgid="4394388961370833040">"अॅनिमेशन स्केल 1x"</item>
+ <item msgid="8125427921655194973">"अॅनिमेशन स्केल 1.5x"</item>
+ <item msgid="3334024790739189573">"अॅनिमेशन स्केल 2x"</item>
+ <item msgid="3170120558236848008">"अॅनिमेशन स्केल 5x"</item>
+ <item msgid="1069584980746680398">"अॅनिमेशन स्केल 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"काहीही नाही"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (सुरक्षित)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (सुरक्षित)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (सुरक्षित)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (सुरक्षित)"</item>
+ <item msgid="3547211260846843098">"4K (अपस्केल केलेले)"</item>
+ <item msgid="5411365648951414254">"4K (अपस्केल केलेले, सुरक्षित)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (दुहेरी स्क्रीन)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"काहीही नाही"</item>
+ <item msgid="9089630089455370183">"लॉगकॅट"</item>
+ <item msgid="5397807424362304288">"Systrace (ग्राफिक्स)"</item>
+ <item msgid="1340692776955662664">"GlGetError वर स्टॅक कॉल करा"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"बंद"</item>
+ <item msgid="675719912558941285">"निळ्या रंगात आयताकार नसलेला क्लिप प्रांत रेखांकित करा"</item>
+ <item msgid="1064373276095698656">"चाचणी केलेले रेखांकित आदेश हिरव्या रंगामध्ये हायलाइट करा"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"बंद"</item>
+ <item msgid="2751513398307949636">"बार म्हणून स्क्रीनवर"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo मध्ये"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"बंद"</item>
+ <item msgid="7688197031296835369">"अधोरेखांकित क्षेत्रे दर्शवा"</item>
+ <item msgid="2290859360633824369">"हरित असंगतिसाठी क्षेत्रे दर्शवा"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"मानक मर्यादा"</item>
+ <item msgid="4071574792028999443">"एकही पार्श्वभूमी प्रक्रिया नाही"</item>
+ <item msgid="4810006996171705398">"जास्तीत जास्त 1 प्रक्रिया"</item>
+ <item msgid="8586370216857360863">"जास्तीत जास्त 2 प्रक्रिया"</item>
+ <item msgid="836593137872605381">"जास्तीत जास्त 3 प्रक्रिया"</item>
+ <item msgid="7899496259191969307">"जास्तीत जास्त 4 प्रक्रिया"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"चार्ज होत आहे"</item>
+ <item msgid="5220695614993094977">"MTP (मीडिया स्थानांतरण प्रोटोकॉल)"</item>
+ <item msgid="2086000968159047375">"PTP (चित्र स्थानांतरण प्रोटोकॉल)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB इथरनेट)"</item>
+ <item msgid="1718924214939774352">"ऑडिओ स्त्रोत"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr-rIN/strings.xml
index 04d9d78..cc3621a 100644
--- a/packages/SettingsLib/res/values-mr-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-mr-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"प्रोफाईल निवडा"</string>
<string name="category_personal" msgid="1299663247844969448">"वैयक्तिक"</string>
<string name="category_work" msgid="8699184680584175622">"कार्य"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"विकासक पर्याय"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"विकासक पर्याय सक्षम करा"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"अॅप विकासासाठी पर्याय सेट करा"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"या वापरकर्त्यासाठी विकासक पर्याय उपलब्ध नाहीत"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"या वापरकर्त्यासाठी VPN सेटिंग्ज उपलब्ध नाहीत"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"या वापरकर्त्यासाठी टिथरिंग सेटिंग्ज उपलब्ध नाहीत"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"या वापरकर्त्यासाठी प्रवेश बिंदू नाव सेटिंग्ज उपलब्ध नाहीत"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB डीबग करणे"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB कनेक्ट केलेले असताना डीबग मोड"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB डीबग करणारी प्रमाणिकरणे पुनर्प्राप्त करा"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"दोष अहवाल शॉर्टकट"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"दोष अहवाल घेण्यासाठी पॉवर मेनूमध्ये एक बटण दर्शवा"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"सक्रिय रहा"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होत असताना स्क्रीन कधीही निष्क्रिय होणार नाही"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटुथ HCI स्नूप लॉग सक्षम करा"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"सर्व ब्लूटुथ HCI पॅकेट एका फाईलमध्ये कॅप्चर करा"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करणे"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर अनलॉक करण्यासाठी अनुमती द्या"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करण्यास अनुमती द्यायची?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावणी: ही सेटिंग चालू असताना या डिव्हाइसवर डिव्हाइस संरक्षण वैशिष्ट्ये कार्य करणार नाहीत."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"बनावट स्थान अॅप निवडा"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"कोणताही बनावट स्थान अॅप सेट केला नाही"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"बनावट स्थान अॅप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस प्रदर्शन प्रमाणीकरण"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाय-फाय शब्दपाल्हाळ लॉगिंग सक्षम करा"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"वाय-फायवरून सेल्युलरवर बळपूर्वक जाणे"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"वाय-फाय रोम स्कॅनला नेहमी अनुमती द्या"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"परंपरागत DHCP क्लायंटचा वापर करा"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"सेल्युलर डेटा नेहमी सक्रिय"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"वाय-फाय रोम स्कॅनला इंटरफेसवर उपस्थित असलेल्या रहदारी डेटाच्या प्रमाणावर आधारित अनुमती द्या/अनुमती देऊ नका"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफर आकार"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफर लॉगर आकार निवडा"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB कॉन्फिगरेशन निवडा"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB कॉन्फिगरेशन निवडा"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"बनावट स्थानांना अनुमती द्या"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"बनावट स्थानांना अनुमती द्या"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"दृश्य विशेषता तपासणी सक्षम करा"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"नवीन Android DHCP क्लायंट ऐवजी Lollipop वरून DHCP क्लायंटचा वापर करा."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"जरी वाय-फाय सक्रिय असले तरीही, नेहमी मोबाईल डेटा सक्रिय ठेवा (जलद नेटवर्क स्विच करण्यासाठी)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB डीबग करण्यास अनुमती द्यायची?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB डीबग करण्याचा हेतू फक्त विकासाच्या उद्देशांसाठी आहे. याचा वापर आपला संगणक आणि आपले डिव्हाइस यांच्या दरम्यान डेटा कॉपी करण्यासाठी करा, सूचनेशिवाय आपल्या डिव्हाइसवर अॅप्स स्थापित करा आणि लॉग डेटा वाचा."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"आपण पूर्वी प्राधिकृत केलेल्या सर्व संगणकांवरुन USB डीबग करण्यासाठी प्रवेश पुनर्प्राप्त करायचा?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिंग्जला अनुमती द्यायची?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"या सेटिंग्जचा हेतू फक्त विकास करण्याच्या वापरासाठी आहे. त्यामुळे आपले डिव्हाइस आणि त्यावरील अनुप्रयोग विघटित होऊ शकतात किंवा गैरवर्तन करू शकतात."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB वरील अॅप्स सत्यापित करा"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"हानीकारक वर्तनासाठी ADB/ADT द्वारे स्थापित अॅप्स तपासा."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"स्थानिक टर्मिनल"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"स्थानिक शेल प्रवेश देणारा टर्मिनल अॅप सक्षम करा"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP तपासणी"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP तपासणी वर्तन सेट करा"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"डीबग करणे"</string>
+ <string name="debug_app" msgid="8349591734751384446">"डीबग अॅप निवडा"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"कोणताही डीबग अनुप्रयोग सेट नाही"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"अनुप्रयोग डीबग करीत आहे: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"अनुप्रयोग निवडा"</string>
+ <string name="no_application" msgid="2813387563129153880">"काहीही नाही"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"डीबगरची प्रतीक्षा करा"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डीबग केलेला अनुप्रयोग अंमलात आणण्यापूर्वी डीबगर संलग्न करण्याची प्रतीक्षा करतो"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"इनपुट"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"रेखांकन"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेअर प्रवेगक प्रस्तुती"</string>
+ <string name="media_category" msgid="4388305075496848353">"मीडिया"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"परीक्षण"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"कठोर मोड सक्षम"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"मुख्य थ्रेडवर अॅप्स मोठी कार्ये करतात तेव्हा स्क्रीन फ्लॅश करा"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"पॉइंटर स्थान"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"वर्तमान स्पर्श डेटा दर्शविणारे स्क्रीन आच्छादन"</string>
+ <string name="show_touches" msgid="1356420386500834339">"स्पर्श दर्शवा"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"स्पर्शांसाठी दृश्यमान अभिप्राय दर्शवा"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"पृष्ठभाग अद्यतने दर्शवा"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"संपूर्ण विंडो पृष्ठभाग अद्ययावत होतात तेव्हा ते फ्लॅश करा"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य अद्यतने दर्शवा"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU सह रेखांकित करताना विंडोच्या आतील दृश्ये फ्लॅश करा"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेअर स्तर अद्यतने दर्शवा"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"हार्डवेअर स्तर अद्ययावत झाल्यावर ते हिरव्या रंगात फ्लॅश करा"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU अधोरेखांकित डीबग करा"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW आच्छादने अक्षम करा"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रीन तयार करण्यासाठी नेहमी GPU वापरा"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"रंग स्थानाची बतावणी करा"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ट्रेस सक्षम करा"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ऑडिओ राउटिंग अक्षम करा"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ऑडिओ परिधीय वरील स्वयंचलित राउटिंग अक्षम करा"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"लेआउट सीमा दर्शवा"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"क्लिप सीमा, समास इत्यादी दर्शवा."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL लेआउट दिशानिर्देशाची सक्ती करा"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"सर्व लोकॅलसाठी RTL स्क्रीन लेआउट दिशानिर्देशाची सक्ती करा"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU वापर दर्शवा"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"वर्तमान CPU वापर दर्शविणारे स्क्रीन आच्छादन"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU प्रस्तुतीस सक्ती करा"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d रेखांकनासाठी GPU च्या वापराची सक्ती करा"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ची सक्ती करा"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 अॅप्समध्ये 4x MSAA सक्षम करा"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"आयताकृती नसलेले क्लिप ऑपरेशन डीबग करा"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"प्रोफाईल GPU प्रस्तुती"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"विंडो अॅनिमेशन स्केल"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"संक्रमण अॅनिमेशन स्केल"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"अॅनिमेटर कालावधी स्केल"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"दुय्यम प्रदर्शनांची बतावणी करा"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"अॅप्स"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"क्रियाकलाप ठेवू नका"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"वापरकर्त्याने प्रत्येक क्रियाकलाप सोडताच तो नष्ट करा"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"पार्श्वभूमी प्रक्रिया मर्यादा"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"सर्व ANR दर्शवा"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"पार्श्वभूमी अॅप्ससाठी अॅप प्रतिसाद देत नाही संवाद दर्शवा"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यवर अॅप्सना अनुमती देण्याची सक्ती करा"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"मॅनिफेस्ट मूल्यांकडे दुर्लक्ष करून, कोणत्याही अॅपला बाह्य संचयनावर लेखन केले जाण्यासाठी पात्र बनविते"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"क्रियाकलापाचा आकार बदलण्यायोग्य होण्याची सक्ती करा"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"मॅनिफेस्ट मूल्यांकडे दुर्लक्ष करून, एकाधिक-विंडोसाठी सर्व क्रियाकलापांचा आकार बदलण्यायोग्य करा"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटॉप बॅकअप संकेतशब्द"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्कटॉप पूर्ण बॅक अप सध्या संरक्षित नाहीत"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"डेस्कटॉपच्या पूर्ण बॅकअपसाठी असलेला संकेतशब्द बदलण्यासाठी किंवा काढून टाकण्यासाठी स्पर्श करा"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"नवीन बॅक अप संकेतशब्द सेट झाला"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नवीन संकेतशब्द आणि पुष्टीकरण जुळत नाही"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"बॅक अप संकेतशब्द सेट करणे अयशस्वी"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"सशक्त (डीफॉल्ट)"</item>
+ <item msgid="8446070607501413455">"नैसर्गिक"</item>
+ <item msgid="6553408765810699025">"मानक"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"वर्धित रंग"</item>
+ <item msgid="8280754435979370728">"डोळ्यांनी पाहिले तसे नैसर्गिक रंग"</item>
+ <item msgid="5363960654009010371">"डिजिटल सामग्रीसाठी ऑप्टिमाइझ केलेले रंग"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"निष्क्रिय अॅप्स"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"निष्क्रिय. टॉगल करण्यासाठी स्पर्श करा."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"सक्रिय. टॉगल करण्यासाठी स्पर्श करा."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"चालू सेवा"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"सध्या चालत असलेल्या सेवा पहा आणि नियंत्रित करा"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"रात्र मोड"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"अक्षम केले"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"नेहमी चालू"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"स्वयंचलित"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"फाईल कूटबद्धीकरणावर रूपांतरित करा"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"रूपांतरित करा..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"फाईल आधीपासून कूटबद्ध केली"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"फाईल आधारित कूटबद्धीकरणावर रूपांतरित करणे"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"फाईल आधारित कूटबद्धीकरणावर डेटा विभाजक रूपांतरित करा.\n !!चेतावणी!! हे आपल्या सर्व डेटास मिटवेल.\n हे वैशिष्ट्य अल्फा आहे आणि कदाचित योग्यरित्या कार्य करू शकत नाही.\n सुरु ठेवण्यासाठी \'पुसा आणि रूपांतरित करा...\' दाबा."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"पुसा आणि रुपांतरित करा..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"चित्र रंग मोड"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB वापरा"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"अक्षम केले"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"रंग दृष्टीहीनता"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"हरित असंगती (लाल-हिरवा)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"क्षीण रक्तवर्णांधता (लाल-हिरवा)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"रंग दृष्टी कमतरता (निळा-पिवळा)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"रंग सुधारणा"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"हे वैशिष्ट्य प्रायोगिक आहे आणि कदाचित कार्यप्रदर्शन प्रभावित करू शकते."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> द्वारे अधिलिखित"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ms-rMY/arrays.xml b/packages/SettingsLib/res/values-ms-rMY/arrays.xml
index 15cd7ba..320fa9b 100644
--- a/packages/SettingsLib/res/values-ms-rMY/arrays.xml
+++ b/packages/SettingsLib/res/values-ms-rMY/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Disekat"</item>
<item msgid="1805837518286731242">"Mengelakkan sambungan lemah buat sementara"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Jangan sekali-kali semak"</item>
+ <item msgid="6042769699089883931">"Semak kandungan DRM sahaja"</item>
+ <item msgid="9174900380056846820">"Sentiasa semak"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Jangan sekali-kali gunakan penyemakan HDCP"</item>
+ <item msgid="3878793616631049349">"Gunakan penyemakan HDCP untuk kandungan DRM sahaja"</item>
+ <item msgid="45075631231212732">"Sentiasa gunakan penyemakan HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K per penimbal log"</item>
+ <item msgid="2822309747675758628">"256K per penimbal log"</item>
+ <item msgid="6699306198357496731">"1M per penimbal log"</item>
+ <item msgid="5748528643937500349">"4M per penimbal log"</item>
+ <item msgid="1978629051085111592">"16M per penimbal log"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasi dimatikan"</item>
+ <item msgid="6624864048416710414">"Skala animasi .5x"</item>
+ <item msgid="2219332261255416635">"Skala animasi 1x"</item>
+ <item msgid="3544428804137048509">"Skala animasi 1.5x"</item>
+ <item msgid="3110710404225974514">"Skala animasi 2x"</item>
+ <item msgid="4402738611528318731">"Skala animasi 5x"</item>
+ <item msgid="6189539267968330656">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasi dimatikan"</item>
+ <item msgid="3375781541913316411">"Skala animasi .5x"</item>
+ <item msgid="1991041427801869945">"Skala animasi 1x"</item>
+ <item msgid="4012689927622382874">"Skala animasi 1.5x"</item>
+ <item msgid="3289156759925947169">"Skala animasi 2x"</item>
+ <item msgid="7705857441213621835">"Skala animasi 5x"</item>
+ <item msgid="6660750935954853365">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasi dimatikan"</item>
+ <item msgid="1138649021950863198">"Skala animasi .5x"</item>
+ <item msgid="4394388961370833040">"Skala animasi 1x"</item>
+ <item msgid="8125427921655194973">"Skala animasi 1.5x"</item>
+ <item msgid="3334024790739189573">"Skala animasi 2x"</item>
+ <item msgid="3170120558236848008">"Skala animasi 5x"</item>
+ <item msgid="1069584980746680398">"Skala animasi 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Tiada"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (selamat)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (selamat)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (selamat)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (selamat)"</item>
+ <item msgid="3547211260846843098">"4K (dipertingkat)"</item>
+ <item msgid="5411365648951414254">"4K (dipertingkat, selamat)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dua skrin)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Tiada"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafik)"</item>
+ <item msgid="1340692776955662664">"Tindanan panggilan pada glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Mati"</item>
+ <item msgid="675719912558941285">"Lukis keratan bukan segi empat tepat biru"</item>
+ <item msgid="1064373276095698656">"Serlahkan perintah lukisan diuji hijau"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Mati"</item>
+ <item msgid="2751513398307949636">"Pada skrin sebagai bar"</item>
+ <item msgid="1851438178120770973">"Dalam adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Mati"</item>
+ <item msgid="7688197031296835369">"Tunjukkan kawasan lebih lukis"</item>
+ <item msgid="2290859360633824369">"Tunjukkan kawasan untuk Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Had standard"</item>
+ <item msgid="4071574792028999443">"Tiada proses latar belakang"</item>
+ <item msgid="4810006996171705398">"Paling banyak 1 proses"</item>
+ <item msgid="8586370216857360863">"Paling banyak 2 proses"</item>
+ <item msgid="836593137872605381">"Paling banyak 3 proses"</item>
+ <item msgid="7899496259191969307">"Paling banyak 4 proses"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Mengecas"</item>
+ <item msgid="5220695614993094977">"MTP (Protokol Pindahan Media)"</item>
+ <item msgid="2086000968159047375">"PTP (Protokol Pindahan Gambar)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Sumber Audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms-rMY/strings.xml
index e3ceddb..babbefa 100644
--- a/packages/SettingsLib/res/values-ms-rMY/strings.xml
+++ b/packages/SettingsLib/res/values-ms-rMY/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Pilih Profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Peribadi"</string>
<string name="category_work" msgid="8699184680584175622">"Tempat Kerja"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Pilihan pembangun"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Dayakan pilihan pembangun"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Tetapkan pilihan untuk pembangunan aplikasi"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Pilihan Pemaju tidak tersedia untuk pengguna ini"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Tetapan VPN tidak tersedia untuk pengguna ini"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tetapan penambatan tidak tersedia untuk pengguna ini"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Tetapan Nama Titik Capaian tidak tersedia untuk pengguna ini"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Penyahpepijatan USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Mod nyahpepijat apabila USB disambungkan"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Batalkan kebenaran penyahpepijatan USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Pintasan laporan pepijat"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Tunjukkan butang dalam menu kuasa untuk mengambil laporan pepijat"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Tetap berjaga"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrin tidak sekali-kali akan tidur semasa pengecasan"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Dayakan log intip HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Tangkap semua paket HCI bluetooth dalam fail"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Pembukaan kunci OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Benarkan pemuat but untuk dibuka kunci"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Benarkan pembukaan kunci OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AMARAN: Ciri perlindungan peranti tidak akan berfungsi pada peranti ini semasa tetapan ini dihidupkan."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Pilih apl lokasi olokan"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Tiada apl lokasi olokan ditetapkan"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Apl lokasi olokan: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Perangkaian"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Pensijilan paparan wayarles"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Dayakan Pengelogan Berjela-jela Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Penyerahan Wi-Fi ke Selular agresif"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sentiasa benarkan Imbasan Perayauan Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Gunakan pelanggan DHCP lama"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Data selular sentiasa aktif"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Benarkan/Jangan benarkan Imbasan Perayauan Wi-Fi berdasarkan jumlah trafik data yang ada pada antara muka"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Saiz penimbal pengelog"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Pilih saiz Pengelog bagi setiap penimbal log"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Pilih Konfigurasi USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Pilih Konfigurasi USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Benarkan lokasi olokan"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Benarkan lokasi olokan"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Dayakan pemeriksaan atribut paparan"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Gunakan pelanggan DHCP daripada Lollipop bukannya pelanggan DHCP Android baharu."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Pastikan data mudah alih sentiasa aktif, walaupun Wi-Fi aktif (untuk penukaran rangkaian yang pantas)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Benarkan penyahpepijatan USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Penyahpepijatan USB adalah dimaksudkan untuk tujuan pembangunan sahaja. Gunakannya untuk menyalin data antara komputer dan peranti anda, memasang aplikasi pada peranti anda tanpa pemberitahuan, dan membaca data log."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Batalkan akses ke penyahpepijatan USB dari semua komputer yang anda berikan kebenaran sebelum ini?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Benarkan tetapan pembangunan?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tetapan ini adalah untuk penggunaan pembangunan sahaja. Peranti dan aplikasi yang terdapat padanya boleh rosak atau tidak berfungsi dengan betul."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Sahkan apl melalui USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Semak apl yang dipasang melalui ADB/ADT untuk tingkah laku yang berbahaya."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal setempat"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Dayakan apl terminal yang menawarkan akses shell tempatan"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Penyemakan HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Ttpkn tngkh laku smk HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Menyahpepijat"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Pilih apl penyahpepijat"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Tiada aplikasi penyahpepijat ditentukan"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Menyahpepijat aplikasi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Pilih aplikasi"</string>
+ <string name="no_application" msgid="2813387563129153880">"Tiada apa-apa"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Nantikan penyahpepijat"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Menanti penyahpepijat sebelum aplikasi melaksana"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Lukisan"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Pemaparan dipercepat perkakasan"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Memantau"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Mod tegas didayakan"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Kelip skrin apabila apl beroperasi lama pada urutan utama"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Lokasi penuding"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Tindihan skrin menunjukkan data sentuh semasa"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Tunjukkan sentuhan"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Menunjukkan maklum balas visual untuk sentuhan"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Tunjuk kemas kini permukaan"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Denyar permukaan tetingkap apabila dikemas kini"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Tunjuk kemas kini GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Denyar paparan dalam tetingkap jika dilukis dengan GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Tunjukkan kemas kini perkakasan"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Denyar hijau lapisan perkakasan yang dikemas kini"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Nyahpepijat lebih lukis GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Lumpuhkan tindihan HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Sentiasa gunakan GPU untuk komposit skrin"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Tiru ruang warna"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Dayakan kesan OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Lmpuhkn phalaan audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Lumpuhkan penghalaan automatik ke persisian audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Tunjukkan batas reka letak"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Tunjukkan batas klip, margin dll."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Paksa arah reka letak RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Paksa arah reka letak skrin RTL bagi semua tempat peristiwa"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Tunjukkan penggunaan CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Tindihan skrin menunjukkan penggunaan semasa CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Paksa pemaparan GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Paksa penggunaan GPU untuk lukisan 2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Paksa 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Dayakan 4x MSAA dalam apl OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Nyahpepijat operasi keratan bukan segi empat tepat"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Pemaparan GPU profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Skala animasi tetingkap"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Skala animasi peralihan"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Skala tempoh juruanimasi"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulasikan paparan kedua"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikasi"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Jangan simpan aktiviti"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hapus aktiviti selepas ditinggalkan oleh pengguna"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Had proses latar belakang"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Tunjukkan semua ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Tunjukkan dialog Aplikasi Tidak Memberi Maklum Balas untuk aplikasi latar belakang"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Benarkan apl secara paksa pada storan luaran"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Menjadikan sebarang apl layak ditulis ke storan luaran, walau apa juga nilai manifesnya"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Paksa aktiviti supaya boleh diubah saiz"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Menjadikan semua aktiviti boleh diubah saiz untuk berbilang tetingkap, tanpa mengambil kira nilai manifes."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Kata laluan sandaran komputer meja"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Sandaran penuh komputer meja tidak dilindungi pada masa ini"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Sentuh untuk menukar atau mengalih keluar kata laluan untuk sandaran penuh komputer meja"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Kata laluan sandaran baharu telah ditetapkan"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Kata laluan baharu dan pengesahan tidak sepadan"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Gagal menetapkan kata laluan sandaran"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Terang (lalai)"</item>
+ <item msgid="8446070607501413455">"Semula Jadi"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Warna dipertingkat"</item>
+ <item msgid="8280754435979370728">"Warna semula jadi seperti yang dilihat oleh mata"</item>
+ <item msgid="5363960654009010371">"Warna dioptimumkan untuk kandungan digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Apl yang tidak aktif"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Tidak aktif. Sentuh untuk menogol."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktif. Sentuh untuk menogol."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Perkhidmatan dijalankan"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Lihat dan kawal perkhidmatan yang sedang dijalankan"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Mod malam"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Dilumpuhkan"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sentiasa hidup"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatik"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Tukar kepada penyulitan fail"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Tukar..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Sudah disulitkan fail"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Menukar kepada penyulitan berasaskan fail"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Tukar pembahagian data kepada penyulitan berasaskan fail.\n !!Amaran!! Tindakan ini akan menghapuskan data anda.\n Ini ialah ciri alfa dan mungkin tidak berfungsi dengan betul.\n Tekan \'Hapuskan dan tukar…\' untuk meneruskan."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Hapuskan dan tukar..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mod warna gambar"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Gunakan sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Dilumpuhkan"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromasi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomali (merah-hijau)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (merah-hijau)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomali (biru-kuning)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Pembetulan warna"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ciri ini adalah percubaan dan boleh menjejaskan prestasi."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Diatasi oleh <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-my-rMM/arrays.xml b/packages/SettingsLib/res/values-my-rMM/arrays.xml
index 82f2ded..71b35ad 100644
--- a/packages/SettingsLib/res/values-my-rMM/arrays.xml
+++ b/packages/SettingsLib/res/values-my-rMM/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ပိတ်ထားသည်"</item>
<item msgid="1805837518286731242">"နှေးကွေးသောဆက်သွယ်မှုကို ယာယီရှောင်ရှားထားသည်"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"မည်သည့်အခါမှ မစစ်ဆေးပါနှင့်"</item>
+ <item msgid="6042769699089883931">"DRMအကြောင်းအရာကိုသာ စစ်ဆေးမည်"</item>
+ <item msgid="9174900380056846820">"အမြဲစစ်ဆေးရန်"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"HDCP checkingအားမည်သည့်အခါမျှမသုံးပါနှင့်"</item>
+ <item msgid="3878793616631049349">"DRMအကြောင်းအရာအတွက် HDCPစစ်ဆေးခြင်းကိုသုံးမည်"</item>
+ <item msgid="45075631231212732">"HDCP checkingအားအမြဲသုံးပါ"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"၆၄K"</item>
+ <item msgid="3534782711045262344">"၂၅၆K"</item>
+ <item msgid="8085867209202153403">"၁M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K လော့ ဘာဖားတွက်"</item>
+ <item msgid="2822309747675758628">"256K လော့ ဘာဖားတွက်"</item>
+ <item msgid="6699306198357496731">"1M လော့ ဘာဖားတွက်"</item>
+ <item msgid="5748528643937500349">"4M လော့ ဘာဖားတွက်"</item>
+ <item msgid="1978629051085111592">"16M လော့ ဘာဖားတွက်"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"လှုပ်ရှားသက်ဝင်မှုပုံများကိုပိတ်ပါ"</item>
+ <item msgid="6624864048416710414">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၅ဆ"</item>
+ <item msgid="2219332261255416635">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁ဆ"</item>
+ <item msgid="3544428804137048509">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁.၅ဆ"</item>
+ <item msgid="3110710404225974514">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၂ဆ"</item>
+ <item msgid="4402738611528318731">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၅ဆ"</item>
+ <item msgid="6189539267968330656">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁၀ဆ"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"လှုပ်ရှားသက်ဝင်မှုပုံများကိုပိတ်ပါ"</item>
+ <item msgid="3375781541913316411">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၅ဆ"</item>
+ <item msgid="1991041427801869945">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁ဆ"</item>
+ <item msgid="4012689927622382874">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁.၅ဆ"</item>
+ <item msgid="3289156759925947169">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၂ဆ"</item>
+ <item msgid="7705857441213621835">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၅ဆ"</item>
+ <item msgid="6660750935954853365">"လှုပ်ရှားသက်ဝင်မှုပုံ စကေး ၁၀ဆ"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"လှုပ်ရှားသက်ဝင်ပုံများကိုပိတ်ပါ"</item>
+ <item msgid="1138649021950863198">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၀.၅ဆ"</item>
+ <item msgid="4394388961370833040">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၁ဆ"</item>
+ <item msgid="8125427921655194973">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၁.၅ဆ"</item>
+ <item msgid="3334024790739189573">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၂ဆ"</item>
+ <item msgid="3170120558236848008">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၅ဆ"</item>
+ <item msgid="1069584980746680398">"လှုပ်ရှားသက်ဝင်ပုံရိပ် စကေး ၁၀ဆ"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"တစ်ခုမှမဟုတ်ပါ"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (secure)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (secure)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (secure)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (secure)"</item>
+ <item msgid="3547211260846843098">"4K (upscaled)"</item>
+ <item msgid="5411365648951414254">"4K (upscaled, secure)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"တစ်ခုမှမဟုတ်ပါ"</item>
+ <item msgid="9089630089455370183">"လော့ဂ်ကက်"</item>
+ <item msgid="5397807424362304288">"စနစ်ခြေရာခံခြင်း (ရုပ်ပုံများ)"</item>
+ <item msgid="1340692776955662664">"glGetError အမှားတက်လျှင်ခေါ်သောလုပ်ငန်းစဉ်"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ပိတ်"</item>
+ <item msgid="675719912558941285">"စတုဂံမဟုတ်သော ဖောက်ရန်အပိုင်းကို အပြာရောင်ဖြင့်ဆွဲပါ"</item>
+ <item msgid="1064373276095698656">"စမ်းသပ်ထားသော ပုံဆွဲရန်ညွှန်ကြားချက်များကို အစိမ်းရောင်ဖြင့် အသားပေး ဖော်ပြပါ"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ပိတ်"</item>
+ <item msgid="2751513398307949636">"ဖန်သားပြင်ပေါ်မှာ မျဉ်းတန်းကဲ့သို့"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys ထဲမှ gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ပိတ်"</item>
+ <item msgid="7688197031296835369">"ရှိရင်းစွဲထက်ပိုသော ဧရိယာများကိုပြရန်"</item>
+ <item msgid="2290859360633824369">"အရောင်ရောနှောသောဧရိယာများပြရန်"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"သတ်မှတ်စံနှုန်း"</item>
+ <item msgid="4071574792028999443">"နောက်ခံပြုလုပ်နေသောလုပ်ငန်းစဉ်မရှိ"</item>
+ <item msgid="4810006996171705398">"အများဆုံးလုပ်ငန်းစဉ်(၁)ခု"</item>
+ <item msgid="8586370216857360863">"အများဆုံးလုပ်ငန်းစဉ်ခု"</item>
+ <item msgid="836593137872605381">"အများဆုံးလုပ်ငန်းစဉ်(၃)ခု"</item>
+ <item msgid="7899496259191969307">"အများဆုံးလုပ်ငန်းစဉ်(၄)ခု"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"အားသွင်းနေပါသည်"</item>
+ <item msgid="5220695614993094977">"MTP (မီဒီယာ လွှဲပြောင်းမှု ပရိုတိုကော)"</item>
+ <item msgid="2086000968159047375">"PTP (ပုံ လွှဲပြောင်းမှု ပရိုတိုကော)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB အီသာနက်)"</item>
+ <item msgid="1718924214939774352">"အသံ ရင်းမြစ်"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my-rMM/strings.xml
index 99c27c8..f293d4a 100644
--- a/packages/SettingsLib/res/values-my-rMM/strings.xml
+++ b/packages/SettingsLib/res/values-my-rMM/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ပရိုဖိုင်ရွေးရန်"</string>
<string name="category_personal" msgid="1299663247844969448">"ကိုယ်ရေး"</string>
<string name="category_work" msgid="8699184680584175622">"အလုပ်အကိုင်"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ဆော့ဝဲလ်ရေးသူ၏ ရွေးချယ်မှုများ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"တီထွင်သူများ ရွေးစရာကို ဖွင့်ပါ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"အပလီကေးရှင်းတိုးတက်မှုအတွက် ရွေးချယ်မှုကိုသတ်မှတ်သည်"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ဤသုံးစွဲသူအတွက် တည်ဆောက်သူ ရွေးချယ်ခွင့်များ မရနိုင်ပါ"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"ဤ အသုံးပြုသူ အတွက် VPN ဆက်တင်များကို မရယူနိုင်"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ဤ အသုံးပြုသူ အတွက် ချိတ်တွဲရေး ဆက်တင်များကို မရယူနိုင်"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ဤ အသုံးပြုသူ အတွက် ဝင်လိုသည့် နေရာ အမည်၏ ဆက်တင်များကို မရယူနိုင်"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"ယူအက်စ်ဘီ အမှားရှာခြင်း"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USBနှင့်ဆက်သွယ်ထားလျှင် အမှားရှာဖွေဖယ်ရှားမှုစနစ်စတင်ရန်"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"ယူအက်စ်ဘီ အမှားရှာခြင်း ခွင့်ပြုချက်များ ပြန်ရုတ်သိမ်းရန်"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ဘာဂ် အစီရင်ခံရန် ဖြတ်လမ်း"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ဘာဂ် အစီရင်ခံစာကို လက်ခံရန် ပါဝါ မီနူးထဲက ခလုတ်ကို ပြပါ"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ဖွင့်လျက်သား"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"အားသွင်းနေစဉ် ဖန်သားပြင်မှာဘယ်သောအခါမှ ပိတ်မည်မဟုတ်ပါ။"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ဘလူးတုသ် HCI snoop မှတ်တမ်းကို ဖွင့်ရန်။"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ဘလူးတုသ် HCI အစုလိုက်များကို ဖိုင်တစ်ခုတွင် ဖမ်းယူရန်"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM သော့ဖွင့်ခြင်း"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"အစပြုခြင်းကိရိယာအား သော့ဖွင့်ရန် ခွင့်ပြုမည်"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM သော့ဖွင့်ခြင်း ခွင့်ပြုမလား?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"သတိပေးချက်: ဤချိန်ညှိချက်ဖွင့်ထားလျှင်၊ ဤစက်ပစ္စည်းပေါ်တွင် စက်ပစ္စည်းကာကွယ်သည့် အထူးပြုလုပ်ချက် အလုပ်လုပ်မည်မဟုတ်ပါ။"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"တည်နေရာအတုပြု app ရွေးရန်"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"တည်နေရာအတုပြ app သတ်မှတ်ထားခြင်းမရှိပါ"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"တည်နေရာအတုပြ app- <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ကွန်ရက်လုပ်ငန်း"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ကြိုးမဲ့ပြသမှု အသိအမှတ်ပြုလက်မှတ်"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Verbose မှတ်တမ်းတင်ခြင်းအား ဖွင့်မည်"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ထိရောက်သည့် Wi‑Fi မှ ဆယ်လူလာ လွှဲပြောင်းမှု"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi ရွမ်းရှာဖွေမှုကို အမြဲတမ်း ခွင့်ပြုမည်"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"DHCP ကလိုင်းယင့် အဟောင်းအားသုံးရန်"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ဆဲလ်လူလာဒေတာ အမြဲတမ်းဖွင့်ထားသည်"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"မျက်နှာပြင်တွင် ဖော်ပြသည့် အချက်လက် အသွားအလာ ပမာဏပေါ်တွင် အခြေခံ၍ WIFI ရွမ်းရှာဖွေမှုအား ဖွင့်/ပိတ်မည်"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"လော့ဂါး ဘာဖား ဆိုက်များ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"လော့ ဘာဖားတွက် လော့ဂါးဆိုက် ရွေး"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB စီစဉ်ဖွဲ့စည်းမှု ရွေးရန်"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB စီစဉ်ဖွဲ့စည်းမှု ရွေးရန်"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ပုံစံတုတည်နေရာများကို ခွင့်ပြုရန်"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ပုံစံတုတည်နေရာများကို ခွင့်ပြုရန်"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"အရည်အချင်းများ စူးစမ်းမှု မြင်ကွင်းကို ဖွင့်ပေးရန်"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Android DHCP ကလိုင်းယင့် အသစ် အစား Lollipop မှ DHCP ကလိုင်းယင့်အား သုံးပါ။"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ဝိုင်ဖိုင်ဖွင့်ထားလျှင်တောင် မိုဘိုင်းဒေတာအမြဲတမ်းဖွင့်မည် (မြန်ဆန်သည့် ကွန်ရက် ပြောင်းခြင်းအတွက်)။"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ပြသနာရှာခြင်း ခွင့်ပြုပါမလား?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USBအမှားရှားခြင်းမှာ ဆော့ဝဲလ်ရေးသားရန်အတွက်သာ ရည်ရွယ်ပါသည်။ သင့်ကွန်ပြုတာနှင့်သင့်စက်ကြားတွင် ဒေတာများကိုကူးယူရန်၊ အကြောင်းမကြားပဲနှင့် သင့်စက်အတွင်းသို့ အပလီကေးရှင်းများထည့်သွင်းခြင်းနှင့် ဒေတာမှတ်တမ်းများဖတ်ရန်အတွက် အသုံးပြုပါ"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"သင် ယခင်က ခွင့်ပြုခဲ့သော ကွန်ပျူတာအားလုံးမှ ယူအက်စ်ဘီ အမှားစစ်ခွင့်ကို ရုတ်သိမ်းမည်လား ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"တည်ဆောက်ပြုပြင်ရန်ဆက်တင်များကို အသုံးပြုခွင့်ပေးမည်လား?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ဤဆက်တင်းများကို တည်ဆောက်ပြုပြင်ရာတွင် သုံးရန်အတွက်သာ ရည်ရွယ်သည်။ ၎င်းတို့သည် သင်၏စက်နှင့် အပလီကေးရှင်းများကို ရပ်စေခြင်း သို့ လုပ်ဆောင်ချက်မမှန်ကန်ခြင်းများ ဖြစ်ပေါ်စေနိုင်သည်။"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USBပေါ်မှ အပလီကေးရှင်းများကို အတည်ပြုစိစစ်ရန်"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT မှတဆင့် ထည့်သွင်းသော အပလီကေးရှင်းများကို အန္တရာယ်ဖြစ်နိုင်ခြင်း ရှိမရှိ စစ်ဆေးရန်။"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"လိုကယ်တာမီနယ်"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"local shell အသုံးပြုခွင့်ကမ်းလှမ်းသော တာမင်နယ်အပလီကေးရှင်းဖွင့်ပါ"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP စစ်ဆေးမှု"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCPစစ်ဆေးခြင်းလုပ်ဆောင်မှုကို သတ်မှတ်မည်"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"အမှားရှာဖွေဖယ်ရှားခြင်း"</string>
+ <string name="debug_app" msgid="8349591734751384446">"အမှားရှာသည့်အပလီကေးရှင်းရွေးချယ်ရန်"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"အမှားရှာသည့်အပလီကေးရှင်းတခုမှ မသတ်မှတ်ထားပါ"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"အမှားရှာသည့်အပလီကေးရှင်း: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"အပလီကေးရှင်းရွေးချယ်ရန်"</string>
+ <string name="no_application" msgid="2813387563129153880">"တခုမှမရှိ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"အပြစ်ရှာဖွေ ဖယ်ရှားချက်ကိုစောင့်ရန်"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"အမှားပြင်ဆင်ရှာဖွေသည့် အပလီကေးရှင်းသည် လုပ်ငန်းမစမှီ တွဲဖက်ရန် အမှားရှာဖွေမည့်သူကို စောင့်နေသည်။"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ထည့်သွင်းရန်"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ရေးဆွဲခြင်း"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ဟာ့ဒ်ဝဲ အရှိန်မြှင့် ပုံဖော်ခြင်း"</string>
+ <string name="media_category" msgid="4388305075496848353">"မီဒီယာ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"စောင့်ကြည့်စစ်ဆေးခြင်း"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"တင်းကြပ်သောစနစ် ဖြစ်နေမည်"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ရှည်လျားသောလုပ်ဆောင်ချက်ပြုနေချိန်စကရင်တွင်ပြမည်"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"မြား၏တည်နေရာ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"လက်ရှိထိတွေ့မှုဒေတာကို မှန်သားပေါ်မှထပ်ဆင့်ပြသမှု"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ထိတွေ့ခြင်းများကို ပြရန်"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ထိတွေ့ခြင်းအတွက် ရုပ်ပုံတုံ့ပြန်ချက်ကို ပြရန်"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"surface အဆင့်မြှင့်မှုများပြပါ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"အဆင့်မြှင့်နေစဉ် ဝင်းဒိုးမျက်နှာတပြင်လုံးကို အချက်ပြရန်"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPUမြင်ကွင်းအဆင့်မြှင့်ခြင်းများပြရန်"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU နှင့်ဆွဲစဉ် ၀င်းဒိုးအတွင်းပိုင်း လျှပ်တပြက်မြင်ကွင်းများ"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ဟာ့ဒ်ဝဲအလွှာများအဆင်မြှင့်မှုကိုပြရန်"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"အဆင့်မြှင်ချိန် ဟာ့ဒ်ဝဲအလွှာများကို အစိမ်းရောင်ဖြင့်အချက်ပြရန်"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ပိုသုံးစွဲမှုအမှားရှာဖွေပြင်ဆင်ရန်"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HWထပ်ဆင့်အရာများပိတ်ရန်"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"GPU ကိုမျက်နှာပြင်ခင်းကျင်းရာတွင် အမြဲသုံးပါ။"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"အရောင်နေရာတူအောင် ဖန်တီးသည်"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ခြေရာခံခြင်းဖွင့်ပါ။"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB အသံ ရူးတင်း ပိတ်ရန်"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB အသံ အရံပစ္စည်းများသို့ အော်တိုရူးတင်း ပိတ်ရန်"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ဖွဲ့စည်းပုံဘောင်များပြရန်"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ဖြတ်ပိုင်းအနားသတ်များ၊ အနားများ စသဖြင့် ပြပါ။"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ဖွဲ့စည်းပုံအညွှန်း မဖြစ်မနေလုပ်ပါ"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"လိုကယ်လ်အားလုံးအတွက် မျက်နှာပြင် ဖွဲ့စည်းပုံအညွှန်း မဖြစ်မနေလုပ်ရန်"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPUအသုံးပြုမှုအား ပြသရန်"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"လက်ရှိCPUအသုံးပြုမှုအားလုံး မျက်နှာပြင်တွင်ပြသမှု"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPUအား အတင်းအကျပ်ဖြစ်စေမည်"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"GPUကို ၂ဖက်မြင်ပုံဆွဲခြင်းအတွက် မဖြစ်မနေအသုံးပြုစေရန်"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"တွန်းအား ၄× MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 apps တွင် ၄×MSAA အသုံးပြုခွင့်ပေးရန်"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"စတုဂံပုံမကျသောဖြတ်ပိုင်း လုပ်ဆောင်ချက်များကို အမှားဖယ်ရှားသည်"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU တင်ဆက်မှု ကိုယ်ရေးအချက်အလက်"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"လှုပ်ရှားသက်ဝင်ပုံစကေး"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"သက်ဝင်အသွင်ပြောင်းခြင်း"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"လှုပ်ရှားမှုကြာချိန်စကေး"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ဆင့်ပွားမျက်နှာပြင်များအသွင်ဆောင်သည်"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"အပလီကေးရှင်းများ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ဆောင်ရွက်မှုများကို မသိမ်းထားပါနှင့်"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"အသုံးပြုသူထွက်ခွါသွားသည်နှင့် လုပ်ဆောင်ချက်များကို ဖျက်ပစ်မည်"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"နောက်ခံလုပ်ငန်းစဉ်ကန့်သတ်ခြင်း"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ANRsအားလုံးအား ပြသရန်"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"နောက်ခံအပ်ပလီကေးရှင်းအတွက်တုံ့ပြန်မှုမရှိပြရန်"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"အပြင်မှာ အတင်း ခွင့်ပြုရန်"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ပြနေတဲ့ တန်ဖိုး ဘယ်လိုပဲရှိနေနေ၊ ဘယ် appကို မဆို အပြင် သိုလှောင်ခန်းသို့ ရေးသားခွင့် ပေးတယ်"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"လုပ်ဆောင်ချက်များ ဆိုက်ညှိရနိုင်ရန် လုပ်ခိုင်းပါ"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"မန်နီးဖက်စ် တန်ဖိုးမရွေး၊ လုပ်ဆောင်ချက် အားလုံး ဆိုက်ညှိရနိုင်အောင် လုပ်ပေးပါ။"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop အရန်စကားဝှက်"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"အလုပ်ခုံတွင် အရန်သိမ်းဆည်းခြင်းများကို လောလောဆယ် မကာကွယ်နိုင်ပါ။"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"အလုပ်ခုံ တွင် အရန်သိမ်းဆည်းခြင်းအပြည့်လုပ်ရန် အတွက် စကားဝှက်ဖယ်ရန် သို့ ပြောင်းရန် တို့ထိပါ။"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"အရန်သိမ်းဆည်းခြင်းအတွက် စကားဝှက်အသစ်ကို သတ်မှတ်ပြီးပြီ။"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"စကားဝှက်အသစ်နှင့် အတည်ပြုချက် ကွဲလွဲနေသည်။"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"အရန်သိမ်းဆည်းခြင်းအတွက် စကားဝှက်သတ်မှတ်ချက် မအောင်မြင်ပါ။"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"တက်ကြွခြင်း (မူလ)"</item>
+ <item msgid="8446070607501413455">"သဘာဝ"</item>
+ <item msgid="6553408765810699025">"စံ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ထားသည့် အရောင်များ"</item>
+ <item msgid="8280754435979370728">"မျက်လုံးမှတွေ့ရသည့် သဘာဝအရောင်"</item>
+ <item msgid="5363960654009010371">"ဒီဂျစ်တယ်အကြောင်းအရာအတွက် ပြင်ဆင်ထားသည့် အရောင်များ"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"အလုပ်မလုပ်သော app များ"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"အလုပ်မလုပ်ပါ။ ခလုတ်ကို ထိပါ။"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"အလုပ်လုပ်နေ၏။ ခလုတ်ကို ထိပါ။"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"အလုပ်လုပ်နေသောဝန်ဆောင်မှုများ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ယခုအလုပ်လုပ်နေသောဝန်ဆောင်မှုကို ကြည့်ခြင်းနှင့် ထိန်းသိမ်းခြင်းအား ပြုလုပ်မည်လား?"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"ညသုံး မုဒ်"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ပိတ်ထား"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"အမြဲတမ်း ဖွင့်ထားရန်"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"အလိုအလျောက်"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ဖိုင်လုံခြုံအောင်ပြုလုပ်ခြင်းသို့ ပြောင်းပါ"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ပြောင်းရန်…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ဖိုင်ကို လုံခြုံအောင်ပြုလုပ်ပြီးပါပြီ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ဖိုင်အခြေပြုလုံခြုံအောင်ပြုလုပ်ခြင်းသို့ ပြောင်းလဲရန်"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"အချက်အလက်အပိုင်းကို ဖိုင်အခြေပြုလုံခြုံအောင်ပြုလုပ်ခြင်းသို့ ပြောင်းပါ။\n !!သတိ!! ၎င်းသည်သင့် အချက်အလက်များအားလုံးကို ဖျက်ပါမည်။ \n ဤလုပ်ဆောင်ချက်သည် ပထမအဆင့်တွင်သာ ရှိသေးပြီး မှန်ကန်စွာ လုပ်ဆောင်လိမ့်မည် မဟုတ်ပါ။\n ရှေ့ဆက်ရန် \'ရှင်းလင်းပြီး ပြောင်းလဲရန်…\' ကိုနှိပ်ပါ။"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ရှင်းလင်းပြီး ပြောင်းလဲရန်…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ဓာတ်ပုံအရောင်မုဒ်"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ကို အသုံးပြုပါ"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"သုံးမရအောင် ပိတ်ထားသည်"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"တစ်ရောင်ထဲသာမြင်ခြင်း"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (အနီ-အစိမ်း)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (အနီ-အစိမ်း)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (အပြာ-အဝါ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"အရောင်ပြင်ဆင်မှု"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ဒီအင်္ဂါရပ်မှာ စမ်းသပ်မှု ဖြစ်၍ လုပ်ကိုင်မှုကို အကျိုးသက်ရောက်နိုင်သည်။"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> မှ ကျော်၍ လုပ်ထားသည်။"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index af7c0b1..0877f5c 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokkert"</item>
<item msgid="1805837518286731242">"Unngår dårlig tilkobling midlertidig"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Aldri kontrollér"</item>
+ <item msgid="6042769699089883931">"Kontrollér kun DRM-innhold"</item>
+ <item msgid="9174900380056846820">"Alltid kontrollér"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Bruk aldri HDCP-kontroll"</item>
+ <item msgid="3878793616631049349">"Bruk HDCP-kontroll kun for DRM-innhold"</item>
+ <item msgid="45075631231212732">"Bruk alltid HDCP-kontroll"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 000"</item>
+ <item msgid="3534782711045262344">"256 000"</item>
+ <item msgid="8085867209202153403">"1 million"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB pr loggbuffer"</item>
+ <item msgid="2822309747675758628">"256 kB pr buffer"</item>
+ <item msgid="6699306198357496731">"1 MB pr loggbuffer"</item>
+ <item msgid="5748528643937500349">"4 MB pr loggbuffer"</item>
+ <item msgid="1978629051085111592">"16 MB pr loggbuffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasjon av"</item>
+ <item msgid="6624864048416710414">"Animasjonsskala 0,5 x"</item>
+ <item msgid="2219332261255416635">"Animasjonsskala 1 x"</item>
+ <item msgid="3544428804137048509">"Animasjonsskala 1,5 x"</item>
+ <item msgid="3110710404225974514">"Animasjonsskala 2 x"</item>
+ <item msgid="4402738611528318731">"Animasjonsskala 5 x"</item>
+ <item msgid="6189539267968330656">"Animasjonsskala 10 x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasjon av"</item>
+ <item msgid="3375781541913316411">"Animasjonsskala 0,5 x"</item>
+ <item msgid="1991041427801869945">"Animasjonsskala 1 x"</item>
+ <item msgid="4012689927622382874">"Animasjonsskala 1,5 x"</item>
+ <item msgid="3289156759925947169">"Animasjonsskala 2 x"</item>
+ <item msgid="7705857441213621835">"Animasjonsskala 5 x"</item>
+ <item msgid="6660750935954853365">"Animasjonsskala 10 x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasjon av"</item>
+ <item msgid="1138649021950863198">"Animasjonsskala 0,5 x"</item>
+ <item msgid="4394388961370833040">"Animasjonsskala 1 x"</item>
+ <item msgid="8125427921655194973">"Animasjonsskala 1,5 x"</item>
+ <item msgid="3334024790739189573">"Animasjonsskala 2 x"</item>
+ <item msgid="3170120558236848008">"Animasjonsskala 5 x"</item>
+ <item msgid="1069584980746680398">"Animasjonsskala 10 x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ingen"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (sikker)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (sikker)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (sikker)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (sikker)"</item>
+ <item msgid="3547211260846843098">"4K (oppskalert)"</item>
+ <item msgid="5411365648951414254">"4K (oppskalert, sikker)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dobbel skjerm)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ingen"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafikk)"</item>
+ <item msgid="1340692776955662664">"Anropsliste for glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Av"</item>
+ <item msgid="675719912558941285">"Merk urektangulært klippefelt blått"</item>
+ <item msgid="1064373276095698656">"Fremhev testede tegnekommandoer i grønt"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Av"</item>
+ <item msgid="2751513398307949636">"På skjermen som stolper"</item>
+ <item msgid="1851438178120770973">"I adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Av"</item>
+ <item msgid="7688197031296835369">"Vis overtrekksområder"</item>
+ <item msgid="2290859360633824369">"Vis områder for deuteranomali"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standard grense"</item>
+ <item msgid="4071574792028999443">"Ingen bakgrunnsprosesser"</item>
+ <item msgid="4810006996171705398">"Maksimalt 1 prosess"</item>
+ <item msgid="8586370216857360863">"Maksimalt 2 prosesser"</item>
+ <item msgid="836593137872605381">"Maksimalt 3 prosesser"</item>
+ <item msgid="7899496259191969307">"Maksimalt 4 prosesser"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Lader"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Lydkilde"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 413165a..2b461e7 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Velg profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personlig"</string>
<string name="category_work" msgid="8699184680584175622">"Jobb"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Utvikleralternativer"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Slå på utvikleralternativer"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Angi alternativer for apputvikling"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Utvikleralternativene er ikke tilgjengelige for denne brukeren"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Innstillingene for VPN er ikke tilgjengelig for denne brukeren"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Innstillingene for internettdeling er ikke tilgjengelig for denne brukeren"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Innstillingene for navn på tilgangspunkt er ikke tilgjengelig for denne brukeren"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-feilsøking"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Feilsøkingsmodus når USB kobles til"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB-feilsøking – opphev autorisasjon"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Snarvei til feilrapport"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Vis en knapp for generering av feilrapport i batterimenyen"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Forbli våken"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjermen blir aldri svart under lading"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Slå på Bluetooth HCI snoop-logg"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Samle alle Bluetooth HCI-pakker i en fil"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-opplåsing"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillat at oppstartsinnlasteren låses opp"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillate OEM-opplåsing?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ADVARSEL: Funksjoner for enhetsbeskyttelse fungerer ikke på denne enheten mens denne innstillingen er slått på."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Velg app for falsk plassering"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ingen app for falsk plassering er angitt"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Prøveplasseringsapp: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Nettverk"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Trådløs skjermsertifisering"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiver detaljert Wi-Fi-loggføring"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressiv overføring fra Wi-Fi til mobil"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillat alltid skanning for Wi-Fi-roaming"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Bruk eldre DHCP-klient"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata er alltid aktiv"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Tillat / ikke tillat skanning for Wi-Fi-roaming basert på mengden datatrafikk til stede i grensesnittet"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Bufferstørrelser for logg"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Velg loggstørrelse per loggbuffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Velg USB-konfigurasjon"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Velg USB-konfigurasjon"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Tillat simulert posisjon"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Tillat bruk av simulerte GPS-koordinater"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Slå på inspeksjon av visningsattributt"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Bruk DHCP-klienten fra Lollipop i stedet for den nye DHCP-klienten for Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Ha alltid mobildata slått på, selv når Wi-Fi er aktiv (for hurtig nettverksbytting)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Tillate USB-feilsøking?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-feilsøking er bare ment for utviklingsformål. Bruk det til å kopiere data mellom datamaskinen og enheten, installere apper på enheten uten varsel og lese loggdata."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vil du oppheve tilgangen til USB-feilsøking fra alle datamaskiner du tidligere har autorisert?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vil du aktivere utviklingsinnstillingene?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Disse innstillingene er bare beregnet for bruk under programutvikling. De kan forårsake problemer med enheten din og tilhørende apper."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Bekreft apper via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Sjekk apper som er installert via ADB/ADT for skadelig adferd."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktiver terminalappen som gir lokal kommandolistetilgang"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-kontroll"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Angi HDPC-kontrolladferd"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Feilsøking"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Velg feilsøkingsapp"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Du har ikke valgt feilsøkingsapp"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Feilsøker: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Velg app"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ingen"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Vent på feilsøkingsverktøyet"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Feilsøkt app venter til feilsøkingsverktøyet er lagt til før den kjører"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Inndata"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Tegning"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Maskinvareakselerert gjengivelse"</string>
+ <string name="media_category" msgid="4388305075496848353">"Medier"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Overvåking"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Slå på streng modus"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Skjermblink ved lange apphandlinger på hovedtråd"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pekerplassering"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Skjermoverlegg viser aktuelle berøringsdata"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Vis berøringer"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Gi visuelle tilbakemeldinger for berøringer"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Vis overflateoppdateringer"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Fremhev hele vindusoverflater når de oppdateres"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Vis GPU-visningsoppdateringer"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Fremhev visninger i vinduer når tegnet med GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Vis maskinvarelag-oppdat."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Maskinvarelag blinker grønt under oppdatering"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Feilsøk GPU-overtrekk"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Slå av maskinvareoverlegg"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Bruk alltid GPU for skjermsammensetting"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simuler fargeområde"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Slå på OpenGL-spor"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Slå av lydomkobling via USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Slå av automatisk lydomkobling til USB-enheter"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Vis kantene i utformingen"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Vis kanter, marger osv."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Tving layoutretning for RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Tving RTL-retning på skjermen for alle språk"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Vis CPU-bruk"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Skjermoverlegg viser gjeldende CPU-bruk"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Tving GPU-gjengivelse"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Tving bruk av GPU for 2D-tegning"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Tving 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Slå på 4x MSAA i OpenGL ES 2.0-apper"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Feilsøk ikke-rektangulær klipping"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU-gjengivelse av profil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Animasjonsskala for vindu"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Overgangsanimasjonsskala"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Varighetsskala animasjon"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulering av sekundærskjermer"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apper"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ikke behold aktiviteter"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Fjern hver aktivitet så fort brukeren forlater den"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Bakgrunnsprosessgrense"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Vis alle ANR-er"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Vis Appen svarer ikke-dialog for bakgrunnsapper"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Tving frem tillatelse for ekstern lagring av apper"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Gjør at apper kan skrives til ekstern lagring, uavhengig av manifestverdier"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Tving aktiviteter til å kunne endre størrelse"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Dette gjør at alle aktivitene kan endre størrelse for flervindusmodus, uavhengig av manifestverdier."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Passord for sikkerhetskopiering på datamaskin"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Fullstendig sikkerhetskopiering på datamaskin beskyttes ikke for øyeblikket."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Trykk for å endre eller fjerne passordet for fullstendige sikkerhetskopier på datamaskinen"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nytt passord for sikkerhetskopiering er angitt."</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Gjentakelsen av passordet er ikke identisk med det første du skrev inn"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Kunne ikke angi nytt passord for sikkerhetskopiering"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Krystallklar (standard)"</item>
+ <item msgid="8446070607501413455">"Naturlig"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Forbedrede farger"</item>
+ <item msgid="8280754435979370728">"Naturlige farger – som øyet ser dem"</item>
+ <item msgid="5363960654009010371">"Farger som er optimalisert for digitalt innhold"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktive apper"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktiv. Trykk for slå av/på."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Trykk for å slå av/på."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktive tjenester"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Se og kontrollér tjenester som kjører for øyeblikket"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nattmodus"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Slått av"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Alltid på"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatisk"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertér til kryptert fil"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertér …"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Allerede kryptert og lagret som fil"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konvertér til filbasert kryptering"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertér datapartisjonen til filbasert kryptering.\n !!Advarsel!! Dette sletter alle dataene dine.\n Dette er en alfafunksjon og kommer kanskje ikke til å fungere skikkelig.\n Trykk på «Slett og konvertér …» for å fortsette."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Slett og konvertér …"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Fargemodus for bilder"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Bruk sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Slått av"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Total fargeblindhet"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomali (rød-grønn)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (rød-grønn)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomali (blå-gul)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Fargekorrigering"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Denne funksjonen er eksperimentell og kan påvirke ytelsen."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overstyres av <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ne-rNP/arrays.xml b/packages/SettingsLib/res/values-ne-rNP/arrays.xml
index 7cb9ceb..99ec881 100644
--- a/packages/SettingsLib/res/values-ne-rNP/arrays.xml
+++ b/packages/SettingsLib/res/values-ne-rNP/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"रोकियो"</item>
<item msgid="1805837518286731242">"अस्थायी रूपमा कमजोर जडान हटाइँदै"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"कहिल्यै जाँच नगर्नुहोस्"</item>
+ <item msgid="6042769699089883931">"DRM सामग्रीको मात्र जाँच गर्नुहोस्"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"६४K"</item>
+ <item msgid="3534782711045262344">"२५६K"</item>
+ <item msgid="8085867209202153403">"१ मेगा पिक्सेल"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K प्रति लग बफर"</item>
+ <item msgid="2822309747675758628">"256K प्रति लग बफर"</item>
+ <item msgid="6699306198357496731">"1M प्रति लग बफर"</item>
+ <item msgid="5748528643937500349">"4M प्रति लग बफर"</item>
+ <item msgid="1978629051085111592">"16M प्रति लग बफर"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"सजीविकरण बन्द"</item>
+ <item msgid="6624864048416710414">"सजीविकरण मापन .5x"</item>
+ <item msgid="2219332261255416635">"सजीविकरण मापन 1x"</item>
+ <item msgid="3544428804137048509">"सजीविकरण मापन 1.5x"</item>
+ <item msgid="3110710404225974514">"एनिमेसन मापन 2x"</item>
+ <item msgid="4402738611528318731">"एनिमेसन मापन 5x"</item>
+ <item msgid="6189539267968330656">"सजीविकरण मापन 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"एनिमेसन बन्द छ"</item>
+ <item msgid="3375781541913316411">"सजीविकरण मापन .5x"</item>
+ <item msgid="1991041427801869945">"सजीविकरण मापन 1x"</item>
+ <item msgid="4012689927622382874">"सजीविकरण मापन 1.5x"</item>
+ <item msgid="3289156759925947169">"सजीविकरण मापन 2x"</item>
+ <item msgid="7705857441213621835">"एनिमेसन मापन 5x"</item>
+ <item msgid="6660750935954853365">"10x सजीविकरण स्केल"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"सजीविकरण बन्द"</item>
+ <item msgid="1138649021950863198">"सजीविकरण मापन .5x"</item>
+ <item msgid="4394388961370833040">"सजीविकरण स्केल १x"</item>
+ <item msgid="8125427921655194973">"सजीविकरण मापन 1.5x"</item>
+ <item msgid="3334024790739189573">"सजीविकरण मापन 2x"</item>
+ <item msgid="3170120558236848008">"सजीविकरण मापन 5x"</item>
+ <item msgid="1069584980746680398">"सजीविकरण मापन 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"कुनै पनि होइन"</item>
+ <item msgid="9033194758688161545">"४८० पिक्सेल"</item>
+ <item msgid="1025306206556583600">"४८० पिक्सेल (सुरक्षित)"</item>
+ <item msgid="1853913333042744661">"७२० पिक्सेल"</item>
+ <item msgid="3414540279805870511">"७२० पिक्सेल (सुरक्षित)"</item>
+ <item msgid="9039818062847141551">"१०८० पिक्सेल"</item>
+ <item msgid="4939496949750174834">"१०८० पिक्सेल (सुरक्षित)"</item>
+ <item msgid="1833612718524903568">"४ हजार"</item>
+ <item msgid="238303513127879234">"४ हजार (सुरक्षित)"</item>
+ <item msgid="3547211260846843098">"४ हजार (upscaled)"</item>
+ <item msgid="5411365648951414254">"४ हजार (upscaled, सुरक्षित)"</item>
+ <item msgid="1311305077526792901">"७२० पिक्सेल, १०८० पिक्सेल (दोहरो स्क्रिन)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"कुनै पनि होइन"</item>
+ <item msgid="9089630089455370183">"लगक्याट"</item>
+ <item msgid="5397807424362304288">"सिस्ट्रेस (ग्राफिक्स)"</item>
+ <item msgid="1340692776955662664">"glGetError मा स्ट्याक कल गर्नुहोस्"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"बन्द"</item>
+ <item msgid="675719912558941285">"गैर आयातकार क्षेत्र नीलो रङमा कोर्नुहोस्"</item>
+ <item msgid="1064373276095698656">"हाइलाइट परीक्षण चित्र कोर्ने आदेशहरू हरियोमा"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"बन्द"</item>
+ <item msgid="2751513398307949636">"स्क्रिनमा बारको रूपमा"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo मा"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"बन्द"</item>
+ <item msgid="7688197031296835369">"overdraw क्षेत्रहरू देखाउनुहोस्"</item>
+ <item msgid="2290859360633824369">"Deuteranomaly का लागि क्षेत्रहरू देखाउनुहोस्"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"मानक सीमा"</item>
+ <item msgid="4071574792028999443">"कुनै पृष्ठभूमि प्रक्रियाहरू छैनन्"</item>
+ <item msgid="4810006996171705398">"बढीमा १ प्रक्रिया"</item>
+ <item msgid="8586370216857360863">"बढीमा २ प्रक्रियाहरू"</item>
+ <item msgid="836593137872605381">"बढीमा ३ प्रक्रियाहरू"</item>
+ <item msgid="7899496259191969307">"बढीमा ४ प्रक्रियाहरू"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"चार्ज हुँदै"</item>
+ <item msgid="5220695614993094977">"MTP (मिडिया स्थानान्तरण प्रोटोकल)"</item>
+ <item msgid="2086000968159047375">"PTP (चित्र स्थानान्तरण प्रोटोकल)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB इथरनेट)"</item>
+ <item msgid="1718924214939774352">"अडियो स्रोत"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne-rNP/strings.xml
index eedbdec..f859287 100644
--- a/packages/SettingsLib/res/values-ne-rNP/strings.xml
+++ b/packages/SettingsLib/res/values-ne-rNP/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"प्रोफाइल रोज्नुहोस्"</string>
<string name="category_personal" msgid="1299663247844969448">"व्यक्तिगत"</string>
<string name="category_work" msgid="8699184680584175622">"काम"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"विकासकर्ता विकल्पहरू"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"विकासकर्ता विकल्प सक्रिया गर्नुहोस्"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"अनुप्रयोग विकासको लागि विकल्पहरू सेट गर्नुहोस्"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"विकासकर्ता विकल्पहरू यस प्रयोगकर्ताका लागि उपलब्ध छैन"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"कार्यक्षेत्र सीमा सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"पहुँच बिन्दु नामको सेटिङ्हरू यो प्रयोगकर्ताको लागि उपलब्ध छैन"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB डिबग गर्दै"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB जडित हुँदा डिबग मोड"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB डिबग गर्ने प्राधिकरणहरू उल्टाउनुहोस्"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"बग प्रतिवेदन सर्टकट"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"बग रिपोर्ट लिनका लागि पावर मेनुमा बटन देखाउनुहोस्"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"जागा रहनुहोस्"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज गर्ने बेलामा स्क्रिन कहिल्यै सुत्दैन।"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लुटुथ HCI snoop लग सक्षम पार्नुहोस्"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"सम्पूर्ण ब्लुटुथ HCI प्याकेटहरू एक फाइलमा कैद गर्नुहोस्"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलक गर्दै"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"अनलक हुन बूटलोडरलाई अनुमति दिनुहोस्"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलक गर्न अनुमति दिने?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"चेतावनी: यो सेटिङ खुला हुँदा, यस उपकरणमा उपकरण सुरक्षा सुविधाहरूले काम गर्ने छैनन्।"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"नमूना स्थान अनुप्रयोग चयन गर्नुहोस्"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"कुनै नमूना स्थान अनुप्रयोग सेट गरिएन"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"नमूना स्थान अनुप्रयोग: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किङ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ताररहित प्रदर्शन प्रमाणीकरण"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाइफाइ वर्बोज लग सक्षम पार्नुहोस्"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"सेलुलर समायोजनका लागि आक्रामक वाइफाइ"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"वाइफाइ घुम्ने स्क्यान गर्न सधैँ अनुमति दिनुहोस्"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"लिगेसी DHCP ग्राहक प्रयोग गर्नुहोस्"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"सेलुलर डेटा सधैं सक्रिय"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"वाइफाइ घुम्ने स्क्यान इन्टरफेसमा रहेको डेटा यातायातको मात्रामा आधारित अनुमति दिनुहोस्/नदिनुहोस्"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"लगर बफर आकारहरू"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"लग बफर प्रति लगर आकार चयन गर्नुहोस्"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB विन्यास चयन गर्नुहोस्"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB विन्यास चयन गर्नुहोस्"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"नक्कली स्थानहरूलाई अनुमति दिनुहोस्"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"नक्कली स्थानहरूलाई अनुमति दिनुहोस्"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"दृष्टिकोण विशेषता निरीक्षण सक्षम पार्नुहोस्"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"नयाँ Android DHCP ग्राहकको सट्टा Lollipop बाट DHCP ग्राहक प्रयोग गर्नुहोस्।"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi-Fi सक्रिय हुँदा पनि मोबाइल डेटा सधैँ सक्रिय राख्नुहोस् (द्रूत नेटवर्क स्विच गर्नको लागि)।"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB डिबग गर्न लागि अनुमति दिने हो?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"युएसबी डिबगिङ विकास प्रयोजनका लागि मात्र निर्मित हुन्छ। यसलाई तपाईँको कम्प्युटर र तपाईँको उपकरणका बीच डेटा प्रतिलिपि गर्न, बिना सूचना तपाईँको उपकरणमा अनुप्रयोगहरू स्थापना गर्न र लग डेटा पढ्नका लागि प्रयोग गर्नुहोस्।"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"तपाईँ पहिले नै अधिकृत गर्नुभएका सबै कम्प्यूटरबाट USB डिबग गर्नको लागि पहुँच रद्द गर्ने हो?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"विकास सेटिङहरू अनुमति दिने हो?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"यी सेटिङहरू केवल विकास प्रयोगको लागि विचार गरिएको हो। तिनीहरूले तपाईंको उपकरण र अनुप्रयोगहरूलाई विच्छेदन गर्न वा दुर्व्यवहार गर्न सक्दछ।"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB मा अनुप्रयोगहरू रुजु गर्नुहोस्"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"हानिकारक व्यवहारको लागि ADB/ADT को माध्यमबाट स्थापित अनुप्रयोगहरूको जाँच गर्नुहोस्।"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"स्थानीय टर्मिनल"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"स्थानीय सेल पहुँच प्रदान गर्ने टर्मिनल अनुप्रयोग सक्षम गर्नुहोस्"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP जाँच गर्दै"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP जाँच व्यवहार सेट गर्नुहोस्"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"डिबग गरिँदै"</string>
+ <string name="debug_app" msgid="8349591734751384446">"डिबग अनुप्रयोग चयन गर्नुहोस्"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"कुनै पनि डिबग अनुप्रयोग सेट छैन"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"डिबग गर्ने अनुप्रयोग: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"अनुप्रयोग चयन गर्नुहोस्"</string>
+ <string name="no_application" msgid="2813387563129153880">"केही पनि होइन"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"डिबग गर्नेलाई पर्खनुहोस्"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"डिबग भएको अनुप्रयोग कार्यन्वयन हुनु अघि संलग्न हुन डिबग गर्नेलाई पर्खन्छ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"इनपुट"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"रेखाचित्र"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"हार्डवेयर प्रतिपादन फुर्तिलो बनाइयो"</string>
+ <string name="media_category" msgid="4388305075496848353">"मिडिया"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"अनुगमन गर्दै"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"स्ट्रिक्ट मोड सक्षम पारियो"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"मुख्य थ्रेडमा लामा कार्यहरू अनुप्रयोगले सञ्चालन गर्दा स्क्रिनमा फ्ल्यास गर्नुहोस्"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"सूचक स्थान"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"स्क्रिन ओवरले हालको छुने डेटा देखाउँदै"</string>
+ <string name="show_touches" msgid="1356420386500834339">"छुवाइहरू देखाउनुहोस्"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"छुवाइका लागि देखिने प्रतिक्रिया देखाउनुहोस्"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"सतह अद्यावधिक देखाउनुहोस्"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"तिनीहरू अपडेट हुँदा पुरै विन्डो सतहहरूमा फ्यास गर्नुहोस्"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU दृश्य अद्यावधिक देखाउनुहोस्"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU को साथ कोरिएको बेला विन्डोहरू भित्र फ्ल्यास दृश्यहरू"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"हार्डवेयर तह अद्यावधिक देखाउनुहोस्"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"फ्ल्यास हार्डवेयर तहहरू अपडेट हुँदा हरिया हुन्छन्"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU overdraw डिबग गर्नुहोस्"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ओवरले असक्षम पार्नुहोस्"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"स्क्रिन कोम्पजिट गर्न लागि सधैँ GPU प्रयोग गर्नुहोस्"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"रंग स्पेस अनुकरण गर्नुहोस्"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ट्रेसहरू सक्षम गर्नुहोस्"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB अडियो अनुमार्ग बन्द"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB अडियो परिधीयलाई स्वचालित अनुमार्ग असक्षम"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"लेआउट सीमाहरू देखाउनुहोस्"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"क्लिप सीमा, मार्जिन, इत्यादि देखाउनुहोस्।"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL लेआउट दिशामा जबर्जस्ती गर्नुहोस्"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"सबै लोकेलहरूको लागि RTLमा स्क्रिन लेआउट दिशामा जबर्जस्ती गर्नुहोस्"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU उपयोग देखाउनुहोस्"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"स्क्रिन ओभरले वर्तमान CPU प्रयोग देखाउँदै"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU रेन्डर गर्न जोड गर्नुहोस्"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d चित्र कोर्नका लागि GPU को प्रयोगलाई जोड दिनुहोस्"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA जोड गर्नुहोस्"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES २.० अनुप्रयोगमा ४x MSAA सक्षम पार्नुहोस्"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"गैर आयातकर क्लिप कार्यहरू डिबग गर्नुहोस्"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"प्रोफाइल GPU रेन्डर गर्दै"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"विन्डो सजीविकरण स्केल"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"संक्रमण सजीविकरण मापन"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"सजीविकरण अवधि मापन"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"सहायक प्रदर्शनलाई सिमुलेट गर्नुहोस्"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"अनुप्रयोगहरू"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"गतिविधिहरू नराख्नुहोस्"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"प्रयोगकर्ताले यसलाई छोड्ने बित्तिकै जति सक्दो चाँडो हरेक गतिविधि ध्वस्त पार्नुहोस्"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"पृष्ठभूमि प्रक्रिया सीमा"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"सबै ANRs देखाउनुहोस्"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"पृष्ठभूमि अनुप्रयोगका लागि जवाफ नदिइरहेका अनुप्रयोगहरू देखाउनुहोस्"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यमा बल प्रयोगको अनुमति प्राप्त अनुप्रयोगहरू"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"म्यानिफेेस्टको उपेक्षा गरी, कुनै पनि अनुप्रयोगलाई बाह्य भण्डारणमा लेख्न योग्य बनाउँछ"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"गतिविधिहरू रिसाइज गर्नको लागि बाध्य गर्नुहोस्"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"म्यानिफेेस्ट मानहरूको ख्याल नगरी, बहु-विन्डोको लागि सबै रिसाइज गर्न सकिने गतिविधिहरू बनाउँछ।"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटप ब्याकअप पासवर्ड"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"डेस्कटप पूर्ण जगेडाहरू हाललाई सुरक्षित छैनन्"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"डेस्कटप पूर्ण ब्याकअपको लागि पासवर्ड बदल्न वा हटाउन छुनुहोस्"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"नयाँ जगेडा पासवर्ड सेट गर्नुहोस्"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"नयाँ पासवर्ड र पुष्टिकरण मेल खाँदैनन्"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"विफलता सेटिङ ब्याकअप पासवर्ड"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"जोसिलो (पूर्व निर्धारित)"</item>
+ <item msgid="8446070607501413455">"प्राकृतिक"</item>
+ <item msgid="6553408765810699025">"मानक"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"परिष्कृत रङ्गहरू"</item>
+ <item msgid="8280754435979370728">"आँखाले देख्ने प्राकृतिक रङ्गहरू"</item>
+ <item msgid="5363960654009010371">"डिजिटल सामग्रीको लागि अनुकूलित रङ्गहरु"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"निष्क्रिय अनुप्रयोगहरू"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"निष्क्रिय। टगल गर्न छुनुहोस्।"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"सक्रिय। टगल गर्न छुनुहोस्।"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"चलिरहेका सेवाहरू"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"हाल चालु भइरहेका सेवाहरू हेर्नुहोस् र नियन्त्रण गर्नुहोस्"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"रात्री मोड"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"असक्षम गरियो"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"सधैं खुल्ला"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"स्वचालित"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"फाइल इन्क्रिप्सनमा रूपान्तरण गर्नुहोस्"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"रुपान्तरण गर्नुहोस्…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"पहिल्यै फाइल इन्क्रिप्ट गरिएको छ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"इन्क्रिप्सन आधारित फाइलमा रुपान्तरण गर्दै"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"डेटा विभाजनलाई इन्क्रिप्सन आधारित फाइलमा रूपान्तर गर्नुहोस्।\n !!चेतावनी!! यसले तपाईँको सबै डेटा मेट्नेछ।\n यो विशेषता अल्फा चरणमा छ, र ठीकसँग काम नगर्न सक्छ।\n जारी गर्न \'हटाएर रुपान्तरण गर्नुहोस्...\' मा थिच्नुहोस्।"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"हटाएर रूपान्तरण गर्नुहोस्..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"चित्र रङ्ग मोड"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB प्रयोग गर्नुहोस्"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"असक्षम गरिएको छ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"मोनोक्रोमेसी"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (रातो-हरियो)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"प्रोटानोमेली (रातो, हरियो)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ट्रिटानोमेली (निलो-पंहेलो)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"रङ्ग सुधार"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"यो सुविधा प्रयोगात्मक छ र प्रदर्शनमा असर गर्न सक्छ।"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> द्वारा अधिरोहित"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index ab72b67..7f76bba 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Geblokkeerd"</item>
<item msgid="1805837518286731242">"Slechte verbinding tijdelijk vermijden"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nooit controleren"</item>
+ <item msgid="6042769699089883931">"Alleen controleren op DRM-inhoud"</item>
+ <item msgid="9174900380056846820">"Altijd controleren"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"HDCP-controle nooit gebruiken"</item>
+ <item msgid="3878793616631049349">"HDCP-controle alleen voor DRM-inhoud gebruiken"</item>
+ <item msgid="45075631231212732">"HDCP-controle altijd gebruiken"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K per logbuffer"</item>
+ <item msgid="2822309747675758628">"256K per logbuffer"</item>
+ <item msgid="6699306198357496731">"1M per logbuffer"</item>
+ <item msgid="5748528643937500349">"4M per logbuffer"</item>
+ <item msgid="1978629051085111592">"16M per logbuffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animatie uit"</item>
+ <item msgid="6624864048416710414">"Animatieschaal 0,5x"</item>
+ <item msgid="2219332261255416635">"Animatieschaal 1x"</item>
+ <item msgid="3544428804137048509">"Animatieschaal 1,5x"</item>
+ <item msgid="3110710404225974514">"Animatieschaal 2x"</item>
+ <item msgid="4402738611528318731">"Animatieschaal 5x"</item>
+ <item msgid="6189539267968330656">"Animatieschaal 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animatie uit"</item>
+ <item msgid="3375781541913316411">"Animatieschaal 0,5x"</item>
+ <item msgid="1991041427801869945">"Animatieschaal 1x"</item>
+ <item msgid="4012689927622382874">"Animatieschaal 1,5x"</item>
+ <item msgid="3289156759925947169">"Animatieschaal 2x"</item>
+ <item msgid="7705857441213621835">"Animatieschaal 5x"</item>
+ <item msgid="6660750935954853365">"Animatieschaal 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animatie uit"</item>
+ <item msgid="1138649021950863198">"Animatieschaal 0,5x"</item>
+ <item msgid="4394388961370833040">"Animatieschaal 1x"</item>
+ <item msgid="8125427921655194973">"Animatieschaal 1,5x"</item>
+ <item msgid="3334024790739189573">"Animatieschaal 2x"</item>
+ <item msgid="3170120558236848008">"Animatieschaal 5x"</item>
+ <item msgid="1069584980746680398">"Animatieschaal 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Geen"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (veilig)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (veilig)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (veilig)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (veilig)"</item>
+ <item msgid="3547211260846843098">"4K (opgeschaald)"</item>
+ <item msgid="5411365648951414254">"4K (opgeschaald, veilig)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dubbel scherm)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Geen"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (graphics)"</item>
+ <item msgid="1340692776955662664">"Oproepstack op glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Uit"</item>
+ <item msgid="675719912558941285">"Niet-rechthoekige bijsnijdregio tekenen in blauw"</item>
+ <item msgid="1064373276095698656">"Geteste tekenopdrachten markeren in groen"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Uit"</item>
+ <item msgid="2751513398307949636">"Op het scherm als balken"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Uit"</item>
+ <item msgid="7688197031296835369">"Gedeeltes met overbelasting weergeven"</item>
+ <item msgid="2290859360633824369">"Gebieden voor deuteranomalie weergeven"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standaardlimiet"</item>
+ <item msgid="4071574792028999443">"Geen achtergrondprocessen"</item>
+ <item msgid="4810006996171705398">"Maximaal 1 proces"</item>
+ <item msgid="8586370216857360863">"Maximaal 2 processen"</item>
+ <item msgid="836593137872605381">"Maximaal 3 processen"</item>
+ <item msgid="7899496259191969307">"Maximaal 4 processen"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Opladen"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB-Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audiobron"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index d2edbb7..49242f9 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profiel kiezen"</string>
<string name="category_personal" msgid="1299663247844969448">"Persoonlijk"</string>
<string name="category_work" msgid="8699184680584175622">"Werk"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opties voor ontwikkelaars"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Opties voor ontwikkelaars inschakelen"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Opties instellen voor appontwikkeling"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Ontwikkelaarsopties zijn niet beschikbaar voor deze gebruiker"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Instellingen voor VPN zijn niet beschikbaar voor deze gebruiker"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Instellingen voor tethering zijn niet beschikbaar voor deze gebruiker"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Instellingen voor toegangspuntnamen zijn niet beschikbaar voor deze gebruiker"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-foutopsporing"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Foutopsporingsmodus bij USB-verbinding"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Autorisatie USB-foutopsporing intrekken"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Snelkoppeling naar foutenrapport"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Een knop in het voedingsmenu weergeven om een foutenrapport te maken"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Stand-by"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Scherm gaat nooit uit tijdens het opladen"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Snoop-logbestand voor Bluetooth-HCI inschakelen"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Alle Bluetooth-HCI-pakketten tot één bestand samenvoegen"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontgrendeling"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Toestaan dat de bootloader wordt ontgrendeld"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-ontgrendeling toestaan?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WAARSCHUWING: De apparaatbeveiligingsfuncties werken niet op dit apparaat wanneer deze instelling is ingeschakeld."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"App voor neplocatie selecteren"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Geen app voor neplocatie ingesteld"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App voor neplocatie: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Netwerken"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificering van draadloze weergave"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Uitgebreide wifi-logregistratie insch."</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agressieve handover van wifi naar mobiel"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Altijd roamingscans voor wifi toestaan"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Oude DHCP-client gebruiken"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobiele gegevens altijd actief"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Roamingscans voor wifi (niet) toestaan op basis van de hoeveelheid dataverkeer die aanwezig is bij de interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Logger-buffergrootten"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Kies Logger-grootten per logbuffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB-configuratie selecteren"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB-configuratie selecteren"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Neplocaties toestaan"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Neplocaties toestaan"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Inspectie van weergavekenmerk inschakelen"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"De DHCP-client van Lollipop gebruiken in plaats van de nieuwe Android DHCP-client."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobiele gegevens altijd actief houden, ook als wifi actief is (voor sneller schakelen tussen netwerken)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB-foutopsporing toestaan?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-foutopsporing is alleen bedoeld voor ontwikkeldoeleinden. Het kan worden gebruikt om gegevens te kopiëren tussen je computer en je apparaat, apps zonder melding op je apparaat te installeren en loggegevens te lezen."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Toegang tot USB-foutopsporing intrekken voor alle computers waarvoor je dit eerder hebt toegestaan?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ontwikkelingsinstellingen toestaan?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Deze instellingen zijn uitsluitend bedoeld voor ontwikkelingsgebruik. Je apparaat en apps kunnen hierdoor vastlopen of anders reageren."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Apps verifiëren via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Apps die zijn geïnstalleerd via ADB/ADT, controleren op schadelijk gedrag"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokale terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Terminal-app inschakelen die lokale shell-toegang biedt"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-controle"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP-controlegedrag instellen"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Foutopsporing"</string>
+ <string name="debug_app" msgid="8349591734751384446">"App voor foutopsporing selecteren"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Geen app voor foutopsporing ingesteld"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"App voor foutopsporing: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"App selecteren"</string>
+ <string name="no_application" msgid="2813387563129153880">"Niets"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Wachten op debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Gedebugde app wacht op koppelen van debugger vóór uitvoering"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Invoer"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Tekening"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Rendering met hardwareversnelling"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Controle"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strikte modus ingeschakeld"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Knipperend scherm bij lange bewerkingen door apps"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Cursorlocatie"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Schermoverlay met huidige aanraakgegevens"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Aanraakbewerkingen weergeven"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Visuele feedback voor aanraakbewerkingen weergeven"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Oppervlakupdates weergeven"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Volledige vensteroppervlakken flashen bij updates"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU-weergave-updates weergeven"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Flash-weergaven in vensters indien getekend met de GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Updaten hardwarelgn wrgvn"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Hardwarelagen knipperen groen bij updates"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Foutopsporing GPU-overbelasting"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW-overlays uitschakelen"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"GPU altijd gebruiken voor schermcompositing"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Kleurruimte simuleren"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL-sporen inschakelen"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB-audiorouting uitsch."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Autom. routing naar USB-randapparatuur uitsch."</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Indelingsgrenzen weerg."</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Clipgrenzen, marges en meer weergeven"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"V.r.n.l.-indelingsrichting afdwingen"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Schermindelingsrichting geforceerd instellen op v.r.n.l. voor alle talen"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU-gebruik weergeven"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Schermoverlay met huidig CPU-gebruik"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU-rendering afdwingen"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Gebruik van GPU voor 2D-tekening forceren"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA forceren"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"4x MSAA inschakelen in OpenGL ES 2.0-apps"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Fouten met niet-rechthoekige bijsnijdbewerkingen opsporen"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU-rendering van profiel"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Vensteranimatieschaal"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Overgangsanimatieschaal"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Duur van animatieschaal"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Secundaire displays simuleren"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Activiteiten niet opslaan"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Activiteit wissen zodra de gebruiker deze verlaat"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Achtergrondproceslimiet"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Alle ANR\'s weergeven"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"\'App reageert niet\' weerg. voor apps op achtergr."</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Toestaan van apps op externe opslag afdwingen"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Hierdoor komt een app in aanmerking om te worden geschreven naar externe opslag, ongeacht de manifestwaarden"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Formaat activiteiten geforceerd aanpasbaar maken"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Hiermee wordt het formaat van alle activiteiten aanpasbaar gemaakt, ongeacht de manifestwaarden."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Wachtwoord desktopback-up"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Volledige back-ups naar desktops zijn momenteel niet beveiligd"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Raak dit aan om het wachtwoord voor volledige back-ups naar desktops te wijzigen of te verwijderen"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nieuw back-upwachtwoord ingesteld"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nieuw wachtwoord en bevestiging komen niet overeen."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Instellen van back-upwachtwoord is mislukt"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Levendig (standaard)"</item>
+ <item msgid="8446070607501413455">"Natuurlijk"</item>
+ <item msgid="6553408765810699025">"Standaard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Verbeterde kleuren"</item>
+ <item msgid="8280754435979370728">"Natuurlijke kleuren zoals gezien door het menselijk oog"</item>
+ <item msgid="5363960654009010371">"Kleuren geoptimaliseerd voor digitale content"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inactieve apps"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactief. Tik om te schakelen."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Actief. Tik om te schakelen."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Actieve services"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Services die momenteel actief zijn, weergeven en beheren"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nachtmodus"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Uitgeschakeld"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Altijd aan"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatisch"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converteren naar versleuteling op basis van bestanden"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converteren…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Al versleuteld op basis van bestanden"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Converteren naar versleuteling op basis van bestanden"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Gegevenspartitie converteren naar versleuteling op basis van bestanden.\n !!Waarschuwing!! Al je gegevens worden gewist.\n Deze functie bevindt zich in de alfafase en werkt mogelijk niet correct.\n Druk op \'Wissen en converteren\' om door te gaan."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wissen en converteren…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Kleurenmodus voor afbeeldingen"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB gebruiken"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Uitgeschakeld"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Totale kleurenblindheid"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalie (rood-groen)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (rood-groen)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (blauw-geel)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Kleurcorrectie"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Deze functie is experimenteel en kan invloed hebben op de prestaties."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overschreven door <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pa-rIN/arrays.xml b/packages/SettingsLib/res/values-pa-rIN/arrays.xml
index a03f17e..fa624a0 100644
--- a/packages/SettingsLib/res/values-pa-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-pa-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ਬਲੌਕ ਕੀਤਾ"</item>
<item msgid="1805837518286731242">"ਅਸਥਾਈ ਤੌਰ ਤੇ ਖ਼ਰਾਬ ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਚਣ ਲਈ"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ਕਦੇ ਵੀ ਜਾਂਚ ਨਾ ਕਰੋ"</item>
+ <item msgid="6042769699089883931">"ਕੇਵਲ DRM ਸਮੱਗਰੀ ਲਈ ਜਾਂਚ ਕਰੋ"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ"</item>
+ <item msgid="2822309747675758628">"256K ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ"</item>
+ <item msgid="6699306198357496731">"1M ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ"</item>
+ <item msgid="5748528643937500349">"4M ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ"</item>
+ <item msgid="1978629051085111592">"16M ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ਐਨੀਮੇਸ਼ਨ ਬੰਦ"</item>
+ <item msgid="6624864048416710414">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ .5x"</item>
+ <item msgid="2219332261255416635">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1x"</item>
+ <item msgid="3544428804137048509">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1.5x"</item>
+ <item msgid="3110710404225974514">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 2x"</item>
+ <item msgid="4402738611528318731">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 5x"</item>
+ <item msgid="6189539267968330656">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ਐਨੀਮੇਸ਼ਨ ਬੰਦ"</item>
+ <item msgid="3375781541913316411">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ .5x"</item>
+ <item msgid="1991041427801869945">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1x"</item>
+ <item msgid="4012689927622382874">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1.5x"</item>
+ <item msgid="3289156759925947169">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 2x"</item>
+ <item msgid="7705857441213621835">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 5x"</item>
+ <item msgid="6660750935954853365">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ਐਨੀਮੇਸ਼ਨ ਬੰਦ"</item>
+ <item msgid="1138649021950863198">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ .5x"</item>
+ <item msgid="4394388961370833040">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1x"</item>
+ <item msgid="8125427921655194973">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 1.5x"</item>
+ <item msgid="3334024790739189573">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 2x"</item>
+ <item msgid="3170120558236848008">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 5x"</item>
+ <item msgid="1069584980746680398">"ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ਕੋਈ ਨਹੀਂ"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ਸੁਰੱਖਿਅਤ)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ਸੁਰੱਖਿਅਤ)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ਸੁਰੱਖਿਅਤ)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ਸੁਰੱਖਿਅਤ)"</item>
+ <item msgid="3547211260846843098">"4K (ਪੂਰਾ ਕੀਤਾ)"</item>
+ <item msgid="5411365648951414254">"4K (ਪੂਰਾ ਕੀਤਾ, ਸੁਰੱਖਿਅਤ)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ਦੂਹਰੀ ਸਕ੍ਰੀਨ)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ਕੋਈ ਨਹੀਂ"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (ਗ੍ਰਾਫਿਕਸ)"</item>
+ <item msgid="1340692776955662664">"glGetError ਤੇ ਕਾਲ ਸਟੈਕ"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ਬੰਦ"</item>
+ <item msgid="675719912558941285">"ਨੀਲੇ ਵਿੱਚ ਗ਼ੈਰ-ਆਇਤਾਕਾਰ ਕਲਿਪ ਖੇਤਰ ਡ੍ਰਾ ਕਰੋ"</item>
+ <item msgid="1064373276095698656">"ਹਾਈਲਾਈਟ ਜਾਂਚ ਕੀਤੀਆਂ ਡ੍ਰਾਇੰਗ ਕਮਾਂਡਾਂ ਹਰੇ ਵਿੱਚ ਹਨ"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ਬੰਦ"</item>
+ <item msgid="2751513398307949636">"ਬਾਰਸ ਦੇ ਤੌਰ ਤੇ ਸਕ੍ਰੀਨ ਤੇ"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo ਵਿੱਚ"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ਬੰਦ"</item>
+ <item msgid="7688197031296835369">"ਓਵਰਡ੍ਰਾ ਖੇਤਰ ਦਿਖਾਓ"</item>
+ <item msgid="2290859360633824369">"Deuteranomaly ਲਈ ਖੇਤਰ ਦਿਖਾਓ"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ਸਟੈਂਡਰਡ ਸੀਮਾ"</item>
+ <item msgid="4071574792028999443">"ਕੋਈ ਪਿਛੋਕੜ ਪ੍ਰਕਿਰਿਆਵਾਂ ਨਹੀਂ"</item>
+ <item msgid="4810006996171705398">"ਵੱਧ ਤੋਂ ਵੱਧ 1 ਪ੍ਰਕਿਰਿਆ"</item>
+ <item msgid="8586370216857360863">"ਵੱਧ ਤੋਂ ਵੱਧ 2 ਪ੍ਰਕਿਰਿਆਵਾਂ"</item>
+ <item msgid="836593137872605381">"ਵੱਧ ਤੋਂ ਵੱਧ 3 ਪ੍ਰਕਿਰਿਆਵਾਂ"</item>
+ <item msgid="7899496259191969307">"ਵੱਧ ਤੋਂ ਵੱਧ 4 ਪ੍ਰਕਿਰਿਆਵਾਂ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ਚਾਰਜਿੰਗ"</item>
+ <item msgid="5220695614993094977">"MTP (ਮੀਡੀਆ ਟ੍ਰਾਂਸਫਰ ਪ੍ਰੋਟੋਕੋਲ)"</item>
+ <item msgid="2086000968159047375">"PTP (ਤਸਵੀਰ ਟ੍ਰਾਂਸਫਰ ਪ੍ਰੋਟੋਕੋਲ)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ਈਥਰਨੈਟ)"</item>
+ <item msgid="1718924214939774352">"ਔਡੀਓ ਸ੍ਰੋਤ"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa-rIN/strings.xml
index 921d48f..cbe196c 100644
--- a/packages/SettingsLib/res/values-pa-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-pa-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ਪ੍ਰੋਫਾਈਲ ਚੁਣੋ"</string>
<string name="category_personal" msgid="1299663247844969448">"ਨਿੱਜੀ"</string>
<string name="category_work" msgid="8699184680584175622">"ਦਫ਼ਤਰ"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ਐਪ ਵਿਕਾਸ ਲਈ ਚੋਣਾਂ ਸੈਟ ਕਰੋ"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਵਿਕਾਸਕਾਰ ਚੋਣਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ VPN ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਟੀਥਰਿੰਗ ਸੈਟਿੰਗਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ਪਹੁੰਚ ਬਿੰਦੂ ਨਾਮ ਸੈਟਿੰਗਾਂ ਇਸ ਉਪਭੋਗਤਾ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ਡੀਬਗਿੰਗ"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"ਡੀਬਗ ਮੋਡ ਜਦੋਂ USB ਕਨੈਕਟ ਕੀਤੀ ਜਾਏ"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ਡੀਬਗਿੰਗ ਅਧਿਕਾਰ ਰੱਦ ਕਰੋ"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ਬਗ ਰਿਪੋਰਟ ਸ਼ੌਰਟਕਟ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"ਇੱਕ ਬਗ ਰਿਪੋਰਟ ਲੈਣ ਲਈ ਪਾਵਰ ਮੀਨੂ ਵਿੱਚ ਇੱਕ ਬਟਨ ਦਿਖਾਓ"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"ਸਕਿਰਿਆ ਰੱਖੋ"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ਇੱਕ ਫਾਈਲ ਵਿੱਚ ਸਾਰੇ bluetooth HCI ਪੈਕੇਟ ਕੈਪਚਰ ਕਰੋ"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ਅਨਲੌਕ ਕਰਨਾ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ਬੂਟਲੋਡਰ ਨੂੰ ਅਨਲੌਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ਕੀ OEM ਨੂੰ ਅਨਲੌਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ਚਿਤਾਵਨੀ: ਡਿਵਾਈਸ ਸੁਰੱਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਉਦੋਂ ਇਸ ਡਿਵਾਈਸ ਤੇ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਇਹ ਸੈਟਿੰਗ ਚਾਲੂ ਹੋਵੇਗੀ।"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"ਮੌਕ ਸਥਾਨ ਐਪ ਚੁਣੋ"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ਕੋਈ ਵੀ ਮੌਕ ਸਥਾਨ ਐਪ ਸੈੱਟ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"ਮੌਕ ਸਥਾਨ ਐਪ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ਨੈਟਵਰਕਿੰਗ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ਵਰਬੋਸ ਲੌਗਿੰਗ ਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ਸੈਲਿਊਲਰ ਹੈਂਡਓਵਰ ਲਈ ਅਗਰੈਸਿਵ Wi‑Fi"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ਹਮੇਸ਼ਾਂ Wi‑Fi Roam Scans ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ਲੀਗੇਸੀ DHCP ਕਲਾਈਂਟ ਵਰਤੋ"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ਸੈਲਿਊਲਰ ਡੇਟਾ ਹਮੇਸ਼ਾ ਕਿਰਿਆਸ਼ੀਲ"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ਇੰਟਰਫੇਸ ਤੇ ਮੌਜੂਦ ਡਾਟਾ ਟ੍ਰੈਫਿਕ ਦੀ ਮਾਤਰਾ ਦੇ ਆਧਾਰ ਤੇ Wi‑Fi ਰੋਮ ਸਕੈਨ ਦੀ ਆਗਿਆ ਦਿਓ/ਅਸਵੀਕਾਰ ਕਰੋ"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ਲੌਗਰ ਬਫਰ ਆਕਾਰ"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ਪ੍ਰਤੀ ਲੌਗ ਬਫਰ ਲੌਗਰ ਆਕਾਰ ਚੁਣੋ"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB ਕੌਂਫਿਗਰੇਸ਼ਨ ਚੁਣੋ"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB ਕੌਂਫਿਗਰੇਸ਼ਨ ਚੁਣੋ"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ਨਕਲੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ਨਕਲੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨਾਂ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"ਗੁਣ ਛਾਣਬੀਣ ਦੇਖੋ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ਨਵੇਂ Android DHCP ਕਲਾਈਂਟ ਦੀ ਬਜਾਇ Lollipop ਦਾ DHCP ਕਲਾਈਂਟ ਵਰਤੋ।"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ਹਮੇਸ਼ਾ ਮੋਬਾਈਲ ਡੇਟਾ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਰੱਖੋ ਭਾਵੇਂ Wi‑Fi ਕਿਰਿਆਸ਼ੀਲ ਹੋਵੇ (ਤੇਜ਼ ਨੈੱਟਵਰਕ ਸਵਿੱਚਿੰਗ ਲਈ)।"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"ਕੀ USB ਡੀਬਗਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ਡੀਬਗਿੰਗ ਕੇਵਲ ਵਿਕਾਸ ਮੰਤਵਾਂ ਲਈ ਹੁੰਦੀ ਹੈ। ਇਸਨੂੰ ਆਪਣੇ ਕੰਪਿਊਟਰ ਅਤੇ ਆਪਣੀ ਡਿਵਾਈਸ ਵਿਚਕਾਰ ਡਾਟਾ ਕਾਪੀ ਕਰਨ ਲਈ ਵਰਤੋ, ਸੂਚਨਾ ਦੇ ਬਿਨਾਂ ਆਪਣੀ ਡਿਵਾਈਸ ਤੇ ਐਪਸ ਇੰਸਟੌਲ ਕਰੋ ਅਤੇ ਲੌਗ ਡਾਟਾ ਪੜ੍ਹੋ।"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ਕੀ ਉਹਨਾਂ ਸਾਰੇ ਕੰਪਿਊਟਰਾਂ ਤੋਂ USB ਡੀਬਗਿੰਗ ਤੱਕ ਪਹੁੰਚ ਰੱਦ ਕਰਨੀ ਹੈ, ਜਿਹਨਾਂ ਲਈ ਪਹਿਲਾਂ ਤੁਸੀਂ ਅਧਿਕਾਰਤ ਕੀਤਾ ਹੈ?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"ਕੀ ਵਿਕਾਸ ਸੈਟਿੰਗਾਂ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ਇਹ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਵਿਕਾਸਕਾਰ ਦੀ ਵਰਤੋਂ ਲਈ ਹਨ। ਇਹ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਅਤੇ ਇਸਤੇ ਮੌਜੂਦ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬ੍ਰੇਕ ਕਰਨ ਜਾਂ ਦੁਰਵਿਵਹਾਰ ਕਰਨ ਦਾ ਕਾਰਨ ਬਣ ਸਕਦੇ ਹਨ।"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ਤੇ ਐਪਸ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ਹਾਨੀਕਾਰਕ ਵਿਵਹਾਰ ਲਈ ADB/ADT ਰਾਹੀਂ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"ਸਥਾਨਕ ਟਰਮੀਨਲ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"ਟਰਮੀਨਲ ਐਪ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ ਜੋ ਸਥਾਨਕ ਸ਼ੈਲ ਪਹੁੰਚ ਆੱਫਰ ਕਰਦਾ ਹੈ"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP ਜਾਂਚ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP ਜਾਂਚ ਵਿਵਹਾਰ ਸੈਟ ਕਰੋ"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ਡੀਬਗਿੰਗ"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ਡੀਬਗ ਐਪ ਚੁਣੋ"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ਕੋਈ ਡੀਬਗ ਐਪਲੀਕੇਸ਼ਨ ਸੈਟ ਨਹੀਂ ਕੀਤੀ"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ਡੀਬਗਿੰਗ ਐਪਲੀਕੇਸ਼ਨ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ਐਪਲੀਕੇਸ਼ਨ ਚੁਣੋ"</string>
+ <string name="no_application" msgid="2813387563129153880">"ਕੁਝ ਨਹੀਂ"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ਡੀਬਗਰ ਦੀ ਉਡੀਕ ਕਰੋ"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ਡੀਬਗ ਕੀਤੇ ਐਪਲੀਕੇਸ਼ਨ ਐਗਜੀਕਿਊਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਅਟੈਚ ਕਰਨ ਲਈ ਡੀਬਗਰ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹਨ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ਇਨਪੁਟ"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ਡਰਾਇੰਗ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ਹਾਰਡਵੇਅਰ ਤੇਜ਼ ਕੀਤਾ ਪ੍ਰਗਟਾਅ"</string>
+ <string name="media_category" msgid="4388305075496848353">"ਮੀਡੀਆ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ਸਟ੍ਰਿਕਟ ਮੋਡ ਸਮਰਥਿਤ"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ਜਦੋਂ ਐਪਸ ਮੇਨ ਥ੍ਰੈਡ ਤੇ ਲੰਮੇ ਓਪਰੇਸ਼ਨ ਕਰਨ ਤਾਂ ਸਕ੍ਰੀਨ ਫਲੈਸ਼ ਕਰੋ"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ਪੌਇੰਟਰ ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਮੌਜੂਦਾ ਟਚ ਡਾਟਾ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ਟਚਸ ਦਿਖਾਓ"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ਟਚਸ ਲਈ ਵਿਜੁਅਲ ਫੀਡਬੈਕ ਦਿਖਾਓ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"ਸਰਫਸ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"ਸਮੁੱਚੀ ਵਿੰਡੋ ਸਰਫੇਸਾਂ ਫਲੈਸ਼ ਕਰੋ ਜਦੋਂ ਉਹ ਅਪਡੇਟ ਹੁੰਦੀਆਂ ਹਨ"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU ਦ੍ਰਿਸ਼ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"ਜਦੋਂ GPU ਨਾਲ ਡ੍ਰਾ ਕੀਤਾ ਜਾਏ ਤਾਂ ਵਿੰਡੋਜ ਦੇ ਅੰਦਰ ਦ੍ਰਿਸ਼ ਫਲੈਸ਼ ਕਰੋ"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਸ ਅਪਡੇਟਾਂ ਦਿਖਾਓ"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ਹਾਰਡਵੇਅਰ ਲੇਅਰਾਂ ਨੂੰ ਹਰੀਆਂ ਫਲੈਸ਼ ਕਰੋ ਜਦੋਂ ਉਹ ਅਪਡੇਟ ਹੁੰਦੀਆਂ ਹਨ"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ਓਵਰਡ੍ਰਾ ਡੀਬਗ ਕਰੋ"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW ਓਵਰਲੇਜ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ਸਕ੍ਰੀਨ ਕੰਪੋਜਿਟਿੰਗ ਲਈ ਹਮੇਸ਼ਾਂ GPU ਵਰਤੋ"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"ਰੰਗ ਸਪੇਸ ਦੀ ਨਕਲ ਕਰੋ"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ਟ੍ਰੇਸਿਜ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ਔਡੀਓ ਰੂਟਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ਔਡੀਓ ਪੈਰੀਫਰਲ ਲਈ ਆਟੋਮੈਟਿਕ ਰੂਟਿੰਗ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"ਲੇਆਉਟ ਬਾਊਂਡਸ ਦਿਖਾਓ"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ਕਲਿਪ ਬਾਊਂਡਸ, ਮਾਰਜਿਨ ਆਦਿ ਦਿਖਾਓ"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL ਲੇਆਉਟ ਦਿਸ਼ਾ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"ਸਾਰੇ ਸਥਾਨਾਂ ਲਈ RTL ਵੱਲ ਸਕ੍ਰੀਨ ਲੇਆਉਟ ਦਿਸ਼ਾ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU ਵਰਤੋਂ ਦਿਖਾਓ"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"ਸਕ੍ਰੀਨ ਓਵਰਲੇ ਵਰਤਮਾਨ CPU ਵਰਤੋਂ ਦਿਖਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU ਪ੍ਰਗਟਾਅ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ਡ੍ਰਾਇੰਗ ਲਈ GPU ਦੀ ਵਰਤੋਂ ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ਤੇ ਜ਼ੋਰ ਪਾਓ"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ਐਪਸ ਵਿੱਚ 4x MSAA ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"ਗ਼ੈਰ-ਆਇਤਾਕਾਰ ਕਲਿਪ ਓਪਰੇਸ਼ਨ ਡੀਬਗ ਕਰੋ"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"ਪ੍ਰੋਫਾਈਲ GPU ਰੈਂਡਰਿੰਗ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ਵਿੰਡੋ ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"ਟ੍ਰਾਂਜਿਸ਼ਨ ਐਨੀਮੇਸ਼ਨ ਸਕੇਲ"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ਐਨੀਮੇਟਰ ਮਿਆਦ ਸਕੇਲ"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ਸੈਕੰਡਰੀ ਡਿਸਪਲੇ ਦੀ ਨਕਲ ਕਰੋ"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ਐਪਸ"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ਗਤੀਵਿਧੀਆਂ ਨਾ ਰੱਖੋ"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ਹਰੇਕ ਗਤੀਵਿਧੀ ਨੂੰ ਨਸ਼ਟ ਕਰੋ ਜਿਵੇਂ ਹੀ ਉਪਭੋਗਤਾ ਇਸਨੂੰ ਛੱਡ ਦੇਵੇ"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ਪਿਛੋਕੜ ਪ੍ਰਕਿਰਿਆ ਸੀਮਾ"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"ਸਾਰੇ ANR ਦਿਖਾਓ"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"ਪਿਛੋਕੜ ਐਪਸ ਲਈ ਐਪਸ ਜਵਾਬ ਨਹੀਂ ਦੇ ਰਹੇ ਡਾਇਲੌਗ ਦਿਖਾਓ"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"ਐਪਸ ਨੂੰ ਬਾਹਰਲੇ ਤੇ ਜ਼ਬਰਦਸਤੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ਇੱਕ ਐਪ ਨੂੰ ਬਾਹਰਲੀ ਸਟੋਰੇਜ ਤੇ ਲਿਖਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦਾ ਹੈ, ਮੈਨੀਫੈਸਟ ਵੈਲਯੂਜ ਤੇ ਵਿਚਾਰ ਕੀਤੇ ਬਿਨਾਂ"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"ਮੁੜ-ਆਕਾਰ ਬਦਲਣ ਲਈ ਸਰਗਰਮੀਆਂ \'ਤੇ ਜ਼ੋਰ ਦਿਓ"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"ਮਲਟੀ-ਵਿੰਡੋ ਲਈ ਸਾਰੀਆਂ ਸਰਗਰਮੀਆਂ ਨੂੰ ਮੁੜ-ਆਕਾਰ ਵਿੱਚ ਲਿਆਉਂਦੀ ਹੈ, ਚਾਹੇ ਮੈਨੀਫੈਸਟ ਵੈਲਯੂਜ਼ ਕੁਝ ਵੀ ਹੋਣ।"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ਡੈਸਕਟੌਪ ਬੈਕਅਪ ਪਾਸਵਰਡ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ਡੈਸਕਟੌਪ ਪੂਰੇ ਬੈਕਅਪਸ ਇਸ ਵੇਲੇ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹਨ"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ਡੈਸਕਟੌਪ ਪੂਰੇ ਬੈਕਅਪਸ ਲਈ ਪਾਸਵਰਡ ਬਦਲਣ ਜਾਂ ਹਟਾਉਣ ਲਈ ਛੋਹਵੋ"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"ਨਵਾਂ ਬੈਕਅਪ ਪਾਸਵਰਡ ਸੈਟ ਕੀਤਾ"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"ਨਵਾਂ ਪਾਸਵਰਡ ਅਤੇ ਪੁਸ਼ਟੀ ਮੇਲ ਨਹੀਂ ਖਾਂਦੀ"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ਬੈਕਅਪ ਪਾਸਵਰਡ ਸੈਟ ਕਰਨ ਵਿੱਚ ਅਸਫਲਤਾ"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"ਚਮਕੀਲਾ (ਡਿਫੌਲਟ)"</item>
+ <item msgid="8446070607501413455">"ਕੁਦਰਤੀ"</item>
+ <item msgid="6553408765810699025">"ਸਟੈਂਡਰਡ"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"ਵਿਸਤ੍ਰਿਤ ਰੰਗ"</item>
+ <item msgid="8280754435979370728">"ਕੁਦਰਤੀ ਰੰਗ ਜਿਵੇਂ ਅੱਖ ਰਾਹੀਂ ਦੇਖੇ ਜਾਂਦੇ ਹਨ"</item>
+ <item msgid="5363960654009010371">"ਡਿਜੀਟਲ ਸਮੱਗਰੀ ਲਈ ਰੰਗ ਅਨੁਕੂਲ ਕੀਤੇ"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"ਕਿਰਿਆਸ਼ੀਲ ਐਪਸ"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"ਅਕਿਰਿਆਸ਼ੀਲ। ਟੌਗਲ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ।"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"ਕਿਰਿਆਸ਼ੀਲ। ਟੌਗਲ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ।"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"ਚੱਲ ਰਹੀਆਂ ਸੇਵਾਵਾਂ"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ਇਸ ਵੇਲੇ ਚੱਲ ਰਹੀਆਂ ਸੇਵਾਵਾਂ ਦੇਖੋ ਅਤੇ ਇਹਨਾਂ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"ਰਾਤ ਮੋਡ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ਅਸਮਰੱਥ ਬਣਾਇਆ"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ਹਮੇਸ਼ਾ ਚਾਲੂ"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ਆਟੋਮੈਟਿਕ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ਫ਼ਾਈਲ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਤਬਦੀਲ ਕਰੋ"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"ਤਬਦੀਲ ਕਰੋ ..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ਫ਼ਾਈਲ ਪਹਿਲਾਂ ਤੋਂ ਇਨਕ੍ਰਿਪਟਡ ਹੈ"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ਫ਼ਾਈਲ ਆਧਾਰਿਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਤਬਦੀਲ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ਡੈਟਾ ਪਾਰਟੀਸ਼ਨ ਨੂੰ ਫ਼ਾਈਲ ਆਧਾਰਿਤ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਤਬਦੀਲ ਕਰੋ\n !!ਚੇਤਾਵਨੀ!! ਇਹ ਤੁਹਾਡੇ ਸਾਰੇ ਡੈਟੇ ਨੂੰ ਸਾਫ਼ ਕਰ ਦੇਵੇਗਾ\n ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਅਲਫਾ ਹੈ, ਅਤੇ ਸ਼ਾਇਦ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਨਾ ਕਰੇ।\n ਜਾਰੀ ਰੱਖਣ ਲਈ \'ਮਿਟਾਓ ਅਤੇ ਤਬਦੀਲ ਕਰੋ...\' ਨੂੰ ਦਬਾਓ।"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ਮਿਟਾਓ ਅਤੇ ਤਬਦੀਲ ਕਰੋ..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"ਤਸਵੀਰ ਰੰਗ ਮੋਡ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ਅਸਮਰੱਥ ਬਣਾਇਆ"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (ਲਾਲ-ਹਰਾ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (ਲਾਲ-ਹਰਾ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (ਨੀਲਾ-ਪੀਲਾ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"ਰੰਗ ਸੰਸ਼ੋਧਨ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਪ੍ਰਯੋਗਾਤਮਿਕ ਹੈ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ ਤੇ ਅਸਰ ਪਾ ਸਕਦੀ ਹੈ।"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> ਦੁਆਰਾ ਓਵਰਰਾਈਡ ਕੀਤਾ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index d2cbe24..8df26cd 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Zablokowana"</item>
<item msgid="1805837518286731242">"Tymczasowo, by uniknąć połączenia o niskiej jakości"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nigdy nie sprawdzaj"</item>
+ <item msgid="6042769699089883931">"Sprawdzaj tylko w przypadku treści chronionych DRM"</item>
+ <item msgid="9174900380056846820">"Zawsze sprawdzaj"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nigdy nie sprawdzaj HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 KB/bufor dziennika"</item>
+ <item msgid="2822309747675758628">"256 KB/bufor dziennika"</item>
+ <item msgid="6699306198357496731">"1 MB/bufor dziennika"</item>
+ <item msgid="5748528643937500349">"4 MB/bufor dziennika"</item>
+ <item msgid="1978629051085111592">"16 MB/bufor dziennika"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animacja wyłączona"</item>
+ <item msgid="6624864048416710414">"Skala animacji 0,5x"</item>
+ <item msgid="2219332261255416635">"Skala animacji 1x"</item>
+ <item msgid="3544428804137048509">"Skala animacji 1,5x"</item>
+ <item msgid="3110710404225974514">"Skala animacji 2x"</item>
+ <item msgid="4402738611528318731">"Skala animacji 5x"</item>
+ <item msgid="6189539267968330656">"Skala animacji 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animacja wyłączona"</item>
+ <item msgid="3375781541913316411">"Skala animacji 0,5x"</item>
+ <item msgid="1991041427801869945">"Skala animacji 1x"</item>
+ <item msgid="4012689927622382874">"Skala animacji 1,5x"</item>
+ <item msgid="3289156759925947169">"Skala animacji 2x"</item>
+ <item msgid="7705857441213621835">"Skala animacji 5x"</item>
+ <item msgid="6660750935954853365">"Skala animacji 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animacja wyłączona"</item>
+ <item msgid="1138649021950863198">"Skala animacji 0,5x"</item>
+ <item msgid="4394388961370833040">"Skala animacji 1x"</item>
+ <item msgid="8125427921655194973">"Skala animacji 1,5x"</item>
+ <item msgid="3334024790739189573">"Skala animacji 2x"</item>
+ <item msgid="3170120558236848008">"Skala animacji 5x"</item>
+ <item msgid="1069584980746680398">"Skala animacji 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Brak"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (tryb bezpieczny)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (tryb bezpieczny)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (tryb bezpieczny)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (tryb bezpieczny)"</item>
+ <item msgid="3547211260846843098">"4K (większa rozdzielczość)"</item>
+ <item msgid="5411365648951414254">"4K (większa rozdzielczość, bezp.)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dwa ekrany)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Brak"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Stos wywołań funkcji glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Wyłączone"</item>
+ <item msgid="675719912558941285">"Rysuj nieprostokątny region przycinania na niebiesko"</item>
+ <item msgid="1064373276095698656">"Wyróżnij testowane polecenia rysowania na zielono"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Wyłączone"</item>
+ <item msgid="2751513398307949636">"Na ekranie w postaci pasków"</item>
+ <item msgid="1851438178120770973">"W adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Wył."</item>
+ <item msgid="7688197031296835369">"Pokaż przerysowywane obszary"</item>
+ <item msgid="2290859360633824369">"Pokaż obszary dostosowane do deuteranomalii"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardowy limit"</item>
+ <item msgid="4071574792028999443">"Brak procesów w tle"</item>
+ <item msgid="4810006996171705398">"Maksymalnie 1 proces"</item>
+ <item msgid="8586370216857360863">"Maksymalnie 2 procesy"</item>
+ <item msgid="836593137872605381">"Maksymalnie 3 procesy"</item>
+ <item msgid="7899496259191969307">"Maksymalnie 4 procesy"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Ładowanie"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet przez USB)"</item>
+ <item msgid="1718924214939774352">"Źródło dźwięku"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 98a171e..2efb5c9 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Wybierz profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Osobiste"</string>
<string name="category_work" msgid="8699184680584175622">"Praca"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opcje programistyczne"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Włącz opcje dla programistów"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Ustaw opcje związane z programowaniem aplikacji."</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Opcje programisty są niedostępne dla tego użytkownika"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Ustawienia VPN są niedostępne dla tego użytkownika"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Ustawienia tetheringu są niedostępne dla tego użytkownika"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Ustawienia nazwy punktu dostępu są niedostępne dla tego użytkownika"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Debugowanie USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Tryb debugowania, gdy podłączone jest USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Odwołaj dostęp do debugowania USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Skrót do zgłoszenia błędu"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Pokaż w menu zasilania przycisk zgłaszania błędu"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Pozostaw ekran włączony"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran nie będzie gaszony podczas ładowania telefonu"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Włącz dziennik snoop Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Przechwyć wszystkie pakiety Bluetooth HCI do pliku"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Zdjęcie blokady OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Zezwalaj na odblokowanie programu rozruchowego"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zezwolić na zdjęcie blokady OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UWAGA: gdy to ustawienie jest włączone, na urządzeniu nie będą działać funkcje ochrony."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Aplikacja do pozorowania lokalizacji"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nie ustawiono aplikacji do pozorowania lokalizacji"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacja do pozorowania lokalizacji: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Sieci"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Wyświetlacz bezprzewodowy"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Szczegółowy dziennik Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Przełączaj na sieć komórkową"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Zawsze szukaj Wi-Fi w roamingu"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Użyj starszego klienta DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dane komórkowe zawsze aktywne"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Zezwalaj/nie zezwalaj na wyszukiwanie sieci Wi-Fi w roamingu w zależności od natężenia ruchu"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Rozmiary bufora Rejestratora"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Wybierz rozmiary Rejestratora/bufor dziennika"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Wybierz konfigurację USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Wybierz konfigurację USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Pozorowanie lokalizacji"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Zezwalaj na pozorowanie lokalizacji"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Inspekcja wyświetlania atrybutu"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Użyj klienta DHCP z Lollipop zamiast nowego klienta DHCP Androida"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Nie wyłączaj transmisji danych przez sieć komórkową, nawet gdy aktywne jest połączenie Wi-Fi (aby szybko przełączać sieci)"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Czy zezwalać na debugowanie USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Debugowanie USB jest przeznaczone wyłącznie do celów programistycznych. Może służyć do kopiowania danych między komputerem a urządzeniem, instalowania aplikacji na urządzeniu bez powiadamiania, a także odczytu danych dziennika."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Odwołać dostęp wszystkich poprzednio autoryzowanych komputerów do debugowania USB?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Zezwolić na ustawienia programistyczne?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Te ustawienia są przeznaczone wyłącznie dla programistów. Ich użycie może spowodować uszkodzenie lub nieprawidłowe działanie urządzenia i zainstalowanych na nim aplikacji."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Zweryfikuj aplikacje przez USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Sprawdź, czy aplikacje zainstalowane przez ADB/ADT nie zachowują się w szkodliwy sposób"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal lokalny"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Włącz terminal, który umożliwia dostęp do powłoki lokalnej"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Sprawdzanie HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Ustaw sprawdzanie HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Debugowanie"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Aplikacja do debugowania"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nie ustawiono aplikacji do debugowania"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikacja do debugowania: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Wybierz aplikację"</string>
+ <string name="no_application" msgid="2813387563129153880">"Brak"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Poczekaj na debugera"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacja do debugowania czeka na przyłączenie debugera"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ekran dotykowy"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Rysowanie"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Sprzętowa akceleracja renderowania"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorowanie"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Tryb ścisły włączony"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Miganie ekranu podczas długich operacji w wątku głównym"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Lokalizacja wskaźnika"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Nakładka pokazująca dane o dotknięciach ekranu"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Pokaż dotknięcia"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Potwierdzenia wizualne po dotknięciu"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Pokaż zmiany powierzchni"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Podświetlaj całe aktualizowane powierzchnie okien"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Pokaż zmiany widoku z GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Podświetlaj elementy w oknach, jeśli są rysowane przez GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Pokaż zmiany warstw sprzęt."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Oznaczaj aktualizowane warstwy sprzętowe na zielono"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debuguj przerysowania GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Wyłącz nakładki HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Zawsze używaj GPU do komponowania ekranu"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Symuluj przestrzeń kolorów"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Włącz śledzenie OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Wyłącz kierowanie dźwiękowe USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Wyłącz auto kierowanie do urządzeń peryferyjnych audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Pokaż granice układu"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Pokaż granice przycięcia, marginesy itd."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Układ od prawej do lewej"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Wymuś wszędzie układ ekranu od prawej do lewej"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Pokaż użycie procesora"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Nakładka na ekranie pokazująca użycie procesora"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Renderowanie na GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Wymuszaj użycie GPU do rysowania 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Wymuś 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Włącz 4x MSAA w aplikacjach OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Debuguj operacje przycinania nieprostokątnego"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil renderowania GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Skala animacji okna"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Skala animacji przejścia"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Skala długości animacji"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Symuluj ekrany dodatkowe"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacje"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Nie zachowuj działań"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Przerwij każde działanie, gdy użytkownik je porzuci"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limit procesów w tle"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Pokaż wszystkie ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Pokaż okno Aplikacja Nie Reaguje dla aplikacji w tle"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Wymuś zezwalanie na aplikacje w pamięci zewn."</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Pozwala na zapis aplikacji w pamięci zewn. niezależnie od wartości w pliku manifestu"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Wymuś zmianę rozmiaru okien aktywności"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Umożliwia zmianę rozmiaru wszystkich okien aktywności w trybie wielu okien niezależnie od ustawień w pliku manifestu."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Hasło kopii zapasowej"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Pełne kopie zapasowe na komputerze nie są obecnie chronione"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Wybierz, aby zmienić lub usunąć hasło pełnych kopii zapasowych na komputerze stacjonarnym."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nowe hasło kopii zapasowej zostało ustawione"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nowe hasła nie pasują do siebie"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nie udało się ustawić hasła kopii zapasowej"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Żywe (domyślnie)"</item>
+ <item msgid="8446070607501413455">"Naturalne"</item>
+ <item msgid="6553408765810699025">"Standardowe"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Bogatsze kolory"</item>
+ <item msgid="8280754435979370728">"Naturalne kolory widziane przez ludzkie oko"</item>
+ <item msgid="5363960654009010371">"Kolory dostosowane do wyświetlania treści cyfrowych"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Nieaktywne aplikacje"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Nieaktywna. Kliknij, by włączyć."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktywna. Kliknij, by wyłączyć."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Uruchomione usługi"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Wyświetl obecnie uruchomione usługi i zarządzaj nimi"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Tryb nocny"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Wyłączone"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Zawsze włączone"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatycznie"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Przekształć na szyfrowanie plików"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Przekształć…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Pliki są już zaszyfrowane"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Przekształcanie na szyfrowanie plików"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Przekształć zwykłą partycję danych w system szyfrowania plików.\n !!Ostrzeżenie!! Spowoduje to wykasowanie wszystkich Twoich danych.\n Ta funkcja jest w wersji alfa i może działać nieprawidłowo.\n Naciśnij „Wyczyść i przekształć…”, by kontynuować."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Wyczyść i przekształć…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Tryb kolorów obrazu"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Użyj sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Wyłączona"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromatyzm"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (czerwony-zielony)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (czerwony-zielony)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (niebieski-żółty)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Korekcja kolorów"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"To jest funkcja eksperymentalna i może wpływać na działanie urządzenia."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Nadpisana przez <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index cea70da..d8be251 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueado"</item>
<item msgid="1805837518286731242">"Temporariamente evitando uma conexão ruim"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nunca verificar"</item>
+ <item msgid="6042769699089883931">"Verificar somente conteúdo DRM"</item>
+ <item msgid="9174900380056846820">"Sempre verificar"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nunca usar a verificação HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K/buffer de log"</item>
+ <item msgid="2822309747675758628">"256K/buffer de log"</item>
+ <item msgid="6699306198357496731">"1M/buffer de log"</item>
+ <item msgid="5748528643937500349">"4M/buffer de log"</item>
+ <item msgid="1978629051085111592">"16M/buffer de log"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animação desligada"</item>
+ <item msgid="6624864048416710414">"Escala da animação 0,5 x"</item>
+ <item msgid="2219332261255416635">"Escala da animação 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animação 1,5 x"</item>
+ <item msgid="3110710404225974514">"Escala da animação 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animação 5 x"</item>
+ <item msgid="6189539267968330656">"Escala de animação 10 x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animação desligada"</item>
+ <item msgid="3375781541913316411">"Escala da animação 0,5 x"</item>
+ <item msgid="1991041427801869945">"Escala da animação 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animação 1,5 x"</item>
+ <item msgid="3289156759925947169">"Escala da animação 2x"</item>
+ <item msgid="7705857441213621835">"Escala de animação 5 x"</item>
+ <item msgid="6660750935954853365">"Escala de animação 10 x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animação desativada"</item>
+ <item msgid="1138649021950863198">"Escala de animação 5x"</item>
+ <item msgid="4394388961370833040">"Escala de animação 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animação 1.5 x"</item>
+ <item msgid="3334024790739189573">"Escala de animação 2x"</item>
+ <item msgid="3170120558236848008">"Escala de animação 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animação 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nenhum"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (seguro)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (seguro)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (seguro)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (seguro)"</item>
+ <item msgid="3547211260846843098">"4K (de alta qualidade)"</item>
+ <item msgid="5411365648951414254">"4K (seguro e de alta qualidade)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (tela dupla)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nenhum"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gráficos)"</item>
+ <item msgid="1340692776955662664">"Pilha de chamadas em glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desativado"</item>
+ <item msgid="675719912558941285">"Desenhar região de corte não retangular em azul"</item>
+ <item msgid="1064373276095698656">"Destacar comandos de desenho testados em verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desativado"</item>
+ <item msgid="2751513398307949636">"Na tela em barras"</item>
+ <item msgid="1851438178120770973">"Em adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desativado"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas de overdraw"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas para daltonismo"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite padrão"</item>
+ <item msgid="4071574792028999443">"Sem processos em segundo plano"</item>
+ <item msgid="4810006996171705398">"No máximo um processo"</item>
+ <item msgid="8586370216857360863">"No máximo dois processos"</item>
+ <item msgid="836593137872605381">"No máximo, três processos"</item>
+ <item msgid="7899496259191969307">"No máximo quatro processos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Carregamento"</item>
+ <item msgid="5220695614993094977">"MTP (protocolo de transferência de mídia)"</item>
+ <item msgid="2086000968159047375">"PTP (protocolo de transferência de imagens)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Fonte de áudio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index 4dd6961..28017a9 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Escolher perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Pessoal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabalho"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opções do desenvolvedor"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Ativar opções do desenvolvedor"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Define as opções para o desenvolvimento do app"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"As opções do desenvolvedor não estão disponíveis para este usuário"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"As configurações de VPN não estão disponíveis para este usuário"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"As configurações de tethering não estão disponíveis para este usuário"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"As configurações do Nome do ponto de acesso não estão disponíveis para este usuário"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuração USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuração quando o USB estiver conectado"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar autorizações de depuração USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atalho para relatório de bugs"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em inatividade enquanto estiver carregando."</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar log de rastreamento Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturar todos os pacotes Bluetooth HCI em um arquivo"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVISO: os recursos de proteção do dispositivo não funcionarão neste dispositivo enquanto esta configuração estiver desativada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Selecionar app de local fictício"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nenhum app de local fictício definido"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App de local fictício: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transf. agressiva de Wi-Fi para celular"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usar cliente DHCP legado"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/proibir verificações de roaming de Wi-Fi com base no volume do tráfego de dados presente na interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Sel. tam. de logger/buffer de log"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecionar configuração USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Permitir locais fictícios"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir locais fictícios"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualiz. insp. atributo"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Usar cliente DHCP do Lollipop, em vez do novo cliente DHCP do Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Permitir a depuração USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revogar o acesso à depuração USB para todos os computadores autorizados?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ativar as configurações de desenvolvimento?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Ativar o app terminal que oferece acesso ao shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Verificação HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Config. a verificação HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuração"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Selecionar app de depuração"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nenhum conjunto de apps de depuração"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"App de depuração: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selecionar app"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nada"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Aguardar depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App depurado espera conexão com debugger antes de ser executado."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Desenho"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderização acelerada por hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Mídia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoramento"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Piscar tela se apps demorarem no processo principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Exibir dados de toque"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostrar toques"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostrar feedback visual para toques"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Mostrar atualiz. de sup."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Piscar superfícies de toda a janela ao atualizar"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Mostrar atualiz. da GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Piscar visualizações em janelas ao desenhar c/ GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Atual. camad. de hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Piscar camadas de hardware em verde ao atualizar"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar overdraw da GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desativar sobreposição HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Sempre usar a GPU para composição de tela"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular espaço de cores"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ativar rastream. OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desat. roteam. áudio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar roteam. autom. para/ perif. de áudio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar limites de layout"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar limites de corte, margens, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. layout (RTL)"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar direção do layout (RTL) p/ todas as local."</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar o uso da CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Sobreposição de tela que mostra o uso da CPU atual"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forçar renderização GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forçar uso da GPU para desenho em 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de corte não retangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Classific. render. GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. de transição"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duração do Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular displays secund."</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Não manter atividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruir todas as atividades quando o usuário sair"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite do proc. 2º plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANRS"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Exibir \"App não responde\" para app em 2º plano"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Qualifica apps p/ gravação em armazenamento externo, independentemente de valores de manifestos"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Torna todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Senha do backup local"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Os backups completos do computador não estão protegidos no momento"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toque para alterar ou remover a senha de backups completos do desktop"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nova senha de backup definida"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"A nova senha e a confirmação não coincidem."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Falha ao definir a senha de backup"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrante (padrão)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Padrão"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Cores aprimoradas"</item>
+ <item msgid="8280754435979370728">"Cores naturais, como vistas pelos olhos"</item>
+ <item msgid="5363960654009010371">"Cores otimizadas para conteúdo digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Apps inativos"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inativo. Toque para alternar."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Ativo. Toque para alternar."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizar e controlar os serviços em execução no momento"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desativada"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativada"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converter para criptografia de arquivos"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converter..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Já criptografado com base em arquivos"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Convertendo para criptografia baseada em arquivos"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converter partição de dados para criptografia baseada em arquivos.\n !!Atenção!! Isso limpará todos os seus dados.\n Esse recurso é alfa e pode não funcionar corretamente.\n Pressione \"Limpar e converter...\" para continuar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Limpar e converter..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de cor da imagem"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Usar sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desativado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromacia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (azul-amarelo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correção de cor"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Este recurso é experimental e pode afetar o desempenho."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Substituído por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index 37bd52a..693430c 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueado"</item>
<item msgid="1805837518286731242">"A evitar temporariamente uma ligação fraca"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nunca verificar"</item>
+ <item msgid="6042769699089883931">"Verificar apenas conteúdo DRM"</item>
+ <item msgid="9174900380056846820">"Verificar sempre"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nunca utilizar a verificação HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Mem. int. 64K p rg."</item>
+ <item msgid="2822309747675758628">"Mem. int. 256K p rg"</item>
+ <item msgid="6699306198357496731">"Mem. int. 1M p reg."</item>
+ <item msgid="5748528643937500349">"Mem. int. 4M p reg."</item>
+ <item msgid="1978629051085111592">"Mem. int. 16M p. rg"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animação desativada"</item>
+ <item msgid="6624864048416710414">"Escala de animação 0,5x"</item>
+ <item msgid="2219332261255416635">"Escala de animação 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animação 1,5x"</item>
+ <item msgid="3110710404225974514">"Escala de animação 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animação 5x"</item>
+ <item msgid="6189539267968330656">"Escala de animação 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animação desativada"</item>
+ <item msgid="3375781541913316411">"Escala de animação 0,5x"</item>
+ <item msgid="1991041427801869945">"Escala de animação 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animação 1,5x"</item>
+ <item msgid="3289156759925947169">"Escala de animação 2x"</item>
+ <item msgid="7705857441213621835">"Escala de animação 5x"</item>
+ <item msgid="6660750935954853365">"Escala de animação 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animação desativada"</item>
+ <item msgid="1138649021950863198">"Escala de animação 0,5x"</item>
+ <item msgid="4394388961370833040">"Escala de animação 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animação 1,5x"</item>
+ <item msgid="3334024790739189573">"Escala de animação 2x"</item>
+ <item msgid="3170120558236848008">"Escala de animação 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animação 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nenhuma"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (seguro)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (seguro)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (seguro)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (seguro)"</item>
+ <item msgid="3547211260846843098">"4K (redimensionado)"</item>
+ <item msgid="5411365648951414254">"4K (redimensionado, seguro)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ecrã duplo)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nada"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Gráficos)"</item>
+ <item msgid="1340692776955662664">"Pilha de chamadas em glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desativado"</item>
+ <item msgid="675719912558941285">"Desenhar região de clipe não retangular a azul"</item>
+ <item msgid="1064373276095698656">"Realçar comandos de desenho testados a verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desativado"</item>
+ <item msgid="2751513398307949636">"No ecrã como barras"</item>
+ <item msgid="1851438178120770973">"Em adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desativado"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas de sobreposição"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas para Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite padrão"</item>
+ <item msgid="4071574792028999443">"Sem processos em segundo plano"</item>
+ <item msgid="4810006996171705398">"No máximo, 1 processo"</item>
+ <item msgid="8586370216857360863">"No máximo, 2 processos"</item>
+ <item msgid="836593137872605381">"No máximo, 3 processos"</item>
+ <item msgid="7899496259191969307">"No máximo, 4 processos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Carregamento"</item>
+ <item msgid="5220695614993094977">"MTP (Protocolo de transferência de multimédia)"</item>
+ <item msgid="2086000968159047375">"PTP (Protocolo de transferência de imagens)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Fonte de áudio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index 1a54edb..2a8402e 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Escolher perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Pessoal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabalho"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opções de programador"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Ativar as opções de programador"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Definir opções de desenvolvimento da aplicação"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"As opções de programador não estão disponíveis para este utilizador"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"As definições de VPN não estão disponíveis para este utilizador"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"As definições de ligação via telemóvel não estão disponíveis para este utilizador"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"As definições de Nome do Ponto de Acesso não estão disponíveis para este utilizador"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuração USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuração com USB ligado"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar autorizações de depur. USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atalho para relatório de erros"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar um botão no menu ligar/desligar para criar um relatório de erro"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Manter ativo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"O ecrã nunca entrará em suspensão durante o carregamento"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registo de monit. Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturar todos os pacotes Bluetooth HCI num ficheiro"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir o desbloqueio do carregador de arranque"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Pretende permitir o desbloqueio de OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVISO: as funcionalidades de proteção do dispositivo não funcionam neste dispositivo enquanto esta definição estiver ativada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Selecionar aplicação de localização fictícia"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplicação de localização fictícia não definida"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicação de localização fictícia: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de display sem fios"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar o registo verboso de Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transm. agressiva de Wi-Fi p/ rede móvel"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Permitir sempre a deteção de Wi-Fi em roaming"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Utilizar cliente DHCP antigo"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dados móveis sempre ativados"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/impedir a deteção de Wi-Fi em roaming com base na quantidade de tráfego de dados presente na interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos da memória intermédia do registo"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Selec. tam. reg. p/ mem. int. reg."</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecionar configuração USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Permitir locais fictícios"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir locais fictícios"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar a inspeção do atributo de visualização"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Utilizar o cliente DHCP do Lollipop em vez do novo cliente DHCP do Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Manter sempre os dados móveis ativados, mesmo quando o Wi‑Fi estiver ativado (para mudança de rede rápida)"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Permitir depuração USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"A depuração USB é utilizada apenas para fins de programação. Utilize-a para copiar dados entre o computador e o aparelho, instalar aplicações no aparelho sem notificação e ler dados de registo."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revogar acesso à depuração USB de todos os computadores anteriormente autorizados?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Permitir definições de programação?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Estas definições destinam-se apenas a programação. Podem fazer com que o seu aparelho e as aplicações nele existentes falhem ou funcionem mal."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar aplicações de USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar as aplicações instaladas via ADB/ADT para detetar comportamento perigoso."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Ativar aplicação terminal que oferece acesso local à shell"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Verificação HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Definir o comportamento da verificação HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuração"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Selecionar a aplicação a depurar"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nenhuma aplicação a depurar definida"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"A depurar aplicação: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selecionar aplicação"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nenhuma"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Aguarde pelo depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"A aplicação depurada aguarda a anexação do depurador antes da execução"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Introdução"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Desenho"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Conversão acelerada de hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimédia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorização"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Piscar ecrã se aplic. fazem oper. prolong. no tópico princ."</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Apresentar dados atuais de toque"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Apresentar toques"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Apresentar feedback visual para toques"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Atualiz. de superfície"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Destacar a superfície da janela ao atualizar"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Most.atualiz. visual. GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Dest. visualiz. em janelas quando desenh. c/ GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Mostrar atual. cam. hard."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Camadas de hard. flash verdes quando estão atuali."</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar sobreposição GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desativ. sobreposições HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizar sempre GPU para a composição do ecrã"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular espaço de cor"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ativar vestígios OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desativ. encam. áudio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar encam. auto. para periféricos áudio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar limit. do esquema"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Apresentar limites de clipes, margens, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. do esq. RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar dir. do esq. do ecrã p. RTL tds os locais"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar utilização da CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Sobrep. de ecrã que mostra a utiliz. atual da CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forçar composição GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forçar a utilização de GPU para desenho 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar o 4x MSAA em aplicações OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de clipe não retangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Conversão GPU do perfil"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala de anim. de trans."</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Esc. de duração do anim."</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular apresentações secundárias"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicações"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Não manter atividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruir atividades assim que o utilizador sair"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite proc. em 2º plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Mostrar erro \"Aplic. não Resp.\" p/ aplic. 2º plano"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar perm. de aplicações no armazenamento ext."</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Qualquer aplic. pode ser gravada no arm. ext., independ. dos valores do manif."</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar as atividades a serem redimensionáveis"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Torna todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Palavra-passe cópia do comp."</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"As cópias de segurança completas no ambiente de trabalho não estão atualmente protegidas"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toque para alterar ou remover a palavra-passe para cópias de segurança completas no ambiente de trabalho"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nova palavra-passe da cópia de segurança definida"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"A nova palavra-passe e a confirmação não coincidem"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Falha na definição da palavra-passe da cópia de segurança"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrante (predefinição)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Padrão"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Cores melhoradas"</item>
+ <item msgid="8280754435979370728">"Cores naturais e realistas"</item>
+ <item msgid="5363960654009010371">"Cores otimizadas para conteúdos digitais"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicações inativas"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inativa. Toque para ativar."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Ativa. Toque para desativar."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver e controlar os serviços actualmente em execução"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desativado"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativado"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converter para a encriptação de ficheiros"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converter..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Os ficheiros já estão encriptados"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Converter para a encriptação baseada em ficheiros"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converter a partição de dados para a encriptação baseada em ficheiros.\n Aviso! Esta ação eliminará todos os seus dados.\n Esta funcionalidade está na fase alfa e pode não funcionar corretamente.\n Prima \"Limpar e converter...\" para continuar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Limpar e converter..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de cor da imagem"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Utilizar sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desativado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromacia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (azul-amarelo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correção da cor"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Esta funcionalidade é experimental e pode afetar o desempenho."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Substituído por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index cea70da..d8be251 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bloqueado"</item>
<item msgid="1805837518286731242">"Temporariamente evitando uma conexão ruim"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nunca verificar"</item>
+ <item msgid="6042769699089883931">"Verificar somente conteúdo DRM"</item>
+ <item msgid="9174900380056846820">"Sempre verificar"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nunca usar a verificação HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K/buffer de log"</item>
+ <item msgid="2822309747675758628">"256K/buffer de log"</item>
+ <item msgid="6699306198357496731">"1M/buffer de log"</item>
+ <item msgid="5748528643937500349">"4M/buffer de log"</item>
+ <item msgid="1978629051085111592">"16M/buffer de log"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animação desligada"</item>
+ <item msgid="6624864048416710414">"Escala da animação 0,5 x"</item>
+ <item msgid="2219332261255416635">"Escala da animação 1x"</item>
+ <item msgid="3544428804137048509">"Escala de animação 1,5 x"</item>
+ <item msgid="3110710404225974514">"Escala da animação 2x"</item>
+ <item msgid="4402738611528318731">"Escala de animação 5 x"</item>
+ <item msgid="6189539267968330656">"Escala de animação 10 x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animação desligada"</item>
+ <item msgid="3375781541913316411">"Escala da animação 0,5 x"</item>
+ <item msgid="1991041427801869945">"Escala da animação 1x"</item>
+ <item msgid="4012689927622382874">"Escala de animação 1,5 x"</item>
+ <item msgid="3289156759925947169">"Escala da animação 2x"</item>
+ <item msgid="7705857441213621835">"Escala de animação 5 x"</item>
+ <item msgid="6660750935954853365">"Escala de animação 10 x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animação desativada"</item>
+ <item msgid="1138649021950863198">"Escala de animação 5x"</item>
+ <item msgid="4394388961370833040">"Escala de animação 1x"</item>
+ <item msgid="8125427921655194973">"Escala de animação 1.5 x"</item>
+ <item msgid="3334024790739189573">"Escala de animação 2x"</item>
+ <item msgid="3170120558236848008">"Escala de animação 5x"</item>
+ <item msgid="1069584980746680398">"Escala de animação 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Nenhum"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (seguro)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (seguro)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (seguro)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (seguro)"</item>
+ <item msgid="3547211260846843098">"4K (de alta qualidade)"</item>
+ <item msgid="5411365648951414254">"4K (seguro e de alta qualidade)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (tela dupla)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Nenhum"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (gráficos)"</item>
+ <item msgid="1340692776955662664">"Pilha de chamadas em glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Desativado"</item>
+ <item msgid="675719912558941285">"Desenhar região de corte não retangular em azul"</item>
+ <item msgid="1064373276095698656">"Destacar comandos de desenho testados em verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Desativado"</item>
+ <item msgid="2751513398307949636">"Na tela em barras"</item>
+ <item msgid="1851438178120770973">"Em adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Desativado"</item>
+ <item msgid="7688197031296835369">"Mostrar áreas de overdraw"</item>
+ <item msgid="2290859360633824369">"Mostrar áreas para daltonismo"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limite padrão"</item>
+ <item msgid="4071574792028999443">"Sem processos em segundo plano"</item>
+ <item msgid="4810006996171705398">"No máximo um processo"</item>
+ <item msgid="8586370216857360863">"No máximo dois processos"</item>
+ <item msgid="836593137872605381">"No máximo, três processos"</item>
+ <item msgid="7899496259191969307">"No máximo quatro processos"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Carregamento"</item>
+ <item msgid="5220695614993094977">"MTP (protocolo de transferência de mídia)"</item>
+ <item msgid="2086000968159047375">"PTP (protocolo de transferência de imagens)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Fonte de áudio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index 4dd6961..28017a9 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Escolher perfil"</string>
<string name="category_personal" msgid="1299663247844969448">"Pessoal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabalho"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opções do desenvolvedor"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Ativar opções do desenvolvedor"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Define as opções para o desenvolvimento do app"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"As opções do desenvolvedor não estão disponíveis para este usuário"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"As configurações de VPN não estão disponíveis para este usuário"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"As configurações de tethering não estão disponíveis para este usuário"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"As configurações do Nome do ponto de acesso não estão disponíveis para este usuário"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depuração USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Modo de depuração quando o USB estiver conectado"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revogar autorizações de depuração USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Atalho para relatório de bugs"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Mostrar um botão para gerar relatórios de bugs no menu do botão liga/desliga"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em inatividade enquanto estiver carregando."</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar log de rastreamento Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Capturar todos os pacotes Bluetooth HCI em um arquivo"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVISO: os recursos de proteção do dispositivo não funcionarão neste dispositivo enquanto esta configuração estiver desativada."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Selecionar app de local fictício"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nenhum app de local fictício definido"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App de local fictício: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Transf. agressiva de Wi-Fi para celular"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Sempre permitir verif. de roaming de Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Usar cliente DHCP legado"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dados da rede celular sempre ativos"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permitir/proibir verificações de roaming de Wi-Fi com base no volume do tráfego de dados presente na interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Sel. tam. de logger/buffer de log"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selecionar configuração USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selecionar configuração USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Permitir locais fictícios"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permitir locais fictícios"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Ativar visualiz. insp. atributo"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Usar cliente DHCP do Lollipop, em vez do novo cliente DHCP do Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Sempre manter dados móveis ativos, mesmo quando o Wi-Fi estiver ativado (para troca rápida de rede)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Permitir a depuração USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"A depuração USB serve apenas para fins de desenvolvimento. Use-a para copiar dados entre o computador e o dispositivo, instalar apps no seu aparelho sem notificação e ler dados de registro."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revogar o acesso à depuração USB para todos os computadores autorizados?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ativar as configurações de desenvolvimento?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Essas configurações são destinadas apenas para o uso de desenvolvedores. Elas podem causar a desativação ou mau funcionamento do dispositivo e dos apps contidos nele."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificar apps por USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificar comportamento nocivo em apps instalados via ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminal local"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Ativar o app terminal que oferece acesso ao shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Verificação HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Config. a verificação HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depuração"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Selecionar app de depuração"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nenhum conjunto de apps de depuração"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"App de depuração: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selecionar app"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nada"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Aguardar depurador"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"App depurado espera conexão com debugger antes de ser executado."</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Entrada"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Desenho"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Renderização acelerada por hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Mídia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoramento"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modo rigoroso ativado"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Piscar tela se apps demorarem no processo principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Localização do ponteiro"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Exibir dados de toque"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Mostrar toques"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Mostrar feedback visual para toques"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Mostrar atualiz. de sup."</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Piscar superfícies de toda a janela ao atualizar"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Mostrar atualiz. da GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Piscar visualizações em janelas ao desenhar c/ GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Atual. camad. de hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Piscar camadas de hardware em verde ao atualizar"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depurar overdraw da GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Desativar sobreposição HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Sempre usar a GPU para composição de tela"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simular espaço de cores"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Ativar rastream. OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Desat. roteam. áudio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Desativar roteam. autom. para/ perif. de áudio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Mostrar limites de layout"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Mostrar limites de corte, margens, etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Forçar dir. layout (RTL)"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Forçar direção do layout (RTL) p/ todas as local."</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Mostrar o uso da CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Sobreposição de tela que mostra o uso da CPU atual"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forçar renderização GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forçar uso da GPU para desenho em 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forçar 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Ativar 4x MSAA em apps OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Depurar operações de corte não retangulares"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Classific. render. GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Escala de anim. da janela"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Escala anim. de transição"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Escala de duração do Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simular displays secund."</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Não manter atividades"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destruir todas as atividades quando o usuário sair"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limite do proc. 2º plano"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Mostrar todos os ANRS"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Exibir \"App não responde\" para app em 2º plano"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forçar permissão de apps em armazenamento externo"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Qualifica apps p/ gravação em armazenamento externo, independentemente de valores de manifestos"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forçar atividades a serem redimensionáveis"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Torna todas as atividades redimensionáveis para várias janelas, independentemente dos valores do manifesto."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Senha do backup local"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Os backups completos do computador não estão protegidos no momento"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Toque para alterar ou remover a senha de backups completos do desktop"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nova senha de backup definida"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"A nova senha e a confirmação não coincidem."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Falha ao definir a senha de backup"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrante (padrão)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Padrão"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Cores aprimoradas"</item>
+ <item msgid="8280754435979370728">"Cores naturais, como vistas pelos olhos"</item>
+ <item msgid="5363960654009010371">"Cores otimizadas para conteúdo digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Apps inativos"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inativo. Toque para alternar."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Ativo. Toque para alternar."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizar e controlar os serviços em execução no momento"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Desativada"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativada"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Converter para criptografia de arquivos"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Converter..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Já criptografado com base em arquivos"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Convertendo para criptografia baseada em arquivos"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Converter partição de dados para criptografia baseada em arquivos.\n !!Atenção!! Isso limpará todos os seus dados.\n Esse recurso é alfa e pode não funcionar corretamente.\n Pressione \"Limpar e converter...\" para continuar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Limpar e converter..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modo de cor da imagem"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Usar sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Desativado"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monocromacia"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalia (vermelho-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalia (azul-amarelo)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Correção de cor"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Este recurso é experimental e pode afetar o desempenho."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Substituído por <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index c4b3b34..f75154f 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blocat"</item>
<item msgid="1805837518286731242">"Evitarea temporară a conexiunii slabe"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nu verifica niciodată"</item>
+ <item msgid="6042769699089883931">"Verifică doar pentru conținut DRM"</item>
+ <item msgid="9174900380056846820">"Verifică întotdeauna"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nu utiliza niciodată verificarea HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K/tampon jurnal"</item>
+ <item msgid="2822309747675758628">"256K/tampon jurnal"</item>
+ <item msgid="6699306198357496731">"1M/tampon jurnal"</item>
+ <item msgid="5748528643937500349">"4M/tampon jurnal"</item>
+ <item msgid="1978629051085111592">"16M/tampon jurnal"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animație dezactivată"</item>
+ <item msgid="6624864048416710414">"Animație la scara 0,5x"</item>
+ <item msgid="2219332261255416635">"Animație la scara 1x"</item>
+ <item msgid="3544428804137048509">"Animație la scara 1,5x"</item>
+ <item msgid="3110710404225974514">"Animație la scara 2x"</item>
+ <item msgid="4402738611528318731">"Animaţie la scara 5x"</item>
+ <item msgid="6189539267968330656">"Animație la scara 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animație dezactivată"</item>
+ <item msgid="3375781541913316411">"Animație la scara 0,5x"</item>
+ <item msgid="1991041427801869945">"Animație la scara 1x"</item>
+ <item msgid="4012689927622382874">"Animație la scara 1,5x"</item>
+ <item msgid="3289156759925947169">"Animație la scara 2x"</item>
+ <item msgid="7705857441213621835">"Animație la scara 5x"</item>
+ <item msgid="6660750935954853365">"Animație la scara 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animaţie dezactivată"</item>
+ <item msgid="1138649021950863198">"Animaţie la scara 0,5x"</item>
+ <item msgid="4394388961370833040">"Animaţie la scara 1x"</item>
+ <item msgid="8125427921655194973">"Animaţie la scara 1,5x"</item>
+ <item msgid="3334024790739189573">"Animaţie la scara 2x"</item>
+ <item msgid="3170120558236848008">"Animaţie la scara 5x"</item>
+ <item msgid="1069584980746680398">"Animaţie la scara 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Niciuna"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (securizat)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (securizat)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (securizat)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (securizat)"</item>
+ <item msgid="3547211260846843098">"4K (îmbunătățit)"</item>
+ <item msgid="5411365648951414254">"4K (îmbunătățit, securizat)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ecran dual)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Niciuna"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (imagini)"</item>
+ <item msgid="1340692776955662664">"Apelaţi stiva pentru glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Dezactivat"</item>
+ <item msgid="675719912558941285">"Zonă decupare non-rectangulară albastră"</item>
+ <item msgid="1064373276095698656">"Controale de desenare testate, cu verde"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Dezactivat"</item>
+ <item msgid="2751513398307949636">"Pe ecran ca bare"</item>
+ <item msgid="1851438178120770973">"În adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Dezactivată"</item>
+ <item msgid="7688197031296835369">"Afișați zonele cu suprapunere"</item>
+ <item msgid="2290859360633824369">"Afișați zonele de deuteranomalie"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Limita standard"</item>
+ <item msgid="4071574792028999443">"Nu există procese de fundal"</item>
+ <item msgid="4810006996171705398">"Cel mult 1 proces"</item>
+ <item msgid="8586370216857360863">"Cel mult 2 procese"</item>
+ <item msgid="836593137872605381">"Cel mult 3 procese"</item>
+ <item msgid="7899496259191969307">"Cel mult 4 procese"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Încărcare"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Sursă audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index 262fe97..c45ede5 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Alegeți un profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Serviciu"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opțiuni dezvoltator"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Activați opțiunile pentru dezvoltatori"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Setați opțiuni pentru dezvoltarea aplicației"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Opțiunile de dezvoltator nu sunt disponibile pentru acest utilizator"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Setările VPN nu sunt disponibile pentru acest utilizator"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Setările pentru tethering nu sunt disponibile pentru acest utilizator"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Setările pentru „Nume puncte de acces” nu sunt disponibile pentru acest utilizator"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Depanare USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Mod de depanare când este conectat USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Revoc autorizații depanare USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Comandă rapidă pentru raportul de erori"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Afișați un buton în meniul de pornire pentru a realiza un raport de erori"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Activ permanent"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ecranul nu va fi inactiv pe durata încărcării"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activați jurnalul de examinare HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Înregistrați toate pachetele HCI Bluetooth într-un fișier"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Deblocarea OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permiteți deblocarea bootloaderului"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permiteți deblocarea OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"AVERTISMENT: funcțiile de protecție a dispozitivului nu vor funcționa pe acest dispozitiv cât timp setarea este activată."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Selectați aplicația pentru locația de testare"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nicio aplicație setată pentru locația de testare"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplicația pentru locația de testare: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Conectare la rețele"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certificare Ecran wireless"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Înregistrare prin Wi-Fi de volume mari de date"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Înlocuire Wi-Fi cu mobil agresivă"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Se permite întotdeauna scanarea traficului Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Folosiți vechiul client DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Conexiunea de date mobile este întotdeauna activată"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Permiteți/Nu permiteți scanarea traficului Wi-Fi în funcție de traficul de date din interfață"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Dimensiunile tamponului jurnalului"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Dimensiuni jurnal / tampon jurnal"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Selectați configurația USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Selectați configurația USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Permiteți locațiile fictive"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Permiteți locaţiile fictive"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Activați inspectarea atributelor de vizualizare"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Folosiți clientul DHCP din Lollipop în locul noului client Android DHCP."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Păstrați întotdeauna conexiunea de date mobile activată, chiar și atunci când funcția Wi‑Fi este activată (pentru comutarea rapidă între rețele)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Permiteți depanarea USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Depanarea USB are exclusiv scopuri de dezvoltare. Utilizați-o pentru a copia date de pe computer pe dispozitiv, pentru a instala aplicații pe dispozitiv fără notificare și pentru a citi datele din jurnale."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revocați accesul la remedierea erorilor prin USB de pe toate computerele pe care le-ați autorizat anterior?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Permiteţi setările pentru dezvoltare?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Aceste setări sunt destinate exclusiv utilizării pentru dezvoltare. Din cauza lor, este posibil ca dispozitivul dvs. și aplicațiile de pe acesta să nu mai funcţioneze sau să funcţioneze necorespunzător."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verificați aplicațiile prin USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Verificaţi aplicațiile instalate utilizând ADB/ADT, pentru a detecta un comportament dăunător."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Aplicație terminal locală"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Activați aplicația terminal care oferă acces la shell local"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Verificare HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Configurați verific. HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Depanare"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Selectați aplicația de depanare"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nu aţi setat o aplicație de depanare"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplicaţie de depanare: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Selectaţi o aplicație"</string>
+ <string name="no_application" msgid="2813387563129153880">"Niciuna"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Aşteptaţi depanatorul"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Înaintea executării, aplicația aşteaptă atașarea depanatorului"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Intrare"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Desen"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Redare accelerată hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorizare"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modul Strict activat"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Iluminare intermitentă la operații lungi pe firul principal"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Locația indicatorului"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Suprapunere care indică date curente pt. atingeri"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Afișați atingerile"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Afișați feedback vizual pentru atingeri"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Actualizări suprafețe"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Iluminare suprafețe toată fereastra la actualizare"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Afiș. actualiz. ecran GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Iluminare ecrane din ferestre la desenarea cu GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Actualiz. strat. hardware"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Straturile hardware clipesc verde la actualizare"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Depanați suprapunerea"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Dezactivați suprapun. HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Utilizaţi mereu GPU pentru compunerea ecranului"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulați spațiu culoare"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Monitorizări OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Dezactivați rutarea audio USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Dezact. rutarea automată către perif. audio USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Afișați limite aspect"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Afișați limitele clipului, marginile etc."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Direcție aspect dreapta - stânga"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Direcție obligatorie aspect ecran dreapta - stânga"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Afișați utiliz. procesor"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Suprapunere care indică utilizare curentă procesor"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Forțați redarea cu GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Forțați utilizarea GPU pentru desen în 2D"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Forțați MSAA 4x"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Activați MSAA 4x în aplicațiile OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Remediați decupări nerectangulare"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil redare cu GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Scară animație fereastră"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Scară tranziție animații"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Scară durată Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulați afișaje secundare"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplicaţii"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Nu păstrați activitățile"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Elimină activitățile imediat ce utilizatorul le închide"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limită procese fundal"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Afișați toate elem. ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Aplicații din fundal: afișați Aplicația nu răspunde"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Forțați accesul aplicațiilor la stocarea externă"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Face orice aplicație eligibilă să fie scrisă în stocarea externă, indiferent de valorile manifestului"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Forțați redimensionarea activităților"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Permite redimensionarea tuturor activităților pentru modul cu ferestre multiple, indiferent de valorile manifestului."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Parolă copie rez. desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"În prezent, copiile de rezervă complete pe desktop nu sunt protejate"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Atingeţi pentru a modifica sau pentru a elimina parola pentru copiile de rezervă complete pe desktop"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"A fost setată o parolă de rezervă nouă"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Parola nouă și confirmarea acesteia nu se potrivesc."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Setarea parolei de rezervă a eșuat"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (prestabilit)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Culori îmbunătățite"</item>
+ <item msgid="8280754435979370728">"Culori naturale, așa cum le percepe ochiul"</item>
+ <item msgid="5363960654009010371">"Culori optimizate pentru conținutul digital"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplicații inactive"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inactivă. Atingeți pentru a comuta."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Activă. Atingeți pentru a comuta."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Servicii în curs de funcționare"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Vedeți și controlați serviciile care funcționează în prezent"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modul Noapte"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Dezactivată"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Activată permanent"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automat"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Faceți conversia la criptarea bazată pe sistemul de fișiere"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convertiți…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Criptarea bazată pe sistemul de fișiere este finalizată"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Se face conversia la criptarea bazată pe sistemul de fișiere"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Faceți conversia partiției de date la criptarea bazată pe sistemul de fișiere. \n !!Avertisment!! Astfel, toate datele dvs. vor fi șterse.\n Aceasta este o funcție în versiune alpha și este posibil să nu funcționeze corect.\n Apăsați pe „Ștergeți și convertiți…” pentru a continua."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Ștergeți și convertiți…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modul de culori pentru imagini"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Folosiți sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Dezactivat"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Daltonism"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomalie (roșu-verde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalie (roșu-verde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalie (albastru-galben)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Corecția culorii"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Această funcție este experimentală și poate afecta performanțele."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Valoare înlocuită de <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index 5f50648..c8c789e 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Заблокировано"</item>
<item msgid="1805837518286731242">"Временно избегать плохого соединения"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Никогда не проверять"</item>
+ <item msgid="6042769699089883931">"Проверять только DRM-контент"</item>
+ <item msgid="9174900380056846820">"Всегда проверять"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Не использовать проверку HDCP"</item>
+ <item msgid="3878793616631049349">"Использовать проверку HDCP только для DRM-контента"</item>
+ <item msgid="45075631231212732">"Всегда использовать проверку HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 КБ"</item>
+ <item msgid="505611754508988476">"256 КБ"</item>
+ <item msgid="6361286924268716397">"1 МБ"</item>
+ <item msgid="6405203239560695266">"4 МБ"</item>
+ <item msgid="3025431211013424097">"16 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 КБ"</item>
+ <item msgid="3534782711045262344">"256 КБ"</item>
+ <item msgid="8085867209202153403">"1 МБ"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Буфер: макс. 64 КБ"</item>
+ <item msgid="2822309747675758628">"Буфер: макс. 256 КБ"</item>
+ <item msgid="6699306198357496731">"Буфер: макс. 1 МБ"</item>
+ <item msgid="5748528643937500349">"Буфер: макс. 4 МБ"</item>
+ <item msgid="1978629051085111592">"Буфер: макс. 16 МБ"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Без анимации"</item>
+ <item msgid="6624864048416710414">"Анимация 0,5x"</item>
+ <item msgid="2219332261255416635">"Анимация 1x"</item>
+ <item msgid="3544428804137048509">"Анимация 1,5x"</item>
+ <item msgid="3110710404225974514">"Анимация 2x"</item>
+ <item msgid="4402738611528318731">"Анимация 5x"</item>
+ <item msgid="6189539267968330656">"Анимация 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Без анимации"</item>
+ <item msgid="3375781541913316411">"Анимация 0,5x"</item>
+ <item msgid="1991041427801869945">"Анимация 1x"</item>
+ <item msgid="4012689927622382874">"Анимация 1,5x"</item>
+ <item msgid="3289156759925947169">"Анимация 2x"</item>
+ <item msgid="7705857441213621835">"Анимация 5x"</item>
+ <item msgid="6660750935954853365">"Анимация 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Без анимации"</item>
+ <item msgid="1138649021950863198">"Анимация 0,5x"</item>
+ <item msgid="4394388961370833040">"Анимация 1x"</item>
+ <item msgid="8125427921655194973">"Анимация 1,5x"</item>
+ <item msgid="3334024790739189573">"Анимация 2x"</item>
+ <item msgid="3170120558236848008">"Анимация 5x"</item>
+ <item msgid="1069584980746680398">"Анимация 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Нет"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (защита)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (защита)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (защита)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (защита)"</item>
+ <item msgid="3547211260846843098">"4K (масштабирование)"</item>
+ <item msgid="5411365648951414254">"4K (масштабирование, защита)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (два экрана)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Нет"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (графика)"</item>
+ <item msgid="1340692776955662664">"Список вызовов в glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Откл."</item>
+ <item msgid="675719912558941285">"Непрямоугольное усечение синим"</item>
+ <item msgid="1064373276095698656">"Тест. команды рисования зеленым"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Отключить"</item>
+ <item msgid="2751513398307949636">"На экране в виде полос"</item>
+ <item msgid="1851438178120770973">"В adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ВЫКЛ"</item>
+ <item msgid="7688197031296835369">"Показывать области наложения"</item>
+ <item msgid="2290859360633824369">"Выделять области определенного цвета"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандартное ограничение"</item>
+ <item msgid="4071574792028999443">"Без фоновых процессов"</item>
+ <item msgid="4810006996171705398">"Не более одного процесса"</item>
+ <item msgid="8586370216857360863">"Не более 2 процессов"</item>
+ <item msgid="836593137872605381">"Не более 3 процессов"</item>
+ <item msgid="7899496259191969307">"Не более 4 процессов"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Зарядка"</item>
+ <item msgid="5220695614993094977">"MTP"</item>
+ <item msgid="2086000968159047375">"PTP"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Источник аудио"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index 31b70ad..3c30b26 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Выберите профиль"</string>
<string name="category_personal" msgid="1299663247844969448">"Личные данные"</string>
<string name="category_work" msgid="8699184680584175622">"Работа"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Для разработчиков"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Включить параметры для разработчиков"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Настройка параметров для разработчиков"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Этому пользователю недоступны возможности разработчика"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Этот пользователь не может изменять настройки VPN"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Этот пользователь не может изменять настройки режима модема"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Этот пользователь не может изменять настройки точки доступа"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Отладка по USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Включить режим отладки при подключении к компьютеру по USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Запретить доступ для USB-отладки"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Отчет об ошибке"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Показывать в меню кнопку для отправки отчета об ошибке"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Не выключать экран"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Во время зарядки экран будет всегда включен"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Включить журнал трансляции операций HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Сохранять все пакеты HCI Bluetooth в файле"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Заводская разблокировка"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешить разблокировку загрузчика ОС"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Разрешить заводскую разблокировку?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ВНИМАНИЕ! Функции защиты не будут работать на устройстве, пока включен этот параметр."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Выбрать приложение для фиктивных местоположений"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Нет приложения для фиктивных местоположений"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Приложение для создания фиктивных местоположений: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Сети"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Серт. беспроводн. мониторов"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Подробный журнал Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Переключаться на мобильную сеть"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Всегда включать поиск сетей Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Использовать устаревший DHCP-клиент"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Не отключать передачу данных"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Включать или отключать поиск сетей Wi-Fi во время передачи данных в зависимости от объема трафика"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Размер буфера журнала"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Выберите размер буфера журнала"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Конфигурация USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Конфигурация USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Фиктивные местоположения"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Разрешить использование фиктивных местоположений"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Включить проверку атрибутов"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Использовать DHCP-клиент для Android 5.0, а не для новой версии."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Не отключать передачу данных по мобильной сети даже при активном Wi-Fi-подключении (для быстрого переключения между сетями)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Разрешить отладку USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Отладка по USB – это режим, который позволяет использовать ваше устройство как внешний накопитель: перемещать файлы (с компьютера и на компьютер), напрямую устанавливать приложения, а также просматривать системные журналы."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Запретить доступ к USB-отладке для всех компьютеров, которым он был разрешен?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Изменение настроек"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Только для разработчиков. Изменение этих настроек может привести к сбоям или неправильной работе устройства и приложений."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Установка через USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Проверка безопасности приложений, устанавливаемых через ADB/ADT"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локальный терминальный доступ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Разрешить терминальный доступ к локальной оболочке"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Проверка HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Порядок проверки HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Отладка"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Выбрать приложение для отладки"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Приложение для отладки не задано"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Отладка приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="select_application" msgid="5156029161289091703">"Выбор приложения"</string>
+ <string name="no_application" msgid="2813387563129153880">"Нет"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Подождите, пока подключится отладчик"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Приложение ожидает подключения отладчика"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ввод текста"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Рисование"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Аппаратное ускорение визуализации"</string>
+ <string name="media_category" msgid="4388305075496848353">"Мультимедиа"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Мониторинг"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Включен строгий режим"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Подсвечивать экран во время длительных операций"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Отображать касания"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Визуализировать на экране нажатия и жесты"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Показывать нажатия"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Отображать точки в местах нажатия на экран"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Показ. обнов. поверхности"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Подсвечивать окна полностью при их обновлении"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Показывать обнов. экрана"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Подсвечивать области экрана при отрисовке с GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Показ. аппаратные обновл."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Выделять аппаратные уровни зеленым при обновлении"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Отладка наложения"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Откл. аппарат. наложения"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Всегда использовать GPU при компоновке экрана"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Имитировать аномалию"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Вкл. трассировку OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Откл. передачу аудио (USB)"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Откл. автом. маршрутизацию на внеш. USB-устройства"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Показывать границы элементов"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Показывать границы клипа, поля и т. д."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Написание справа налево"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Включить написание справа налево для всех языков"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Показывать загрузку ЦП"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Экран, показывающий текущую загрузку ЦП"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU-ускорение"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Всегда использовать GPU для двухмерного рисования"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Включить 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Включить 4x MSAA в приложениях OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Отладить операции непрямоугольного усечения"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Запись времени работы GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Анимация окон"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Анимация переходов"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Длительность анимации"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Эмуляция доп. экранов"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Приложения"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Не сохранять действия"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Удалять сводку действий после их завершения"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Лимит фоновых процессов"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Все ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Уведомлять о том, что приложение не отвечает"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Разрешить сохранение на внешние накопители"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Разрешает сохранение приложений на внешние накопители независимо от значения манифеста"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Изменение размера в многооконном режиме"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Позволяет менять размер в многооконном режиме (независимо от значений манифеста)"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Пароль для резервного копирования"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Полные резервные копии в настоящее время не защищены"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Изменить или удалить пароль для резервного копирования"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Новый пароль для резервной копии установлен"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Пароли не совпадают"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Не удалось установить пароль для резервной копии"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Насыщенный (по умолчанию)"</item>
+ <item msgid="8446070607501413455">"Естественный"</item>
+ <item msgid="6553408765810699025">"Стандартный"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Улучшенные цвета"</item>
+ <item msgid="8280754435979370728">"Натуральные цвета, привычные глазу"</item>
+ <item msgid="5363960654009010371">"Цвета, оптимизированные для цифрового контента"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивные приложения"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Неактивно. Нажмите для переключения."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Активно. Нажмите для переключения."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Работающие приложения"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Просмотр и управление работающими приложениями"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Ночной режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Отключено"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Всегда включено"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматическое переключение"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Переход к шифрованию файлов"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Перейти…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Шифрование файлов уже включено"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Переход к шифрованию отдельных файлов"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Перейти к шифрованию отдельных файлов.\nВнимание! Все ваши данные будут удалены.\nЭто альфа-версия функции. Возможны ошибки.\nНажмите \"Очистить и перейти…\"."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Очистить и перейти…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Цветовой режим"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Использовать sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Отключено"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монохромный режим"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Дейтераномалия (красный/зеленый)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалия (красный/зеленый)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалия (синий/желтый)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Коррекция цвета"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Это экспериментальная функция, она может снизить производительность устройства."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Новая настройка: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-si-rLK/arrays.xml b/packages/SettingsLib/res/values-si-rLK/arrays.xml
index 225ea36..564ecee 100644
--- a/packages/SettingsLib/res/values-si-rLK/arrays.xml
+++ b/packages/SettingsLib/res/values-si-rLK/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"අවහිර කරන ලදි"</item>
<item msgid="1805837518286731242">"දුර්වල සම්බන්ධතාවය තාවකාලිකව මඟහරිමින්"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"කිසිදා පරික්ෂා නොකරන්න"</item>
+ <item msgid="6042769699089883931">"DRM අන්තර්ගතය සඳහා පමණක් පිරික්සන්න"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"ලොග අන්තරාවකට 64K"</item>
+ <item msgid="2822309747675758628">"ලොග අන්තරාවකට 256K"</item>
+ <item msgid="6699306198357496731">"ලොග අන්තරාවකට 1M"</item>
+ <item msgid="5748528643937500349">"ලොග අන්තරාවකට 4M"</item>
+ <item msgid="1978629051085111592">"ලොග අන්තරාවකට 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"සජිවිකරණය අක්රිය කිරීම"</item>
+ <item msgid="6624864048416710414">"සජීවීකරණ පරිමාණය .5x"</item>
+ <item msgid="2219332261255416635">"සජීවීකරණ පරිමාණය 1x"</item>
+ <item msgid="3544428804137048509">"සජීවීකරණ පරිමාණය 1.5x"</item>
+ <item msgid="3110710404225974514">"සජීවීකරණ පරිමාණය 2x"</item>
+ <item msgid="4402738611528318731">"සජීවිකරණ පරිමාණය 5x"</item>
+ <item msgid="6189539267968330656">"සජීවිතා පරාසය 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"සජීවිකරණ අක්රියයි"</item>
+ <item msgid="3375781541913316411">"සජීවීකරණ පරිමාණය .5x"</item>
+ <item msgid="1991041427801869945">"සජීවීකරණ පරිමාණය 1x"</item>
+ <item msgid="4012689927622382874">"සජීවීකරණ පරිමාණය 1.5x"</item>
+ <item msgid="3289156759925947169">"සජිවිකරණ පරාසය 2x"</item>
+ <item msgid="7705857441213621835">"සජීවිකරණ පරිමාණය 5x"</item>
+ <item msgid="6660750935954853365">"සජීවිතා පරාසය 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"සජිවිකරණය අක්රිය කිරීම"</item>
+ <item msgid="1138649021950863198">"සජීවීකරණ පරිමාණය .5x"</item>
+ <item msgid="4394388961370833040">"සජීවීකරණ පරිමාණය 1x"</item>
+ <item msgid="8125427921655194973">"සජීවීකරණ පරිමාණය 1.5x"</item>
+ <item msgid="3334024790739189573">"සජිවිකරණ පරාසය 2x"</item>
+ <item msgid="3170120558236848008">"සජීවිකරණ පරිමාණය 5x"</item>
+ <item msgid="1069584980746680398">"සජිවිකරණ පරාසය 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"කිසිවක් නැත"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ආරක්ෂිත)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ආරක්ෂිත)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ආරක්ෂිත)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ආරක්ෂිත)"</item>
+ <item msgid="3547211260846843098">"4K (පරිමාණය වැඩි කළ)"</item>
+ <item msgid="5411365648951414254">"4K (පරිමාණය වැඩි කළ, ආරක්ෂිත)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ද්විත්ව තිරය)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"කිසිවක් නැත"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (චිත්රක)"</item>
+ <item msgid="1340692776955662664">"glGetError මත ඇමතීමේ අට්ටිය"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"අක්රියව ඇත"</item>
+ <item msgid="675719912558941285">"ඍජුකෝණාස්ර-නොවන ක්ලිප් ප්රදේශය නිල් පාටින් අදින්න"</item>
+ <item msgid="1064373276095698656">"පරික්ෂා කරන ලද ඇඳීමේ විධාන කොළ පැහැයෙන් ඉස්මතු කරන්න"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"අක්රියයි"</item>
+ <item msgid="2751513398307949636">"තිරයෙහි පටි ලෙස"</item>
+ <item msgid="1851438178120770973">"Adb shell dumpsys gfxinfo තුළ"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"අක්රියයි"</item>
+ <item msgid="7688197031296835369">"වැඩිකොට දක්වනවා ඇති ප්රදේශ පෙන්වන්න"</item>
+ <item msgid="2290859360633824369">"අපවිෂවීම සඳහා ප්රදේශ පෙන්වන්න"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"සම්මත සීමාව"</item>
+ <item msgid="4071574792028999443">"පසුබිම් ක්රියාවලි නොමැත"</item>
+ <item msgid="4810006996171705398">"උපරිම වශයෙන් 1 ක්රියාවලියක්"</item>
+ <item msgid="8586370216857360863">"උපරිම ලෙස ක්රියාවලි 2 කි"</item>
+ <item msgid="836593137872605381">"උපරිම ලෙස ක්රියාවලි 3 කි"</item>
+ <item msgid="7899496259191969307">"උපරිම ලෙස ක්රියාවලි 4 කි"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ආරෝපණය වෙමින්"</item>
+ <item msgid="5220695614993094977">"MTP (මාධ්ය මාරු කිරීමේ ප්රොටෝකෝලය)"</item>
+ <item msgid="2086000968159047375">"PTP (පින්තූර මාරු කිරීමේ ප්රොටෝකෝලය)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ඊතර නෙට්)"</item>
+ <item msgid="1718924214939774352">"ශ්රව්ය මූලය"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si-rLK/strings.xml
index 6ff81b7..1ffd840 100644
--- a/packages/SettingsLib/res/values-si-rLK/strings.xml
+++ b/packages/SettingsLib/res/values-si-rLK/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"පැතිකඩ තෝරන්න"</string>
<string name="category_personal" msgid="1299663247844969448">"පෞද්ගලික"</string>
<string name="category_work" msgid="8699184680584175622">"කාර්යාලය"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"වර්ධක විකල්ප"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"සංවර්ධක විකල්ප සබල කිරීම"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"යෙදුම් සංවර්ධනයට විකල්ප සකසන්න"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"මෙම පරිශීලකයාට සංවර්ධක විකල්ප ලද නොහැක"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"මෙම පරිශීලකයා සඳහා VPN සැකසීම් නැත"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"මෙම පරිශීලකයා සඳහා ටෙදරින් සැකසීම් නැත"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"මෙම පරිශීලකයා සඳහා ප්රවේශ ලක්ෂ්යයේ නමේ සැකසීම් නොතිබේ"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB නිදොස්කරණය"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB සම්බන්ධ විට නිදොස් ආකාරය"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB නිදොස් කිරීම් අනුමැති අහෝසි කරන්න"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"දෝෂය වාර්තා කිරීමේ කෙටිමඟ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"දෝෂ වාර්තාවක් ගැනීම සඳහා බල මෙනුව තුළ බොත්තම පෙන්වන"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"අවදියෙන් සිටින්න"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ආරෝපණය වන අතර තුර තීරය නිද්රාවට නොයනු ඇත"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"බ්ලූටූත් HCI ස්නුප් ලොගය සබල කරන්න"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ගොනුවක් තුළ ඇති බ්ලූටූත් HCI පැකට්ටු සියල්ලම ග්රහණය කරගන්න"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM අඟුල ඇරීම"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"බුට්ලොඩරයට අගුළු ඇර තිබීමට ඉඩ දෙන්න"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM අඟුල ඇරීමට ඉඩ දෙන්න?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"අවවාදයයි: මෙම සැකසීම සක්රිය විට මෙම උපාංගයේ උපාංගය ආරක්ෂා කිරීමේ විශේෂාංගය වැඩනොකරයි."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"ව්යාජ ස්ථාන යෙදුම තේරීම"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ව්යාජ ස්ථාන යෙදුම සකසා නැත"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"ව්යාජ ස්ථාන යෙදුම: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"ජාලකරණය"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"නොරැහැන් සංදර්ශක සහතිකය"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"විස්තරාත්මක Wi‑Fi ලොග් කිරීම සබල කරන්න"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ආක්රමණික Wi‑Fi සිට සෙලියුලර් බාර දීම"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi රෝම් පරිලෝකන වෙතට සැමවිට අවසර දෙන්න"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ලෙගසි DHCP සේවාලාභියා භාවිත කරන්න"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"සෙලියුලර් දත්ත සැමවිට ක්රියාකාරීය"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"අතුරු මුහුණතෙහි ඇති දත්ත තදබදය අනුව Wi‑Fi රෝම් පරිලෝකන වෙත ඉඩ දෙන්න/නොදෙන්න"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ලෝගයේ අන්තරාවක ප්රමාණය"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"ලොග අන්තරාවකට ලෝගයේ ප්රමාණය තෝරන්න"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB වින්යාස දත්ත තෝරන්න"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB වින්යාස දත්ත තෝරන්න"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"ව්යාජ ස්ථානයන්ට අවසර දෙන්න"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"ව්යාජ ස්ථාන අනුමත කරන්න"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"උපලක්ෂණ පරික්ෂාව බැලීම සබල කරන්න"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"නව Android DHCP සේවාලාභියා වෙනුවට Lollipop වෙතින් DHCP සේවාලාභියා භාවිත කරන්න."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi අක්රිය විට පවා, සැම විටම ජංගම දත්ත ක්රියාකාරීව තබන්න (අවසන් ජාල මාරුව සඳහා)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB දෝශාවේක්ෂණයට ඉඩ දෙන්නද?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB දෝශාවේක්ෂණය සංවර්ධන කටයුතු සඳහා පමණක් යොදාගැනේ. එය ඔබගේ පරිගණකය සහ ඔබගේ උපාංගය අතර දත්ත පිටපත් කිරීමට පමණක් භාවිතා කරන්න, ඔබගේ උපාංගය මත දැනුම්දීම් රහිතව යෙදුම් ස්ථාපනය කරන්න, සහ ලොග් දත්ත කියවන්න."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ඔබ මින්පෙර අවසර ලබාදුන් සියළුම පරිගණක වෙතින් USB නිදොස්කරණට ප්රවේශය අහෝසි කරන්නද?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"සංවර්ධන සැකසීම් වවලට අවසර දෙන්නද?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"මෙම සැකසීම් වර්ධක භාවිතය සඳහා පමණි. ඔබගේ උපාංගයේ සහ යෙදුම්වල අක්රිය වීමට හෝ වැරදි ක්රියා කෙරුමකට ඒවා බලපෑ හැක."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ඔස්සේ යෙදුම් සත්යාපනය කරගන්න"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT හරහා ස්ථාපනය වූ යෙදුම්, විනාශකාරී ක්රියාවන් ඇත්දැයි පරික්ෂාකර බලන්න."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"අභ්යන්තර අන්තය"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"දේශීය ෂෙල් ප්රවේශනය පිරිනමන ටර්මිනල් යෙදුම සබල කරන්න"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP පරික්ෂාව"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP පරික්ෂා හැසිරීම සකසන්න"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"නිදොස්කරණය"</string>
+ <string name="debug_app" msgid="8349591734751384446">"නිදොස් කිරීමේ යෙදුම තෝරන්න"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"නිදොස් යෙදුමක් සකස් කර නැත"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"<xliff:g id="APP_NAME">%1$s</xliff:g> යෙදුම නිදොස් කරමින්"</string>
+ <string name="select_application" msgid="5156029161289091703">"යෙදුම තේරීම"</string>
+ <string name="no_application" msgid="2813387563129153880">"කිසිවක් නැත"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"නිදොස්කරණය සඳහා රැඳෙන්න"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"නිදොස් කළ යෙදුම් ක්රියාකිරීමට පෙර ඇමිණීම සඳහා නිදොස්කරණය වෙත බලා සිටියි"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ආදානය"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ඇඳීම්"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"දෘඩාංග වේගය වැඩි කළ පිරිනැමීම"</string>
+ <string name="media_category" msgid="4388305075496848353">"මාධ්ය"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"නිරීක්ෂණය"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"තදබල ආකාරය සබල කිරීම"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"මූලික පොටේ යෙදුම්, දිගු මෙහෙයුම් කරන විට තිරය ෆ්ලෑෂ් කරන්න"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"සූචක පිහිටීම"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"තිර උඩැතිරිය වර්තමාන ස්පර්ශ දත්ත පෙන්වයි"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ස්පර්ශ පෙන්වන්න"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ස්පර්ශ සඳහා දෘශ්ය ප්රතිපෝෂණය පෙන්වන්න"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"පෘෂ්ඨ යාවත්කාලීන පෙන්වන්න"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"යාවත්කාලින වනවිට මුළු කවුළු තලයම දැල්වෙන්න"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU පෙනුම් යාවත්කාලීන පෙන්වන්න"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU සමග ඈඳෙන විට තිරයේ ඇතුලත Flash නරඹයි"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"දෘඨාංග ස්ථර යාවත්කාලීන"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"යාවත්කාලින වන විට දෘඩාංග තලය කොළ පහන් දැල්වෙන්න"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU වැඩිකොට දැක්වීම නිදොස් කරන්න"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW වසාලන අක්රිය කරන්න"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"තිර සංයුක්ත කිරීමට සැමවිටම GPU භාවිතා කරන්න"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"වර්ණ අවකාශය අනුකරණය කරන්න"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL අනුරේඛන සබල කරන්න"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ශ්රව්ය මාර්ගගත කිරීම කිරීම අබල කරන්න"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ශ්රව්ය පර්යන්ත වෙත ස්වයංක්රිය මාර්ගගත කිරීම කිරීම අබල කරන්න"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"පිරිසැලසුම් සීමා පෙන්වන්න"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"ක්ලිප් සීමා, මායිම්, ආදිය පෙන්වන්න."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"බල RTL පිරිසැලසුම් දිශාව"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"සියලු පෙදෙසි සඳහා RTL වෙත බල තිර පිරිසැලසුම"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU භාවිතය පෙන්වන්න"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"තීර උඩැතිරිය වත්මන් CPU භාවිතය පෙන්නුම් කරයි"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU විදහාපෑම බලකරන්න"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d ඇඳීම් සඳහා GPU බලයෙන් භාවිතා කරන්න"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA බල කරන්න"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 යෙදුම්හි 4x MSAA සබල කරන්න"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"සෘජුකෝණාස්ර-නොවන ක්ලිප් මෙහෙයුම් නිදොස් කරන්න"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU විදැහුම විස්තර කරන්න"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"කවුළු සජීවිකරණ පරිමාණය"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"සංක්රමණ සජීවන පරිමාණය"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"සජීවක කාල පරාස පරිමාණය"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ද්විතියික දර්ශනය අඟවන්න"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"යෙදුම්"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ක්රියාකාරකම් තබාගන්න එපා"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"පරිශීලකයා ඉවත් වුන විගසම සෑම ක්රියාකාරකමක්ම විනාශ කරන්න"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"පසුබිම් ක්රියාවලි සීමාව"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"සියලුම ANR පෙන්වන්න"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"පසුබිම් යෙදුම් වලට යෙදුම ප්රතිචාර නොදක්වයි කවුළුව පෙන්වන්න"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"බාහිර මත යෙදුම් ඉඩ දීම බල කරන්න"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"මැනිෆෙස්ට් අගයන් නොසලකා, ඕනෑම යෙදුමක් අභ්යන්තර ගබඩාවට ලිවීමට සුදුසුකම් ලබා දෙයි"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"ක්රියාකාරකම් ප්රතිප්රමාණ කළ හැකි බවට බල කරන්න"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"මැනිෆෙස්ට් අගයන් නොසලකා, සියලු ක්රියාකාරකම් බහු-කවුළු සඳහා ප්රතිප්රමාණ කළ හැකි බවට පත් කරයි."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ඩෙස්ක්ටොප් උපස්ථ මුරපදය"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ඩෙස්ක්ටොප් සම්පූර්ණ උපස්ථ දැනට ආරක්ෂා කර නොමැත"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ඩෙස්ක්ටොප් සම්පූර්ණ උපස්ථ සඳහා මුරපදය වෙනස් කිරීමට හෝ ඉවත් කිරීමට ස්පර්ශ කරන්න"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"නව උපස්ථ මුරපදය සකසන ලදි"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"නව මුරපදය සහ සත්යාපනය නොගැළපුනි"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"උපස්ථ මුරපදය පිහිටුවීම අසාර්ථකය"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"දීප්තිමත් (පෙරනිමිය)"</item>
+ <item msgid="8446070607501413455">"ස්වභාවික"</item>
+ <item msgid="6553408765810699025">"සම්මත"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"වැඩිදියුණු කරන ලද වර්ණ"</item>
+ <item msgid="8280754435979370728">"ඇස දකින ස්වභාවික වර්ණ"</item>
+ <item msgid="5363960654009010371">"ඩිජිටල් අන්තර්ගතය සඳහා වර්ණ ප්රශස්ත කරන ලද"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"අක්රිය යෙදුම්"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"අක්රියයි. ටොගල කිරීමට ස්පර්ශ කරන්න."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"සක්රියයි. ටොගල කිරීමට ස්පර්ශය. කරන්න."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"ධාවනය වන සේවා"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"දැනට ධාවනය වන සේවා බලන්න සහ පාලනය කරන්න"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"රාත්රී ප්රකාරය"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"අබලයි"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"සැමවිට ක්රියාත්මක"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"ස්වයංක්රීය"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ගොනු සංකේතනයට පරිවර්තනය කරන්න"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"පරිවර්තනය කරන්න..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"දැනටමත් ගොනුව සංකේතනය කර ඇත"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ගොනු පදනම් සංකේතනයට පරිවර්තනය කිරීම"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"දත්ත වෙන් කිරීම ගොනු පදනම් සංකේතනයට පරිවර්තනය කරන්න.\n !!අනතුරු ඇඟවීමයි!! මෙය ඔබේ සියලු දත්ත මකනු ඇත.\n මෙම විශේෂාංගය ඇල්ෆා වන අතර, නිවැරදිව ක්රියා නොකළ හැකිය.\n දිගටම කරගෙන යාමට \'මකා පරිවර්තනය කරන්න...\' ඔබන්න."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"මකා පරිවර්තනය කරන්න..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"පින්තූර වර්ණ ප්රකාරය"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB භාවිතා කරන්න"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"අබලයි"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"කළු-සුදු"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"වර්ණ අන්ධතාවය (රතු-කොළ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"වර්ණ දුර්වලතාවය (රතු-කොළ)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"වර්ණ අන්ධතාවය (නිල්-කහ)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"වර්ණ නිවැරදි කිරීම"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"මෙම විශේෂාංගය පරීක්ෂණාත්මක සහ ඇතැම් විට ක්රියාකාරිත්වයට බලපෑ හැක."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> මගින් ඉක්මවන ලදී"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index 6cab133..ec33e63 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokované"</item>
<item msgid="1805837518286731242">"Dočasne bolo zabránené slabému pripojeniu"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nikdy nekontrolovať"</item>
+ <item msgid="6042769699089883931">"Kontrolovať len obsah DRM"</item>
+ <item msgid="9174900380056846820">"Vždy kontrolovať"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nikdy nepoužívať kontrolu HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB na vyrovn. pamäť denníka"</item>
+ <item msgid="2822309747675758628">"256 kB na vyrovn. pamäť denníka"</item>
+ <item msgid="6699306198357496731">"1 MB na vyrovn. pamäť denníka"</item>
+ <item msgid="5748528643937500349">"4 MB na vyrovn. pamäť denníka"</item>
+ <item msgid="1978629051085111592">"16 MB na vyrovn. pamäť denníka"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animácia je vypnutá"</item>
+ <item msgid="6624864048416710414">"Mierka animácie 0,5x"</item>
+ <item msgid="2219332261255416635">"Mierka animácie 1x"</item>
+ <item msgid="3544428804137048509">"Mierka animácie 1,5x"</item>
+ <item msgid="3110710404225974514">"Mierka animácie 2x"</item>
+ <item msgid="4402738611528318731">"Mierka animácie 5x"</item>
+ <item msgid="6189539267968330656">"Mierka animácie 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animácia je vypnutá"</item>
+ <item msgid="3375781541913316411">"Mierka animácie 0,5x"</item>
+ <item msgid="1991041427801869945">"Mierka animácie 1x"</item>
+ <item msgid="4012689927622382874">"Mierka animácie 1,5x"</item>
+ <item msgid="3289156759925947169">"Mierka animácie 2x"</item>
+ <item msgid="7705857441213621835">"Mierka animácie 5x"</item>
+ <item msgid="6660750935954853365">"Mierka animácie 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animácia je vypnutá"</item>
+ <item msgid="1138649021950863198">"Mierka animácie 0,5x"</item>
+ <item msgid="4394388961370833040">"Mierka animácie 1x"</item>
+ <item msgid="8125427921655194973">"Mierka animácie 1,5x"</item>
+ <item msgid="3334024790739189573">"Mierka animácie 2x"</item>
+ <item msgid="3170120558236848008">"Mierka animácie 5x"</item>
+ <item msgid="1069584980746680398">"Mierka animácie 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Žiadne"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (zabezpečené)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (zabezpečené)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (zabezpečené)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (zabezpečené)"</item>
+ <item msgid="3547211260846843098">"4K (zväčšené)"</item>
+ <item msgid="5411365648951414254">"4K (zväčšené, zabezpečené)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (duálna obrazovka)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Žiadne"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Zásobník volaní glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Vypnuté"</item>
+ <item msgid="675719912558941285">"Neobdĺžnikový výstrižok modrou"</item>
+ <item msgid="1064373276095698656">"Testované príkazy vykresľovania zelenou"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Vypnuté"</item>
+ <item msgid="2751513398307949636">"Na obrazovke v podobe stĺpcov"</item>
+ <item msgid="1851438178120770973">"V adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Vypnuté"</item>
+ <item msgid="7688197031296835369">"Zobraziť oblasti prekreslení"</item>
+ <item msgid="2290859360633824369">"Zobraziť oblasti pre deuteranomáliu"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Štandardný limit"</item>
+ <item msgid="4071574792028999443">"Žiadne procesy na pozadí"</item>
+ <item msgid="4810006996171705398">"Najviac 1 proces"</item>
+ <item msgid="8586370216857360863">"Najviac 2 procesy"</item>
+ <item msgid="836593137872605381">"Najviac 3 procesy"</item>
+ <item msgid="7899496259191969307">"Najviac 4 procesy"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Nabíjanie"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol – protokol na prenos médií)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol – protokol na prenos obrázkov)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Zdroj zvuku"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index a499dc5..9b851b9 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Výber profilu"</string>
<string name="category_personal" msgid="1299663247844969448">"Osobné"</string>
<string name="category_work" msgid="8699184680584175622">"Práca"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Pre vývojárov"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Povolenie možností vývojára"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Možnosti nastavenia vývoja aplikácií"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Tento používateľ nemá k dispozícii možnosti pre vývojárov"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Nastavenia vzdialeného pripojenia VPN nie sú dostupné pre tohto používateľa"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Nastavenia zdieľania dátového pripojenia nie sú dostupné pre tohto používateľa"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Nastavenia názvu prístupového bodu (APN) nie sú dostupné pre tohto používateľa"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Ladenie cez USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Povoliť režim ladenia s pripojeným zariadením USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Odvolať autorizácie na ladenie cez USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Skratka hlásenia chyby"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Zobraziť v hlavnej ponuke tlačidlo na vytvorenie hlásenia chyby"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Nevypínať obrazovku"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka sa pri nabíjaní neprepne do režimu spánku"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povoliť denník Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Zaznamenať všetky pakety Bluetooth HCI do súboru"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Odblokovať OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povoliť odblokovanie ponuky bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povoliť odblokovanie OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UPOZORNENIE: Dokiaľ bude toto nastavenie zapnuté, funkcie ochrany zariadenia nebudú na tomto zariadení fungovať."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Vybrať aplikáciu so simulovanou polohou"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nemáte žiadnu aplikáciu so simulovanou polohou"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikácia so simulovanou polohou: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Možnosti siete"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikácia bezdrôtového zobrazenia"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agres. odovzdávať Wi-Fi na mobilnú sieť"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vždy povoliť funkciu Wi-Fi Roam Scans"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Použiť starý klient DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobilné dáta vždy aktívne"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Povoliť alebo zakázať funkciu Wifi Roam Scans na základe objemu prenosu údajov v rozhraní"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Veľkosti vyrovnávacej pamäte denníka"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Veľkosť na vyrovnávaciu pamäť nástroja denníkov"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Výber konfigurácie USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Výber konfigurácie USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Povoliť simulované polohy"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Povoliť simulované polohy"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Kontrola atribútov zobrazenia"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Použitie klienta DHCP z verzie Lollipop namiesto nového klienta Android DHCP."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Vždy ponechávať mobilné dáta aktívne, dokonca aj pri aktívnej sieti Wi‑Fi (na rýchle prepínanie sietí)"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Povoliť ladenie cez USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ladenie prostredníctvom USB je určené iba na účely vývoja. Použite ho na kopírovanie dát medzi počítačom a zariadením, inštaláciu aplikácií do zariadenia bez upozornenia a čítanie údajov denníka."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Chcete odvolať prístup k ladeniu cez USB zo všetkých počítačov, ktoré ste predtým autorizovali?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Povoliť nastavenia pre vývojárov?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Tieto nastavenia sú určené len pre vývojárov. Môžu spôsobiť poruchu alebo nesprávne fungovanie zariadenia a nainštalovaných aplikácií."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Overovať aplikácie z USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrolovať škodlivosť aplikácií nainštalovaných pomocou nástroja ADB alebo ADT"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Miestny terminál"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Povoliť terminálovú apl. na miestny prístup k prostrediu shell"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Kontrola HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Nastaviť spôsob kontroly HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Ladenie"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Vybrať aplikáciu na ladenie"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nie je nastavená žiadna aplikácia na ladenie"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikácia na ladenie: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Výber aplikácie"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nič"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Čakať na ladiaci nástroj"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikácia čaká na pripojenie ladiaceho nástroja"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Vstup"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Vykreslovanie"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardvérom zrýchlené vykresľovanie"</string>
+ <string name="media_category" msgid="4388305075496848353">"Médiá"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorovanie"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Povoliť prísny režim"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Blikať pri dlhých operáciách hlavného vlákna"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Umiestnenie ukazovateľa"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Zobraziť prekryvnú vrstvu s aktuálnymi údajmi o klepnutiach"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Zobrazovať dotyky"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Vizuálne znázorňovať dotyky"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Zobraziť obnovenia obsahu"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Rozblikať obsah okna pri aktualizácii"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Zobraziť obnovenia s GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Rozblikať zobrazenia v oknách vykresľované GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Obnovenie hardvér. vrstiev"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Rozblikať zelene hardvérové vrstvy pri obnovení"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Ladenie prekresľovania GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Zakázať hardvérové prekrytia"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Vždy používať GPU na skladanie obrazovky"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulácia far. priestoru"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Trasovanie OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Vyp. smer. zvuku do USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Vypnúť automatické smerovanie do audio periférií USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Zobraziť ohraničenia"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Zobraziť vo výstrižku ohraničenie, okraje a pod."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Rozloženia sprava doľava"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Vynútiť pre všetky jazyky rozloženie obrazovky sprava doľava"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Zobraziť využitie CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Prekryvná vrstva s aktuálnym využitím procesora"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Vykresľovat pomocou GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Používať GPU na dvojrozmerné vykresľovanie"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Vynútiť 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Povoliť 4x MSAA v aplikáciách OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Ladenie operácií s neobdĺžnikovými výstrižkami"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil vykresľovania GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Mierka animácie okna"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Mierka animácie premeny"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Mierka dĺžky animácie"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulovať sekundárne obrazovky"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikácie"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Neuchovávať aktivity"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Zničiť každú aktivitu, hneď ako ju používateľ ukončí"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limit procesov na pozadí"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Zobrazovať všetky ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Zobrazovať dialóg „Aplikácia neodpovedá“ aj pre aplikácie na pozadí"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Vynútiť povolenie aplikácií na externom úložisku"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Umožňuje zapísať akúkoľvek aplikáciu do externého úložiska bez ohľadu na hodnoty v manifeste"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Vynútiť možnosť zmeny veľkosti aktivít"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Veľkosti všetkých aktivít bude možné zmeniť na niekoľko okien (bez ohľadu na hodnoty manifestu)."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Heslo pre zálohy v počítači"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Úplné zálohy na počítači nie sú momentálne chránené"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Dotykom zmeníte alebo odstránite heslo pre úplné zálohy do počítača"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nové heslo pre zálohy je nastavené"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nové heslo a potvrdenie sa nezhodujú"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nastavenie hesla pre zálohy zlyhalo"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Sýty (predvolený)"</item>
+ <item msgid="8446070607501413455">"Prirodzený"</item>
+ <item msgid="6553408765810699025">"Štandardný"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Vylepšené farby"</item>
+ <item msgid="8280754435979370728">"Prirodzené farby, ako ich vidí ľudské oko"</item>
+ <item msgid="5363960654009010371">"Farby optimalizované pre digitálny obsah"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktívne aplikácie"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Neaktívna. Zapnete ju klepnutím."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktívna. Zapnete ju klepnutím."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Spustené služby"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Zobrazenie a ovládanie aktuálne spustených služieb"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nočný režim"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Vypnuté"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Vždy zapnuté"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatický"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertovať na šifrovanie súborov"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertovať…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Súbory sú už šifrované"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konvertovanie na šifrovanie založené na súboroch"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Chystáte sa konvertovať dátový oddiel na šifrovanie založené na súboroch.\n !!Upozornenie!! Týmto procesom vymažete všetky dáta.\n Táto funkcia je v alfa verzii a nemusí fungovať správne.\n Ak chcete pokračovať, stlačte tlačidlo „Vymazať a konvertovať…“."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Vymazať a konvertovať…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Farebný režim obrázka"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Použije sa sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Zakázané"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromázia (úplna farbosleposť)"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomália (červená a zelená)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomália (červená a zelená)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomália (modrá a žltá)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Úprava farieb"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Funkcia je experimentálna a môže mať vplyv na výkonnosť."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Prekonané predvoľbou <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index fef1fdd..253f113 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blokirano"</item>
<item msgid="1805837518286731242">"Začasno izogibanje slabi povezavi"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Nikoli ne preveri"</item>
+ <item msgid="6042769699089883931">"Preveri samo glede vsebine DRM"</item>
+ <item msgid="9174900380056846820">"Vedno preveri"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Nikoli ne uporabi preverjanja HDCP"</item>
+ <item msgid="3878793616631049349">"Preverjanje HDCP uporabi samo za vsebino DRM"</item>
+ <item msgid="45075631231212732">"Vedno uporabi preverjanje HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K/medpom. dnevn."</item>
+ <item msgid="2822309747675758628">"256 K/medpom. dnev."</item>
+ <item msgid="6699306198357496731">"1 M/medpom. dnevn."</item>
+ <item msgid="5748528643937500349">"4 M/medpom. dnevn."</item>
+ <item msgid="1978629051085111592">"16 M/medpom. dnevn."</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animacija je izključena"</item>
+ <item msgid="6624864048416710414">"Merilo animacije: 0,5 x"</item>
+ <item msgid="2219332261255416635">"Merilo animacije: 1 x"</item>
+ <item msgid="3544428804137048509">"Merilo animacije: 1,5 x"</item>
+ <item msgid="3110710404225974514">"Merilo animacije: 2 x"</item>
+ <item msgid="4402738611528318731">"Merilo animacije: 5 x"</item>
+ <item msgid="6189539267968330656">"Merilo animacije: 10 x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animacija je izključena"</item>
+ <item msgid="3375781541913316411">"Merilo animacije: 0,5 x"</item>
+ <item msgid="1991041427801869945">"Merilo animacije: 1 x"</item>
+ <item msgid="4012689927622382874">"Merilo animacije: 1,5 x"</item>
+ <item msgid="3289156759925947169">"Merilo animacije: 2 x"</item>
+ <item msgid="7705857441213621835">"Merilo animacije: 5 x"</item>
+ <item msgid="6660750935954853365">"Merilo animacije: 10 x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animacija izklopljena"</item>
+ <item msgid="1138649021950863198">"Merilo animacije: 0,5 x"</item>
+ <item msgid="4394388961370833040">"Merilo animacije: 1 x"</item>
+ <item msgid="8125427921655194973">"Merilo animacije: 1,5 x"</item>
+ <item msgid="3334024790739189573">"Merilo animacije: 2 x"</item>
+ <item msgid="3170120558236848008">"Merilo animacije: 5 x"</item>
+ <item msgid="1069584980746680398">"Merilo animacije: 10 x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Brez"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (varno)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (varno)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (varno)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (varno)"</item>
+ <item msgid="3547211260846843098">"4K (izboljšan prikaz)"</item>
+ <item msgid="5411365648951414254">"4K (izboljšan prikaz, varno)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dvojni zaslon)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Brez"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Pri napaki glGetError kliči sklad"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Izklopljeno"</item>
+ <item msgid="675719912558941285">"Izris obm. nepravok. izreza z modro"</item>
+ <item msgid="1064373276095698656">"Ozn. presk. risal. ukazov z zeleno"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Izklopljeno"</item>
+ <item msgid="2751513398307949636">"Na zaslonu kot vrstice"</item>
+ <item msgid="1851438178120770973">"V dumpsys gfxinfo lupine adb"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Izklop"</item>
+ <item msgid="7688197031296835369">"Pokaži risanje zunaj vidnega območja"</item>
+ <item msgid="2290859360633824369">"Pokaži območja za devteranomalijo"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardna omejitev"</item>
+ <item msgid="4071574792028999443">"Ni postopkov v ozadju"</item>
+ <item msgid="4810006996171705398">"Največ 1 postopek"</item>
+ <item msgid="8586370216857360863">"Največ 2 postopka"</item>
+ <item msgid="836593137872605381">"Največ 3 postopki"</item>
+ <item msgid="7899496259191969307">"Največ 4 postopki"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Polnjenje"</item>
+ <item msgid="5220695614993094977">"MTP (protokol za prenos predstavnosti)"</item>
+ <item msgid="2086000968159047375">"PTP (protokol za prenos slik)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet USB)"</item>
+ <item msgid="1718924214939774352">"Vir zvoka"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index b2d047b..04918e0 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Izbira profila"</string>
<string name="category_personal" msgid="1299663247844969448">"Osebno"</string>
<string name="category_work" msgid="8699184680584175622">"Služba"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Možnosti za razvijalce"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Omogočanje možnosti za razvijalce"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Nastavi možnosti za razvoj aplikacij"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Možnosti razvijalca niso na voljo za tega uporabnika"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Nastavitve VPN niso na voljo za tega uporabnika"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Nastavitve za povezavo z internetom prek mobilne naprave niso na voljo za tega uporabnika"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Nastavitve imena dostopne točke niso na voljo za tega uporabnika"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Odpravljanje težav z USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Način za odpravljanje težav, ko je vzpostavljena povezava USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Preklic dovoljenj za odpr. težav prek USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Bližnjica za por. o napakah"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaz gumba za ustvarjanje poročila o napakah v meniju za vklop/izklop"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Brez zaklepanja"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Med polnjenjem se zaslon ne bo nikoli zaklenil"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogoči zajem dnevnika Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Zajemi vse pakete Bluetooth HCI v datoteko"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Odklepanje OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dovoli odklepanje zagonskega nalagalnika"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite omogočiti odklepanje OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"OPOZORILO: Ko je vklopljena ta nastavitev, funkcije za zaščito naprave v tej napravi ne bodo delovale."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Izberite aplikacijo za lažno lokacijo"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Aplikacija za lažno lokacijo ni nastavljena"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacija za lažno lokacijo: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Omrežja"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Potrdilo brezžičnega zaslona"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogoči podrob. zapis. dnevnika za Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Odločen prehod iz Wi-Fi-ja v mobil. omr."</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vedno omogoči iskanje omrežij Wi-Fi za gostovanje"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Uporaba starejšega odjemalca DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Prenos podatkov v mobilnih omrežjih je vedno aktiven"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Omogoči/onemogoči iskanje omrežij Wi-Fi za gostovanje glede na količino podatkovnega prometa pri vmesniku"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Velikosti medpomn. zapisov. dnevnika"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Izberite velikost medpomnilnika dnevnika"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Izbira konfiguracije USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Izbira konfiguracije USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Dovoli lažne lokacije"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Dovoli lažne lokacije"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Omogoči pregled atributa pogleda"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Uporaba odjemalca DHCP za Lollipop namesto novega odjemalca DHCP za Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Prenos podatkov v mobilnih omrežjih je vedno aktiven – tudi ko je aktivna povezava Wi-Fi (za hiter preklop med omrežji)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Ali dovolite odpravljanje težav s povezavo USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Odpravljanje težav s povezavo USB je namenjeno samo za razvoj. Lahko ga uporabljate za kopiranje podatkov med računalnikom in napravo, nameščanje aplikacij v napravo brez obveščanja in branje podatkov v dnevniku."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Ali želite preklicati dostop do odpravljanja težav prek povezave USB iz vseh računalnikov, ki ste jih pooblastili?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ali želite omogočiti nastavitve za razvijanje?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Te nastavitve so namenjene samo za razvijanje in lahko povzročijo prekinitev ali napačno delovanje naprave in aplikacij v njej."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Preveri aplikacije prek USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Preveri, ali so aplikacije, nameščene prek ADB/ADT, škodljive."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokalni terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Omogočanje terminalske aplikacije za dostop do lokalne lupine"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Preverjanje HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Nastavi preverjanje HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Iskanje napak"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Izberite aplikacijo za iskanje napak"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Aplikacija za iskanje napak ni nastavljena"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikacija za iskanje napak: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Izberite aplikacijo"</string>
+ <string name="no_application" msgid="2813387563129153880">"Nič"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Počakajte na iskalnik napak"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacija, v kateri iščete napako, pred izvajanjem čaka na povezavo z iskalnikom napak"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Vnos"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Risba"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Upodabljanje s strojnim pospeševanjem"</string>
+ <string name="media_category" msgid="4388305075496848353">"Predstavnosti"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Spremljanje"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strog način je omogočen"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Osveži zaslon pri dolgih oper. progr. v gl. niti"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Mesto kazalca"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Prekriv. zaslona prikazuje tren. podatke za dotik"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Pokaži dotike"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Pokaži vizualne povratne informacije za dotike"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Pokaži posodob. površine"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Ob posodobitvi osvetli celotne površine oken"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Pokaži posod. pogleda GPE"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Osvetli poglede v oknih pri risanju z GPE"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Pokaži pos. sl. str. opr."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Obarvaj sloje strojne opreme zeleno ob posodobitvi"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Prekoračitev območja GPE"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Onem. strojni medp."</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Za sestavljanje slike vedno uporabi graf. procesor"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simul. barvnega prostora"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Omogoči sledi OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"On. us. zvoka prek USB-ja"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Onem. samod. usmerjanja na zun. zvoč. naprave USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Prikaz mej postavitve"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Pokaži meje obrezovanja, obrobe ipd."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Vsili od desne proti levi"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Vsili smer postavitve na zaslonu od desne proti levi za vse jezike"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Prikaži uporabo CPE-ja"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Prekrivanje zaslona prikazuje tren. uporabo CPE-ja"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Vsili upodabljanje z GPE-jem"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Za risanje 2D vsili uporabo grafičnega procesorja"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Vsili 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"V aplikacijah OpenGL ES 2.0 omogoči 4x MSAA"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Odpr. težav s postopki nepravokotnega izrezovanja"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Upod. profilov z GPE-jem"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Merilo animacije okna"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Merilo animacije prehoda"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Lestvica trajanja animacije"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simul. sekund. prikazov."</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacije"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ne obdrži dejavnosti"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Uniči vsako dejavnost, ko uporabnik preneha z njo"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Omejitev postopkov v ozadju"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Pokaži okna neodzivanj"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Prikaz pogovornega okna za neodzivanje aplikacije v ozadju"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Vsili omogočanje aplikacij v zunanji shrambi"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Poskrbi, da je ne glede na vrednosti v manifestu mogoče vsako aplikacijo zapisati v zunanjo shrambo"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Vsili povečanje velikosti za aktivnosti"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Poskrbi, da je ne glede na vrednosti v manifestu mogoče vsem aktivnostim povečati velikost za način z več okni."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Geslo za varn. kop. rač."</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Popolne varnostne kopije namizja trenutno niso zaščitene"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Dotaknite se, če želite spremeniti ali odstraniti geslo za popolno varnostno kopiranje namizja."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Novo geslo je nastavljeno"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Novo geslo in potrditev se ne ujemata."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nastavitev gesla ni uspela"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Živo (privzeto)"</item>
+ <item msgid="8446070607501413455">"Naravno"</item>
+ <item msgid="6553408765810699025">"Standardno"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Izboljšane barve"</item>
+ <item msgid="8280754435979370728">"Naravne barve, kot jih vidimo s prostim očesom"</item>
+ <item msgid="5363960654009010371">"Barve, optimizirane za digitalno vsebino"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Neaktivne aplikacije"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Neaktivno. Dotaknite se za preklop."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktivno. Dotaknite se za preklop."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Zagnane storitve"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Preglejte in nadzorujte storitve, ki so trenutno zagnane"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nočni način"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Onemogočeno"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Vedno vklopljeno"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Samodejno"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Preklop na šifriranje podatkov"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Preklop …"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Šifriranje podatkov je že uveljavljeno"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Preklop na šifriranje na ravni datotek"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Preklop particije s podatki na šifriranje na ravni datotek.\n !!Opozorilo!! S tem bodo izbrisani vsi podatki.\n Ta funkcija je različice alfa, zato morda ne bo delovala pravilno.\n Če želite nadaljevati, pritisnite »Izbriši in preklopi ...«."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Izbriši in preklopi …"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Način barv slike"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Uporaba sRGB-ja"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Onemogočeno"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromatičnost"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Devteranomalija (rdeča – zelena)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomalija (rdeča – zelena)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomalija (modra – rumena)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Popravljanje barv"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"To je preskusna funkcija in lahko vpliva na učinkovitost delovanja."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Preglasila nastavitev: <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sq-rAL/arrays.xml b/packages/SettingsLib/res/values-sq-rAL/arrays.xml
index 5aceb09..7473f16 100644
--- a/packages/SettingsLib/res/values-sq-rAL/arrays.xml
+++ b/packages/SettingsLib/res/values-sq-rAL/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"I bllokuar"</item>
<item msgid="1805837518286731242">"Përkohësisht duke shmangur një lidhje të dobët"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Mos kontrollo asnjëherë"</item>
+ <item msgid="6042769699089883931">"Kontrollo vetëm për përmbajtje DRM"</item>
+ <item msgid="9174900380056846820">"Kontrollo gjithmonë"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Mos e përdor asnjëherë kontrollin e HDCP-së"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 mijë / memorie regjistrimi"</item>
+ <item msgid="2822309747675758628">"256K për çdo memorie të përkohshme"</item>
+ <item msgid="6699306198357496731">"1 M për memorien e regjistrit"</item>
+ <item msgid="5748528643937500349">"4 M për memorien e regjistrit"</item>
+ <item msgid="1978629051085111592">"16 M për memorien e regjistrit"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animacioni është i çaktivizuar"</item>
+ <item msgid="6624864048416710414">"Shkalla e animacionit 0,5x"</item>
+ <item msgid="2219332261255416635">"Shkalla e aminacionit 1x"</item>
+ <item msgid="3544428804137048509">"Shkalla e animacionit 1,5x"</item>
+ <item msgid="3110710404225974514">"Shkalla e animacionit 2x"</item>
+ <item msgid="4402738611528318731">"Shkalla e animacionit 5x"</item>
+ <item msgid="6189539267968330656">"Shkalla e animacionit 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animacioni është joaktiv"</item>
+ <item msgid="3375781541913316411">"Shkalla e animacionit 0,5x"</item>
+ <item msgid="1991041427801869945">"Shkalla e aminacionit 1x"</item>
+ <item msgid="4012689927622382874">"Shkalla e animacionit 1,5x"</item>
+ <item msgid="3289156759925947169">"Shkalla e animacionit 2x"</item>
+ <item msgid="7705857441213621835">"Shkalla e animacionit 5x"</item>
+ <item msgid="6660750935954853365">"Shkalla e animacionit 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animacioni është i çaktivizuar"</item>
+ <item msgid="1138649021950863198">"Shkalla e animacionit 0,5x"</item>
+ <item msgid="4394388961370833040">"Shkalla e aminacionit 1x"</item>
+ <item msgid="8125427921655194973">"Shkalla e animacionit 1,5x"</item>
+ <item msgid="3334024790739189573">"Shkalla e animacionit 2x"</item>
+ <item msgid="3170120558236848008">"Shkalla e animacionit 5x"</item>
+ <item msgid="1069584980746680398">"Shkalla e animacionit 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Asnjë"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (i sigurt)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (i sigurt)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (i sigurt)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (i sigurt)"</item>
+ <item msgid="3547211260846843098">"4K (i përshkallëzuar)"</item>
+ <item msgid="5411365648951414254">"4K (i përshkallëzuar, i sigurt)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (në dy ekrane)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Asnjë"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafika)"</item>
+ <item msgid="1340692776955662664">"Stiva në glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Çaktivizuar"</item>
+ <item msgid="675719912558941285">"Vizatoje klipin në të kaltër"</item>
+ <item msgid="1064373276095698656">"Thekso komandat në të gjelbër"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Çaktivizuar"</item>
+ <item msgid="2751513398307949636">"Në ekran si shirita"</item>
+ <item msgid="1851438178120770973">"Në \"gfxinfo\" për ADB-në"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Çaktivizuar"</item>
+ <item msgid="7688197031296835369">"Shfaq zonat e konfliktit"</item>
+ <item msgid="2290859360633824369">"Shfaq zonat për deuteranomalinë"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Kufizim standard"</item>
+ <item msgid="4071574792028999443">"Nuk ka procese në sfond"</item>
+ <item msgid="4810006996171705398">"Maksimumi 1 proces"</item>
+ <item msgid="8586370216857360863">"Maksimumi 2 procese"</item>
+ <item msgid="836593137872605381">"Maksimumi 3 procese"</item>
+ <item msgid="7899496259191969307">"Maksimumi 4 procese"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Po ngarkohet"</item>
+ <item msgid="5220695614993094977">"MTP (Protokolli i Transferimit të Medias)"</item>
+ <item msgid="2086000968159047375">"PTP (Protokolli i Transferimit të Fotografive)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Eternet)"</item>
+ <item msgid="1718924214939774352">"Burimi i audios"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq-rAL/strings.xml
index 87390b4..3bc769c 100644
--- a/packages/SettingsLib/res/values-sq-rAL/strings.xml
+++ b/packages/SettingsLib/res/values-sq-rAL/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Zgjidh profilin"</string>
<string name="category_personal" msgid="1299663247844969448">"Personale"</string>
<string name="category_work" msgid="8699184680584175622">"Punë"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Opsionet e zhvilluesit"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktivizo opsionet e zhvilluesit"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Cakto opsionet për zhvillimin e aplikacionit"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Opsionet e programuesit nuk mundësohen për këtë përdorues"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Cilësimet e VPN-së nuk ofrohen për këtë përdorues"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Cilësimet e ndarjes nuk ofrohen për këtë përdorues"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Cilësimet e \"Emrit të pikës së qasjes\" nuk mund të përdoren për këtë përdorues"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Korrigjimi i USB-së"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Korrigjo gabimet e modalitetit kur UBS-ja është e lidhur"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Anulo autorizimet e korrigjimeve të gabimeve të USB-së"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Shkurtorja e raportit të defektit në kod"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Shfaq një buton në menynë e fikjes për marrjen e raportit të defekteve"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Qëndro zgjuar"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekrani nuk do të kalojë asnjëherë në gjendje gjumi gjatë ngarkimit"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivizo regjistrin testues të Bluetooth HCI-së"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Kap të gjitha paketat HCI të Bluetooth-it në një skedar"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Shkyçja e OEM-së"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Lejo shkyçjen e ngarkimit të sistemit"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Të lejohet shkyçja e OEM-së?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"PARALAJMËRIM! Funksionet e mbrojtjes së pajisjes nuk do të punojnë në këtë pajisje gjatë kohës që ky cilësim është i aktivizuar."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Zgjidh apl. që simulon vendndodhjen"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Nuk është vendosur asnjë aplikacion që simulon vendndodhjen"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Aplikacioni për simulimin e vendndodhjes: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Rrjetet"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikimi i ekranit valor"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivizo hyrjen Wi-Fi Verbose"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Dorëzimi agresiv i Wi‑Fi te rrjeti celular"</string>
+ <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="legacy_dhcp_client" msgid="694426978909127287">"Përdor klientin DHCP të versionit paraprak"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Të dhënat celulare gjithmonë aktive"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Lejo/Ndalo skanimet për Wi‑Fi në roaming, bazuar në sasinë e trafikut të të dhënave të pranishme në ndërfaqe"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Madhësitë e regjistruesit"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Përzgjidh madhësitë e regjistruesit"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Konfigurimi i USB-së"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Konfigurimi i USB-së"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Lejo vendndodhje të simuluara"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Lejo vendndodhje të simuluara"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Aktivizo shikimin e inspektimit të atributeve"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Përdor klientin DHCP nga Lollipop në vend të klientit të ri DHCP të Androidit."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mbaji të dhënat celulare gjithmonë aktive edhe kur Wi‑Fi është aktiv (për ndërrim të shpejtë të rrjetit)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Të lejohet korrigjimi i USB-së?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Korrigjuesi i USB-së është vetëm për qëllime zhvillimore. Përdore për të kopjuar të dhëna mes kompjuterit dhe pajisjes tënde, për të instaluar aplikacione në pajisjen tënde pa asnjë njoftim si dhe për të lexuar të dhënat e ditarit."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Të bllokohet qasja për korrigjim të USB-së nga të gjithë kompjuterët që ke autorizuar më parë?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Të lejohen cilësimet e zhvillimit?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Këto cilësime janë të projektuara vetëm për përdorim në programim. Ato mund të shkaktojnë që pajisja dhe aplikacionet në të, të mos punojnë ose të veprojnë në mënyrë të gabuar."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifiko apl. përmes USB-së"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrollo aplikacionet e instaluara nëpërmjet ADB/ADT për sjellje të dëmshme."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Terminali lokal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktivizo aplikacionin terminal që ofron qasje në guaskën lokale"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Kontrolli HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Cakto kontrollin e HDCP-së"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Korrigjimi i gabimeve"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Zgjidh aplikacionin e korrigjimit"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nuk është caktuar asnjë aplikacion korrigjimi"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Aplikacioni i korrigjimit: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Zgjidh aplikacionin"</string>
+ <string name="no_application" msgid="2813387563129153880">"Asnjë"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Prit për korrigjuesin"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Aplikacioni i korrigjimit të gabimeve pret që korrigjuesi të bashkëngjitet para ekzekutimit"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Hyrja"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Vizatime"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Interpretimi i përshpejtuar i harduerit"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitorimi"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Aktivizo modalitetin e rreptë"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Ndriço ekranin kur aplikacionet kryejnë operacione të gjata teksa bashkëveprojnë"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Vendndodhja e treguesit"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Mbivendosja e ekranit tregon të dhënat e prekjes"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Shfaq prekjet"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Shfaq trajektoren vizuale për prekjet"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Shfaq përditësimet e sipërfaqes"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Ndriço të gjitha sipërfaqet e dritares kur ato të përditësohen"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Shfaq përditësimet e pamjes së GPU-së"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ndriço pamjet brenda dritareve kur dizajnohen me GPU-në"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Shfaq përditësimet e shtresave të harduerit"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Ndriço në të gjelbër shtresat e harduerit që përditësohen"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Korrigjo konfliktet e GPU-së"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Çaktivizo mbishtresimin e HW-së"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Përdor gjithmonë GPU-në për përbërjen e ekranit"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulo hapësirën e ngjyrës"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Aktivizo gjurmët e OpenGL-së"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Çaktivizo rrugëzuezin e audios përmes USB-së"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Çaktivizo rrugëzuesin automatik për te kufjet ose altoparlantët"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Shfaq konturet e kuadrit"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Shfaq konturet e klipit, hapësirat etj."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Detyro drejtimin e shkrimit nga e djathta në të majtë"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Ndrysho me detyrim drejtimin e planit të ekranit nga e djathta në të majtë për të gjitha vendet"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Shfaq përdorimin e CPU-së"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Mbivendosja e ekranit tregon përdorimin e CPU-së"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Detyro interpretimin e GPU-së"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Detyro përdorimin e GPU-së për vizatimin e dytë"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Detyro 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Aktivizo 4x MSAA në aplikacionet OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Korrigjo veprimet mbi klipet jodrejtkëndore"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Interpretimi i profilit të GPU-së"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Animacioni i dritares"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Animacioni kalimtar"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Kohëzgjatja e animatorit"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulo ekranet dytësore"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Aplikacionet"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Mos i ruaj aktivitetet"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Fshi çdo aktivitet sapo të largohet përdoruesi"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Kufizimi i proceseve në sfond"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Shfaq raportet ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Shfaq raportet ANR (Aplikacioni nuk përgjigjet) për aplikacionet në sfond"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Detyro lejimin në hapësirën e jashtme"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Bën që çdo aplikacion të jetë i përshtatshëm për t\'u shkruar në hapësirën ruajtëse të jashtme, pavarësisht nga vlerat e manifestit"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Detyro madhësinë e ndryshueshme për aktivitetet"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Bën që të gjitha aktivitetet të kenë madhësi të ndryshueshme për përdorimin me shumë dritare, pavarësisht vlerave të manifestit."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Fjalëkalimi rezervë i kompjuterit"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Rezervimet e plota në kompjuter nuk janë të mbrojtura aktualisht"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Prek për të ndryshuar ose hequr fjalëkalimin për rezervime të plota të desktopit"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Fjalëkalimi i ri u vendos"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Fjalëkalimi i ri dhe konfirmimi nuk përputhen"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Vendosja e fjalëkalimit dështoi"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Të gjalla (parazgjedhja)"</item>
+ <item msgid="8446070607501413455">"Natyrale"</item>
+ <item msgid="6553408765810699025">"Standarde"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Ngjyra të përmirësuara"</item>
+ <item msgid="8280754435979370728">"Ngjyra natyrale siç shikohen me sy të lirë"</item>
+ <item msgid="5363960654009010371">"Ngjyra të optimizuara për përmbajtjet dixhitale"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Aplikacionet joaktive"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Joaktiv. Preke për ta ndryshuar."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Preke për ta ndryshuar."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Shërbimet në ekzekutim"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Shiko dhe kontrollo shërbimet që po ekzekutohen aktualisht"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Modaliteti i natës"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Çaktivizuar"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Gjithmonë aktive"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatike"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konverto në enkriptimin e skedarit"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konverto..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Enkriptimi i skedarit është kryer tashmë"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Po konvertohet në enkriptimin e bazuar te skedari"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konverto ndarjen e të dhënave në enkriptimin e bazuar te skedari.\n !!Paralajmërim!! Kjo gjë do të spastrojë të gjitha të dhënat e tua.\n Ky funksion është alfa dhe mund të mos punojë si duhet.\n Shtyp \"Pastro dhe konverto...\" për të vazhduar."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Pastro dhe konverto..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Modalitti i ngjyrave të figurës"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Përdor sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Çaktivizuar"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromaci"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomali (e kuqe - e gjelbër)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (e kuqe - e gjelbër)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomali (e kaltër - e verdhë)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Korrigjimi i ngjyrës"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ky funksion është eksperimental dhe mund të ndikojë në veprimtari."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Mbivendosur nga <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index cc60251..cd44e15 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Блокирано"</item>
<item msgid="1805837518286731242">"Привремено избегавање лоше везе"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Никад не проверавај"</item>
+ <item msgid="6042769699089883931">"Потражи само DRM садржај"</item>
+ <item msgid="9174900380056846820">"Увек проверавај"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Никада не користи HDCP проверу"</item>
+ <item msgid="3878793616631049349">"Користи HDCP проверу само за DRM садржај"</item>
+ <item msgid="45075631231212732">"Увек користи HDCP проверу"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB по баферу евиденције"</item>
+ <item msgid="2822309747675758628">"256 kB по баферу евиденције"</item>
+ <item msgid="6699306198357496731">"1 MB по баферу евиденције"</item>
+ <item msgid="5748528643937500349">"4 MB по баферу евиденције"</item>
+ <item msgid="1978629051085111592">"16 MB по баферу евиденције"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Анимација је искључена"</item>
+ <item msgid="6624864048416710414">"Размера анимације 0,5x"</item>
+ <item msgid="2219332261255416635">"Размера анимације 1x"</item>
+ <item msgid="3544428804137048509">"Размера анимације 1,5x"</item>
+ <item msgid="3110710404225974514">"Размера анимације 2x"</item>
+ <item msgid="4402738611528318731">"Размера анимације 5x"</item>
+ <item msgid="6189539267968330656">"Размера анимације 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Анимација је искључена"</item>
+ <item msgid="3375781541913316411">"Размера анимације 0,5x"</item>
+ <item msgid="1991041427801869945">"Размера анимације 1x"</item>
+ <item msgid="4012689927622382874">"Размера анимације 1,5x"</item>
+ <item msgid="3289156759925947169">"Размера анимације 2x"</item>
+ <item msgid="7705857441213621835">"Размера анимације 5x"</item>
+ <item msgid="6660750935954853365">"Размера анимације 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Анимација је искључена"</item>
+ <item msgid="1138649021950863198">"Размера анимације 0,5x"</item>
+ <item msgid="4394388961370833040">"Размера анимације 1x"</item>
+ <item msgid="8125427921655194973">"Размера анимације 1,5x"</item>
+ <item msgid="3334024790739189573">"Размера анимације 2x"</item>
+ <item msgid="3170120558236848008">"Размера анимације 5x"</item>
+ <item msgid="1069584980746680398">"Размера анимације 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ниједно"</item>
+ <item msgid="9033194758688161545">"480 пиксела"</item>
+ <item msgid="1025306206556583600">"480 пиксела (безбедно)"</item>
+ <item msgid="1853913333042744661">"720 пиксела"</item>
+ <item msgid="3414540279805870511">"720 пиксела (безбедно)"</item>
+ <item msgid="9039818062847141551">"1080 пиксела"</item>
+ <item msgid="4939496949750174834">"1080 пиксела (безбедно)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (безбедно)"</item>
+ <item msgid="3547211260846843098">"4K (увећана резолуција)"</item>
+ <item msgid="5411365648951414254">"4K (увећана резолуција, безбедно)"</item>
+ <item msgid="1311305077526792901">"720 пиксела, 1080 пикс. (2 екрана)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ниједан"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (графика)"</item>
+ <item msgid="1340692776955662664">"Групно позивање функције glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Искључено"</item>
+ <item msgid="675719912558941285">"Нацртај област за исецање која није правоугаоног облика плавом бојом"</item>
+ <item msgid="1064373276095698656">"Истакни зеленом тестиране команде за цртање"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Искључено"</item>
+ <item msgid="2751513398307949636">"На екрану у виду трака"</item>
+ <item msgid="1851438178120770973">"У adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Искључи"</item>
+ <item msgid="7688197031296835369">"Прикажи области преклапања"</item>
+ <item msgid="2290859360633824369">"Прикажи области за деутераномалију"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандардно ограничење"</item>
+ <item msgid="4071574792028999443">"Без позадинских процеса"</item>
+ <item msgid="4810006996171705398">"Највише један процес"</item>
+ <item msgid="8586370216857360863">"Највише два процеса"</item>
+ <item msgid="836593137872605381">"Највише три процеса"</item>
+ <item msgid="7899496259191969307">"Највише четири процеса"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Пуњење"</item>
+ <item msgid="5220695614993094977">"MTP (протокол за трансфер медија)"</item>
+ <item msgid="2086000968159047375">"PTP (протокол за пренос слика)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB етернет)"</item>
+ <item msgid="1718924214939774352">"Извор звука"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 4ed4739..036622f 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Изаберите профил"</string>
<string name="category_personal" msgid="1299663247844969448">"Лично"</string>
<string name="category_work" msgid="8699184680584175622">"Посао"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Опције за програмера"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Омогући опције за програмера"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Подешавање опција за програмирање апликације"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Опције за програмере нису доступне за овог корисника"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Подешавања VPN-а нису доступна за овог корисника"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Подешавања привезивања нису доступна за овог корисника"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Подешавања назива приступне тачке нису доступна за овог корисника"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Отклањање USB грешака"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Режим отклањања грешака када је USB повезан"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Опозивање одобрења за уклањање USB грешака"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Пречица за извештај о грешкама"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Прикажи дугме у менију напајања за прављење извештаја о грешкама"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Не закључавај"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран неће бити у режиму спавања током пуњења"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Омогући snoop евиденцију за Bluetooth HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Сними све Bluetooth HCI пакете у датотеци"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Откључавање OEM-a"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи откључавање функције за покретање"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Желите ли да дозволите откључавање произвођача оригиналне опреме (OEM)?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"УПОЗОРЕЊЕ: Функције за заштиту уређаја неће функционисати на овом уређају док је ово подешавање укључено."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Изабери апликацију за лажну локацију"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Апликација за лажну локацију није подешена"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Апликација за лажну локацију: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Умрежавање"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Сертификација бежичног екрана"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Омогући детаљнију евиденцију за Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Агресиван прелаз са Wi‑Fi мреже на мобилну"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Увек дозволи скенирање Wi‑Fi-ја у ромингу"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Користи застарели DHCP клијент"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Подаци за мобилне уређаје су увек активни"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Дозволи/забрани скенирање Wi-Fi-ја у ромингу на основу присутног протока података на интерфејсу"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Величине бафера података у програму за евидентирање"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Изаберите величине по баферу евиденције"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Изаберите конфигурацију USB-а"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Изаберите конфигурацију USB-а"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Дозволи лажне локације"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Дозволи лажне локације"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Омогући проверу атрибута за преглед"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Користите DHCP клијент из Lollipop-а уместо новог Android DHCP клијента."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Нека подаци за мобилне уређаје увек буду активни, чак и када је Wi‑Fi активан (ради брзе промене мреже)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Дозволи отклањање USB грешака?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Отклањање USB грешака намењено је само за сврхе програмирања. Користите га за копирање података са рачунара на уређај и обрнуто, инсталирање апликација на уређају без обавештења и читање података из евиденције."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Желите ли да опозовете приступ отклањању USB грешака са свих рачунара које сте претходно одобрили?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Желите ли да омогућите програмерска подешавања?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ова подешавања су намењена само за програмирање. Могу да изазову престанак функционисања или неочекивано понашање уређаја и апликација на њему."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Верификуј апликације преко USB-а"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Проверава да ли су апликације инсталиране преко ADB-а/ADT-а штетне."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локални терминал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Омогући аплик. терминала за приступ локалном командном окружењу"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP провера"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Подешавање понашања HDCP провере"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Отклањање грешака"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Изаберите апликацију за отклањање грешака"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Нема подешених апликација за отклањање грешака"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Апликација за отклањање грешака: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Бирање апликације"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ниједна"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Сачекај програм за отклањање грешака"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Апликација чека програм за отклањање грешака да приложи пре извршавања"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Унос"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Цртање"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Хардверски убрзано приказивање"</string>
+ <string name="media_category" msgid="4388305075496848353">"Медији"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Надгледање"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Омогућен је строги режим"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Нека екран трепери када апликације обављају дуге операције на главној нити"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Локација показивача"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Постав. елемент са тренутним подацима о додиру"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Прикажи додире"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Прикажи визуелне повратне информације за додире"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Прикажи ажурирања површине"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Осветли све површине прозора када се ажурирају"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Прикажи ажур. GPU приказа"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Осветли приказе у прозор. када се црта са GPU-ом"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Прикажи ажурирања хардверских слојева"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Хардверски слојеви трепере зелено када се ажурирају"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Отклони грешке GPU преклапања"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Онемог. HW пост. елементе"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Увек користи GPU за компоновање екрана"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Симулирај простор боје"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Омогући OpenGL трагове"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Онемогући USB преусм. звука"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Онемогући аутомат. преусмер. на USB аудио периферне уређаје"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Прикажи границе распореда"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Прикажи границе клипа, маргине итд."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Наметни смер распореда здесна налево"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Наметни смер распореда екрана здесна налево за све локалитете"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Прик. употребу процесора"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Постав. елемент са тренутном употребом процесора"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Принудни приказ пом. GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Принудно користи GPU за 2D цртање"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Наметни 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Омогући 4x MSAA у OpenGL ES 2.0 апликацијама"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Отклони грешке у вези са радњама за исецање области које нису правоугаоног облика"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Прикажи профил помоћу GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Размера анимације прозора"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Размера анимације прелаза"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Аниматорова размера трајања"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Симулирај секундарне екране"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Апликације"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Не чувај активности"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Уништи сваку активност чим је корисник напусти"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Ограничење позадинских процеса"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Прикажи све ANR-ове"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Прикажи дијалог Апликација не реагује за апликације у позадини"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Принудно дозволи апликације у спољној"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Омогућава уписивање свих апликација у спољну меморију, без обзира на вредности манифеста"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Принудно омогући промену величине активности"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Омогућава промену величине свих активности за режим са више прозора, без обзира на вредности манифеста."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Лозинка резервне копије за рачунар"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Резервне копије читавог система тренутно нису заштићене"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Додирните да бисте променили или уклонили лозинку за прављење резервних копија читавог система на рачунару"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Постављена је нова лозинка резервне копије"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Нова лозинка и њена потврда се не подударају"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Постављање лозинке резервне копије није успело"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Живописан (подразумевано)"</item>
+ <item msgid="8446070607501413455">"Природан"</item>
+ <item msgid="6553408765810699025">"Стандардан"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Побољшане боје"</item>
+ <item msgid="8280754435979370728">"Природне боје налик онима које региструје око"</item>
+ <item msgid="5363960654009010371">"Боје оптимизоване за дигитални садржај"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивне апликације"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Неактивна. Додирните да бисте је активирали."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Активна. Додирните да бисте је деактивирали."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Покренуте услуге"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Приказ и контрола тренутно покренутих услуга"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Ноћни режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Онемогућено"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Увек укључено"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Аутоматски"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Конвертуј у шифровање датотека"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Конвертуј..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Већ се користи шифровање датотека"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Конвертовање у шифровање појединачних датотека"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Конвертујте шифровање партиције података у шифровање појединачних датотека.\n !!Упозорење!! Тиме бришете све податке.\n Ово је алфа верзија функције и вероватно неће функционисати исправно.\n Притисните „Избриши и конвертуј...“ да бисте наставили."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Избриши и конвертуј..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Режим боја слика"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Користи sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Онемогућено је"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Једнобојност"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Деутераномалија (црвено-зелено)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалија (црвено-зелено)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалија (плаво-жуто)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Корекција боја"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ова функција је експериментална и може да утиче на перформансе."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Замењује га <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index 02b352c..54537f4 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Blockerat"</item>
<item msgid="1805837518286731242">"Undviker just nu dålig anslutning"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Kontrollera aldrig"</item>
+ <item msgid="6042769699089883931">"Kontrollera bara DRM-innehåll"</item>
+ <item msgid="9174900380056846820">"Kontrollera alltid"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Använd aldrig HDCP-kontroll"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 kB"</item>
+ <item msgid="505611754508988476">"256 kB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 kB"</item>
+ <item msgid="3534782711045262344">"256 kB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 kB/loggbuffert"</item>
+ <item msgid="2822309747675758628">"256 kB/loggbuffert"</item>
+ <item msgid="6699306198357496731">"1 MB/loggbuffert"</item>
+ <item msgid="5748528643937500349">"4 MB/loggbuffert"</item>
+ <item msgid="1978629051085111592">"16 MB/loggbuffert"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animering avstängd"</item>
+ <item msgid="6624864048416710414">"Animering i skala 0,5x"</item>
+ <item msgid="2219332261255416635">"Animering i skala 1x"</item>
+ <item msgid="3544428804137048509">"Animering i skala 1,5x"</item>
+ <item msgid="3110710404225974514">"Animering i skala 2x"</item>
+ <item msgid="4402738611528318731">"Animering i skala 5x"</item>
+ <item msgid="6189539267968330656">"Animering i skala 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animering avstängd"</item>
+ <item msgid="3375781541913316411">"Animering i skala 0,5x"</item>
+ <item msgid="1991041427801869945">"Animering i skala 1x"</item>
+ <item msgid="4012689927622382874">"Animering i skala 1,5x"</item>
+ <item msgid="3289156759925947169">"Animering i skala 2x"</item>
+ <item msgid="7705857441213621835">"Animering i skala 5x"</item>
+ <item msgid="6660750935954853365">"Animering i skala 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animering avstängd"</item>
+ <item msgid="1138649021950863198">"Animering i skala 0,5x"</item>
+ <item msgid="4394388961370833040">"Animering i skala 1x"</item>
+ <item msgid="8125427921655194973">"Animering i skala 1,5x"</item>
+ <item msgid="3334024790739189573">"Animering i skala 2x"</item>
+ <item msgid="3170120558236848008">"Animering i skala 5x"</item>
+ <item msgid="1069584980746680398">"Animering i skala 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Inga"</item>
+ <item msgid="9033194758688161545">"480 p"</item>
+ <item msgid="1025306206556583600">"480 p (säkert)"</item>
+ <item msgid="1853913333042744661">"720 p"</item>
+ <item msgid="3414540279805870511">"720 p (säkert)"</item>
+ <item msgid="9039818062847141551">"1080 p"</item>
+ <item msgid="4939496949750174834">"1080 p (säkert)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (säkert)"</item>
+ <item msgid="3547211260846843098">"4K (uppskalat)"</item>
+ <item msgid="5411365648951414254">"4K (uppskalat, säkert)"</item>
+ <item msgid="1311305077526792901">"720 p, 1080 p (dubbla skärmar)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Inga"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (grafik)"</item>
+ <item msgid="1340692776955662664">"Anropsstacken på glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Av"</item>
+ <item msgid="675719912558941285">"Rita icke-rektangulära urklippsavsnitt i blått"</item>
+ <item msgid="1064373276095698656">"Markera testade ritningskommandon i grönt"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Av"</item>
+ <item msgid="2751513398307949636">"På skärmen som fält"</item>
+ <item msgid="1851438178120770973">"I adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Av"</item>
+ <item msgid="7688197031296835369">"Visa områden som överskrider gränsen"</item>
+ <item msgid="2290859360633824369">"Visa områden för deuteranomali"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standardgräns"</item>
+ <item msgid="4071574792028999443">"Inga bakgrundsprocesser"</item>
+ <item msgid="4810006996171705398">"Högst 1 process"</item>
+ <item msgid="8586370216857360863">"Högst 2 processer"</item>
+ <item msgid="836593137872605381">"Högst 3 processer"</item>
+ <item msgid="7899496259191969307">"Högst 4 processer"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Laddar"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB-ethernet)"</item>
+ <item msgid="1718924214939774352">"Ljudkälla"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index 1db99a59..2f95b06 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Välj profil"</string>
<string name="category_personal" msgid="1299663247844969448">"Personligt"</string>
<string name="category_work" msgid="8699184680584175622">"Arbetet"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Utvecklaralternativ"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Aktivera utvecklaralternativ"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Ange alternativ för apputveckling"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Utvecklaralternativ är inte tillgängliga för den här användaren"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN-inställningarna är inte tillgängliga för den här användaren"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Internetdelningsinställningarna är inte tillgängliga för den här användaren"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Inställningarna för åtkomstpunktnamn är inte tillgängliga för den här användaren"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB-felsökning"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Felsökningsläge när USB har anslutits"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Återkalla åtkomst till USB-felsökning"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Genväg till felrapport"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Visa en knapp för felrapportering i extramenyn"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Håll aktiverad"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skärmen vilar aldrig när laddning pågår"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivera HCI snoop-logg för Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Samla alla HCI-paket för Bluetooth i en fil"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-upplåsning"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillåt att bootloadern låses upp"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vill du tillåta OEM-upplåsning?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"Varning! Funktionerna för enhetsskydd fungerar inte på enheten när den här inställningen är aktiverad."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Välj app för påhittad plats"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Ingen app för påhittad plats har angetts"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App för påhittad plats: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Nätverk"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certifiering för Wi-Fi-skärmdelning"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivera utförlig loggning för Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Aggressiv överlämning fr. Wi-Fi t. mobil"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Tillåt alltid sökning efter Wi-Fi-roaming"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Använd äldre DHCP-klient"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobildata alltid aktiverad"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Tillåt/tillåt inte sökning efter Wi-Fi-roaming utifrån mängden datatrafik i gränssnittet"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Buffertstorlekar för logg"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Välj loggstorlekar per loggbuffert"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Välj USB-konfiguration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Välj USB-konfiguration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Tillåt skenplatser"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Tillåt skenplatser"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Aktivera inspektion av visningsattribut"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Använd DHCP-klienten från Lollipop i stället för den nya Android DHCP-klienten."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Håll alltid mobildata aktiverad, även när Wi-Fi är aktiverat (så att du snabbt kan byta mellan nätverk)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Ska USB-felsökning tillåtas?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB-felsökning ska endast användas i utvecklingssyfte. Använd den för att kopiera data mellan datorn och enheten, installera appar på enheten utan meddelanden och läsa loggdata."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Vill du återkalla åtkomst till USB-felsökning för alla datorer som du tidigare har godkänt?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Tillåt utvecklarinställningar?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Inställningarna är endast avsedda att användas för utvecklingsändamål. De kan orsaka problem med enheten eller apparna som finns installerade på den."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifiera appar via USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kontrollera om appar som installeras via ADB/ADT kan vara skadliga."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokal terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Aktivera en terminalapp som ger åtkomst till hyllor lokalt"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP-kontroll"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Konfigurera HDCP-kontroll"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Felsökning"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Välj app att felsöka"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Du har inte angett vilken app som ska felsökas"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Felsöker appen: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Välj app"</string>
+ <string name="no_application" msgid="2813387563129153880">"Ingen"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Vänta på felsökningen"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Felsökaren måste ansluta till appen först"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Indata"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Ritning"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Maskinvaruaccelererad rendering"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Övervakning"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Strikt läge aktiverat"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Tänd skärm när app gör omfattande åtgärd på huvudtråd"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Pekarens plats"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Överlägg på skärmen med aktuella skärmtryck"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Visa tryckningar"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Visa visuell feedback för tryckningar"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Visa ytuppdateringar"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Hela fönstret blinkar vid uppdatering"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Visa GPU-visningsuppdateringar"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Visningar blinkar i fönster vid GPU-ritningar"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Visa maskinvaruskiktuppd."</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Låt maskinvaruskikt blinka grönt vid uppdateringar"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Felsök överskriden GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Inaktivera HW-överlagringar"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Använd alltid GPU för skärmsammansättning"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Simulera färgrymd"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Aktivera OpenGL-spår"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Inaktivera ljud via USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Inaktivera autom. ljudomkoppling till USB-enheter"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Visa layoutgränser"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Visa gränser för videoklipp, marginaler m.m."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Tvinga fram RTL-layout"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Tvinga fram RTL-skärmlayout (hö–vä) för alla språk"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Visa CPU-användning"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Överlägg på skärmen med aktuell CPU-användning"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Framtvinga GPU-rendering"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Tvingad användning av GPU för 2D-ritning"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Aktivera 4x MSAA i OpenGL ES 2.0-appar"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Felsök icke-rektangulära urklippsåtgärder"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profilens GPU-rendering"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Skala, fönsteranimering"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Skala, övergångsanimering"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Längdskala för Animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulera sekundär skärm"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Appar"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Behåll inte aktiviteter"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Förstör aktiviteter så fort användaren lämnar dem"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Begränsa bakgrundsprocess"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Visa alla som inte svarar"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Visa dialogrutan om att appen inte svarar för bakgrundsappar"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Tillåt appar i externt lagringsutrymme"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Appen kan skrivas till extern lagring, oavsett manifestvärden"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Framtvinga storleksanpassning för aktiviteter"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Detta gör det möjligt att ändra storleken på alla aktiviteter i flerfönsterläge, oavsett manifestvärden."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Lösenord för säkerhetskopia av datorn"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"De fullständiga säkerhetskopiorna av datorn är för närvarande inte skyddade"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Tryck om du vill ändra eller ta bort lösenordet för fullständig säkerhetskopiering av datorn"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Ett nytt lösenord har angetts"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Det nya lösenordet och bekräftelsen stämmer inte överens"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Det gick inte att ange lösenordet"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Starka (standard)"</item>
+ <item msgid="8446070607501413455">"Naturliga"</item>
+ <item msgid="6553408765810699025">"Standardfärger"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Berikade färger"</item>
+ <item msgid="8280754435979370728">"Naturliga färger så som ögat ser dem"</item>
+ <item msgid="5363960654009010371">"Färger som har anpassats för digitalt innehåll"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Inaktiva appar"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Inaktiv. Aktivera genom att trycka."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktiv. Inaktivera genom att trycka."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktiva tjänster"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Visa och styr aktiva tjänster"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Nattläge"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Inaktiverad"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Alltid på"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Automatiskt"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Konvertera till filkryptering"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Konvertera …"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Filkryptering används redan"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Konverterar till filbaserad kryptering"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Konvertera datapartitionen till filbaserad kryptering.\n Varning! All data raderas.\n Detta är en alfafunktion och fel kan uppstå.\n Tryck på Rensa och konvertera … om du vill fortsätta."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Rensa och konvertera …"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Färgläge för bilder"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Använd sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Inaktiverad"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monokromasi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomali (rött-grönt)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomali (rött-grönt)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomali (blått-gult)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Färgkorrigering"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Den här funktionen är experimentell och kan påverka prestandan."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Har åsidosatts av <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index cbd906d..450e385 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Imezuiwa"</item>
<item msgid="1805837518286731242">"Inaepuka kwa muda muunganisho mbovu"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Katu usikague"</item>
+ <item msgid="6042769699089883931">"Chunguza maudhui ya DRM pekee"</item>
+ <item msgid="9174900380056846820">"Kagua kila wakati"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Katu usitumie kikaguaji cha HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"K64"</item>
+ <item msgid="505611754508988476">"K256"</item>
+ <item msgid="6361286924268716397">"M1"</item>
+ <item msgid="6405203239560695266">"M4"</item>
+ <item msgid="3025431211013424097">"M16"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"K64"</item>
+ <item msgid="3534782711045262344">"K256"</item>
+ <item msgid="8085867209202153403">"M1"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"K64 kwa kumbukumbu"</item>
+ <item msgid="2822309747675758628">"K256 kwa kumbukumbu"</item>
+ <item msgid="6699306198357496731">"M1 kwa kumbukumbu"</item>
+ <item msgid="5748528643937500349">"M4 kwa kumbukumbu"</item>
+ <item msgid="1978629051085111592">"M16 kwa kumbukumbu"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Haiwani imezimwa"</item>
+ <item msgid="6624864048416710414">"Skeli .5x ya haiwani"</item>
+ <item msgid="2219332261255416635">"Skeli 1x ya haiwani"</item>
+ <item msgid="3544428804137048509">"Skeli 1.5x ya haiwani"</item>
+ <item msgid="3110710404225974514">"Skeli 2x ya haiwani"</item>
+ <item msgid="4402738611528318731">"Skeli 5x ya haiwani"</item>
+ <item msgid="6189539267968330656">"Skeli 10x ya haiwani"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Haiwani imezimwa"</item>
+ <item msgid="3375781541913316411">"Skeli .5x ya haiwani"</item>
+ <item msgid="1991041427801869945">"Skeli 1x ya haiwani"</item>
+ <item msgid="4012689927622382874">"Skeli 1.5x ya haiwani"</item>
+ <item msgid="3289156759925947169">"Skeli 2x ya haiwani"</item>
+ <item msgid="7705857441213621835">"Skeli 5x ya haiwani"</item>
+ <item msgid="6660750935954853365">"Skeli ya 10x ya uhuishaji"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Uhuishaji umezimwa"</item>
+ <item msgid="1138649021950863198">"Mizani .5x ya uhuishaji"</item>
+ <item msgid="4394388961370833040">"Mizani 1x ya uhuishaji"</item>
+ <item msgid="8125427921655194973">"Mizani 1.5x ya uhuishaji"</item>
+ <item msgid="3334024790739189573">"Mizani 2x ya uhuishaji"</item>
+ <item msgid="3170120558236848008">"Mizani 5x ya uhuishaji"</item>
+ <item msgid="1069584980746680398">"Mizani 10x ya uhuishaji"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Hamna"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (salama)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (salama)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (salama)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (salama)"</item>
+ <item msgid="3547211260846843098">"4k (iliyoboreshwa)"</item>
+ <item msgid="5411365648951414254">"4K (iliyoboreshwa, salama)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (skrini mbili)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Hamna"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Michoro)"</item>
+ <item msgid="1340692776955662664">"Simu imekwama kwenye glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Imezimwa"</item>
+ <item msgid="675719912558941285">"Chora eneo la klipu lisilo mstatili kwa rangi ya bluu"</item>
+ <item msgid="1064373276095698656">"Angazia amri za michoro iliyojaribiwa kwa rangi ya kijani"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Imezimwa"</item>
+ <item msgid="2751513398307949636">"Kwenye skrini kama pau"</item>
+ <item msgid="1851438178120770973">"Katika adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Zima"</item>
+ <item msgid="7688197031296835369">"Onyesha maeneo yaliyoondolewa"</item>
+ <item msgid="2290859360633824369">"Onyesha sehemu za Upofu Rangi Kijani"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Kiwango cha wastani"</item>
+ <item msgid="4071574792028999443">"Hakuna mchakato wa mandari nyuma"</item>
+ <item msgid="4810006996171705398">"Angalau mchakato 1"</item>
+ <item msgid="8586370216857360863">"Angalau michakato 2"</item>
+ <item msgid="836593137872605381">"Angalau michakato 3"</item>
+ <item msgid="7899496259191969307">"Angalau michakato 4"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Inachaji"</item>
+ <item msgid="5220695614993094977">"MTP (Itifaki ya Kuhamisha Maudhui)"</item>
+ <item msgid="2086000968159047375">"PTP (Itifaki ya Kuhamisha Picha)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethaneti ya USB)"</item>
+ <item msgid="1718924214939774352">"Chanzo cha Sauti"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index e4740ac..c4adcc9 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Chagua Wasifu"</string>
<string name="category_personal" msgid="1299663247844969448">"Ya Kibinafsi"</string>
<string name="category_work" msgid="8699184680584175622">"Kazini"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Chaguo za wasanidi"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Washa chaguo za wasanidi programu"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Weka chaguo kwa ajili ya maendeleo ya programu"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Chaguo la Wasanidi programu halipatikani kwa mtumiaji huyu"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Mipangilio ya VPN haipatikani kwa mtumiaji huyu"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Mipangilio ya kusambaza mtandao haipatikani kwa mtumiaji huyu"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Mipangilio ya Jina la Lango la Mtandao (APN) haipatikani kwa mtumiaji huyu"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Utatuzi wa USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Muundo wa kurekebisha wakati USB imeunganishwa"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Batilisha idhini za kurekebisha USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Njia ya mkato ya kuripoti hitilafu"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Onyesha kitufe cha kupokea ripoti za hitilafu katika menyu ya nguvu"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Weka skrini ikiwa imewashwa"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrini haitawahi kuzima wakati unachaji"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Washa kumbukumbu ya Bluetooth HCI Snoop"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Nasa pakiti zote za Bluetooth HCI katika faili"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Ufunguaji wa OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Ruhusu bootloader ifunguliwe"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Je, ungependa kuruhusu ufunguaji wa OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ONYO: Vipengele vya ulinzi wa kifaa havitafanya kazi kwenye kifaa hiki wakati mpangilio huu umewashwa."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Chagua programu ya eneo ya majaribio"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Hakuna programu ya eneo ya majaribio iliyosanidiwa"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Programu ya eneo ya majaribio: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Mtandao"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Chaguo za cheti cha kuonyesha pasiwaya"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Washa Uwekaji kumbukumbu za WiFi kutumia Sauti"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Ukabidhi kutoka Wifi kwenda Mtandao wa Simu"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Ruhusu Uchanganuzi wa Matumizi ya Mitandao mingine"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Tumia kiteja cha DHCP kilichopitwa na wakati"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Data ya kifaa cha mkononi inatumika kila wakati"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Ruhusu au Zuia Uchanganuzi wa Matumizi ya Mitandao mingine ya Wifi kulingana na kiasi cha trafiki ya data kilicho kwenye kiolesura"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Ukubwa wa kiweka bafa ya kumbukumbu"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Chagua ukubwa wa kila Kumbukumbu"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Chagua Usanidi wa USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Chagua Usanidi wa USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Ruhusu maeneo ya jaribio"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Ruhusu maeneo ya majaribio"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Washa ukaguzi wa sifa ya onyesho"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Tumia kiteja cha DHCP kutoka Lollipop badala ya kiteja kipya cha DHCP cha Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Washa kila wakati data ya kifaa cha mkononi, hata kama Wi-Fi inatumika (katika uzimaji wa haraka wa mtandao)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Ruhusu utatuaji USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ueuaji wa USB umekusudiwa kwa malengo ya utengenezaji tu. Itumi kunakili data kati ya kompyuta yako na kifaa chako, kusanidi programu kwa kifaa chako bila arifa, na kusoma data ya rajisi."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Unataka kubatilisha ufikiaji wa urekebishaji wa USB kutoka kwenye kompyuta zote ulizotangulia kuidhinisha?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Ruhusu mipangilio ya usanidi?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Mipangilio hii imekusudiwa kwa matumizi ya usanidi tu. Inaweza kusababisha kifaa chako na programu zilizoko kuvunjika au kutofanya kazi vizuri."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Thibitisha programu kupitia USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kagua programu zilizosakinishwa kupitia ADB/ADT kwa tabia ya kudhuru."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Kituo cha karibu"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Washa programu ya mwisho inayotoa ufikiaji mkuu wa karibu"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Inakagua HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Weka HDCP ya kukagua tabia"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Utatuaji"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Chagua programu ya utatuaji"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Hakuna programu ya utatuaji iliyowekwa"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Programu ya utatuaji: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Chagua programu"</string>
+ <string name="no_application" msgid="2813387563129153880">"Hakuna chochote"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Subiri kitatuaji"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Programu ya utatuaji husubiri kitatuaji ili kuambatisha kabla ya kutekeleza"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ingizo"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Uchoraji"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Kutunguliza kwa maunzi kulikoharakishwa"</string>
+ <string name="media_category" msgid="4388305075496848353">"Vyombo vya Habari"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Ufuatiliaji"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Modi makinifu imewezeshwa"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Mulika skrini wakati programu zinafanya uendeshaji mrefu kwenye mnyororo mkuu"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Mahali pa pointa"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Kuegeshwa kwa skrini ikionyesha data ya mguso ya sasa"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Onyesha miguso"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Onyesha mwitikio wa kuonekana wa miguso"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Onyesha masasisho ya sehemu"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Angaza dirisha lote zitakaposasisha"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Onyesha sasisho za mtazamo wa GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Kiwango cha maoni ndani ya madirisha wakati yanatolewa na GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Onyesha sasisho za safu za maunzi"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Angaza kijani safu za maunzi zinaposasisha"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Tatua uondoaji wa GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Lemaza miekeleo ya HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Daima tumia GPU kwa mchanganyiko wa skrini"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Kuiga nafasi ya rangi"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Wezesha ufuatiliaji wa OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Zima utumaji sauti kwa USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Zima utumaji otomatiki kwenda vifaa vya sauti vya USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Onyesha mipaka ya mpangilio"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Onyesha mipaka ya picha, kingo, nk."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Lazimisha uelekezaji wa muundo wa RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Lazimisha uelekezaji wa muundo wa skrini kwa RTL kwa lugha zote"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Onyesha matumizi ya CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Kuegeshwa kwa skrini ikionyesha matumizi ya sasa ya CPU"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Lazimisha kutungiliza GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Lazimisha matumizi ya GPU kwa uchoraji wa 2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Lazimisha 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Wezesha 4x MSAA katika programu za OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Tatua uendeshaji wa klipu usio mstatili"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Utungilizaji wa GPU ya wasifu"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Uhuishaji kwenye dirisha"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Mageuzi ya kipimo cha huiani"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Mizani ya muda wa uhuishaji"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Iga maonyesho ya upili"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Programu"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Usihifadhi shughuli"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Haribu kila shughuli pindi tu mtumiaji anapoondoka"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Kiwango cha mchakato wa mandari nyuma"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Onyesha ANR zote"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Onyesha kisanduku kidadisi cha Programu Haiitikii kwa programu za usuli"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Lazima uruhusu programu kwenye hifadhi ya nje"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Huweka programu kwenye hifadhi ya nje, bila kujali maelezo"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Lazimisha shughuli ziweze kubadilishwa ukubwa"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Fanya shughuli zote ziweze kubadilishwa ukubwa kwa ajili ya dirisha nyingi, bila kujali thamani za faili ya maelezo."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Nenosiri la hifadhi rudufu ya eneo kazi"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Hifadhi rudufu kamili za eneo kazi hazijalindwa kwa sasa"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Gusa ili ubadilishe au uondoe nenosiri la hifadhi rudufu kamili za eneo kazi"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Nenosiri jipya la hifadhi rudufu limewekwa"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nenosiri jipya na uthibitisho havioani"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Imeshindwa kuweka nenosiri la hifadhi rudufu"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Maridadi (chaguo-msingi)"</item>
+ <item msgid="8446070607501413455">"Asili"</item>
+ <item msgid="6553408765810699025">"Muundo-msingi"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Rangi zilizoboreshwa"</item>
+ <item msgid="8280754435979370728">"Rangi asili kama zinavyoonekana kwa macho"</item>
+ <item msgid="5363960654009010371">"Rangi zilizoboreshwa kwa ajili ya maudhui dijitali"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Programu zilizozimwa"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Imezimwa. Gusa ili ubadilishe."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Imewashwa. Gusa ili ubadilishe."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Huduma zinazoendeshwa"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Onyesha na dhibiti huduma zinazoendeshwa kwa sasa"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Hali ya usiku"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Imezimwa"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Imewashwa kila wakati"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Otomatiki"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Badilisha kuwa usimbaji fiche wa faili"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Badilisha..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Tayari faili imesimbwa kwa njia fiche"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Inabadilisha kuwa usimbaji fiche unaotegemea faili"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Badilisha sehemu za data kuwa usimbaji unaotegemea faili.\n!!Onyo!! Hatua hii itafuta data yako yote.\nKipengele hiki ni cha alpha, na huenda kisifanye kazi vizuri.\nBonyeza \'Futa na ubadilishe...\' ili uendelee."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Futa na uibadilishe..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Hali ya rangi ya picha"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Tumia sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Imezimwa"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Nyeupe na Nyeusi"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (nyekundu-kijani)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (nyekundu-kijani)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (samawati-manjano)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Usahihishaji wa rangi"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Kipengele hiki ni cha majaribio na huenda kikaathiri utendaji."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Imetanguliwa na <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ta-rIN/arrays.xml b/packages/SettingsLib/res/values-ta-rIN/arrays.xml
index c554fea..ad42159 100644
--- a/packages/SettingsLib/res/values-ta-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-ta-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"தடுக்கப்பட்டது"</item>
<item msgid="1805837518286731242">"வேகம் குறைந்த இணைப்பைத் தற்காலிகமாகத் தவிர்க்கிறது"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"எப்போதும் சரிபார்க்க வேண்டாம்"</item>
+ <item msgid="6042769699089883931">"DRM உள்ளடக்கத்தை மட்டும் சரிபார்"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K / லாக் பஃபர்"</item>
+ <item msgid="2822309747675758628">"256K / லாக் பஃபர்"</item>
+ <item msgid="6699306198357496731">"1M / லாக் பஃபர்"</item>
+ <item msgid="5748528643937500349">"4M / லாக் பஃபர்"</item>
+ <item msgid="1978629051085111592">"16M / லாக் பஃபர்"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"அனிமேஷனை முடக்கு"</item>
+ <item msgid="6624864048416710414">"அனிமேஷன் அளவு .5x"</item>
+ <item msgid="2219332261255416635">"அனிமேஷன் அளவு 1x"</item>
+ <item msgid="3544428804137048509">"அனிமேஷன் அளவு 1.5x"</item>
+ <item msgid="3110710404225974514">"அனிமேஷன் அளவு 2x"</item>
+ <item msgid="4402738611528318731">"அனிமேஷன் அளவு 5x"</item>
+ <item msgid="6189539267968330656">"அனிமேஷன் அளவு 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"அனிமேஷனை முடக்கு"</item>
+ <item msgid="3375781541913316411">"அனிமேஷன் அளவு .5x"</item>
+ <item msgid="1991041427801869945">"அனிமேஷன் அளவு 1x"</item>
+ <item msgid="4012689927622382874">"அனிமேஷன் அளவு 1.5x"</item>
+ <item msgid="3289156759925947169">"அனிமேஷன் அளவு 2x"</item>
+ <item msgid="7705857441213621835">"அனிமேஷன் அளவு 5x"</item>
+ <item msgid="6660750935954853365">"அனிமேஷன் அளவு 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"அனிமேஷனை முடக்கு"</item>
+ <item msgid="1138649021950863198">"அனிமேஷன் அளவு .5x"</item>
+ <item msgid="4394388961370833040">"அனிமேஷன் அளவு 1x"</item>
+ <item msgid="8125427921655194973">"அனிமேஷன் அளவு 1.5x"</item>
+ <item msgid="3334024790739189573">"அனிமேஷன் அளவு 2x"</item>
+ <item msgid="3170120558236848008">"அனிமேஷன் அளவு 5x"</item>
+ <item msgid="1069584980746680398">"அனிமேஷன் அளவு 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ஏதுமில்லை"</item>
+ <item msgid="9033194758688161545">"480பி"</item>
+ <item msgid="1025306206556583600">"480பி (பாதுகாப்பானது)"</item>
+ <item msgid="1853913333042744661">"720பி"</item>
+ <item msgid="3414540279805870511">"720பி (பாதுகாப்பானது)"</item>
+ <item msgid="9039818062847141551">"1080பி"</item>
+ <item msgid="4939496949750174834">"1080பி (பாதுகாப்பானது)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (பாதுகாப்பானது)"</item>
+ <item msgid="3547211260846843098">"4K (மேம்படுத்தப்பட்டது)"</item>
+ <item msgid="5411365648951414254">"4K (மேம்படுத்தப்பட்டது, பாதுகாப்பானது)"</item>
+ <item msgid="1311305077526792901">"720பி, 1080பி (இரட்டைத் திரை)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ஏதுமில்லை"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (கிராஃபிக்ஸ்)"</item>
+ <item msgid="1340692776955662664">"glGetError இல் அழைப்பின் அடுக்கு"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"முடக்கத்தில்"</item>
+ <item msgid="675719912558941285">"செவ்வகம் அல்லாத கிளிப் பகுதியை நீல நிறத்தில் வரையவும்"</item>
+ <item msgid="1064373276095698656">"சோதிக்கப்பட்ட வரைதல் கட்டளைகளைப் பச்சை நிறத்தில் தனிப்படுத்தவும்"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"முடக்கத்தில்"</item>
+ <item msgid="2751513398307949636">"திரையில் பட்டிகளாக"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo இல்"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"முடக்கத்தில்"</item>
+ <item msgid="7688197031296835369">"ஓவர்டிரா பகுதிகளைக் காட்டு"</item>
+ <item msgid="2290859360633824369">"நிறக்குருடின் பகுதிகளைக் காட்டு"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"நிலையான வரம்பு"</item>
+ <item msgid="4071574792028999443">"பின்புலச் செயல்முறைகள் இல்லை"</item>
+ <item msgid="4810006996171705398">"அதிகபட்சமாக 1 செயல்முறை"</item>
+ <item msgid="8586370216857360863">"அதிகபட்சமாக 2 செயல்முறைகள்"</item>
+ <item msgid="836593137872605381">"அதிகபட்சமாக 3 செயல்முறைகள்"</item>
+ <item msgid="7899496259191969307">"அதிகபட்சமாக 4 செயல்முறைகள்"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"சார்ஜ் ஏறுகிறது"</item>
+ <item msgid="5220695614993094977">"MTP (மீடியா பரிமாற்ற நெறிமுறை)"</item>
+ <item msgid="2086000968159047375">"PTP (படப் பரிமாற்ற நெறிமுறை)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ஈத்தர்நெட்)"</item>
+ <item msgid="1718924214939774352">"ஆடியோ மூலம்"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta-rIN/strings.xml
index aaafa68..f4fee1f 100644
--- a/packages/SettingsLib/res/values-ta-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-ta-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"சுயவிவரத்தைத் தேர்வுசெய்யவும்"</string>
<string name="category_personal" msgid="1299663247844969448">"தனிப்பட்டவை"</string>
<string name="category_work" msgid="8699184680584175622">"பணியிடம்"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"டெவெலப்பர் விருப்பங்கள்"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"டெவெலப்பர் விருப்பங்களை இயக்கு"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"பயன்பாட்டின் மேம்பாட்டிற்காக விருப்பங்களை அமை"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"இவருக்கு, டெவெலப்பர் விருப்பங்கள் இல்லை"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"இவரால் VPN அமைப்புகளை மாற்ற முடியாது"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"இவரால் இணைப்புமுறை அமைப்புகளை மாற்ற முடியாது"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"இவரால் ஆக்சஸ் பாயிண்ட் நேம் அமைப்புகளை மாற்ற முடியாது"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB பிழைத்திருத்தம்"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB இணைக்கப்பட்டிருக்கும்போது பிழைத்திருத்தப் பயன்முறையை அமை"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB பிழைத்திருத்த அங்கீகரிப்புகளைப் பெறு"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"பிழைப் புகாருக்கான குறுக்குவழி"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"பிழை அறிக்கையைப் பெற பவர் மெனுவில் விருப்பத்தைக் காட்டு"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"செயலில் வைத்திரு"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"சார்ஜ் ஏறும்போது திரை எப்போதும் உறக்கநிலைக்குச் செல்லாது"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"புளூடூத் HCI ஸ்னுப் பதிவை இயக்கு"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"கோப்பில் உள்ள எல்லா புளூடூத் HCI தொகுதிகளையும் படமெடு"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM திறத்தல்"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"பூட்லோடரைத் திறக்க அனுமதி"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM திறத்தலை அனுமதிக்கவா?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"எச்சரிக்கை: இந்த அமைப்பு இயக்கப்பட்டிருக்கும்போது, சாதன பாதுகாப்பு அம்சங்கள் இந்தச் சாதனத்தில் இயங்காது."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"போலி இருப்பிடப் பயன்பாட்டைத் தேர்ந்தெடு"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"போலி இருப்பிடப் பயன்பாடு அமைக்கப்படவில்லை"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"போலி இருப்பிடப் பயன்பாடு: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"நெட்வொர்க்கிங்"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"வயர்லெஸ் காட்சிக்கான சான்றிதழ்"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"வைஃபை அதிவிவர நுழைவை இயக்கு"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"ஒத்துழைக்காத வைஃபையிலிருந்து செல்லுலாருக்கு மாறு"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"எப்போதும் வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"அதிகாரப்பூர்வ DHCP க்ளையன்ட்டைப் பயன்படுத்து"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"செல்லுலார் தரவு எப்போதும் இயக்கத்தில்"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"இடைமுகத்தில் உள்ள ட்ராஃபிக் தரவின் அளவைப் பொறுத்து வைஃபை ரோமிங் ஸ்கேன்களை அனுமதி/அனுமதிக்காதே"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"லாகர் பஃபர் அளவுகள்"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"லாக் பஃபர் ஒன்றிற்கு லாகர் அளவுகளைத் தேர்வுசெய்க"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB உள்ளமைவைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB உள்ளமைவைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"போலி இருப்பிடங்களை அனுமதி"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"போலி இருப்பிடங்களை அனுமதி"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"காட்சி பண்புக்கூறு சோதனையை இயக்கு"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"புதிய Android DHCP க்ளையன்ட்டிற்குப் பதிலாக, Lollipop இலிருந்து DHCP க்ளையன்ட்டைப் பயன்படுத்தவும்."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"வைஃபை இயங்கும் போதும் (வேகமான நெட்வொர்க் மாற்றத்திற்கு), மொபைல் தரவை எப்போதும் இயக்கத்தில் வைக்கும்."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB பிழைத்திருத்தத்தை அனுமதிக்கவா?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB பிழைத்திருத்தம் மேம்படுத்தல் நோக்கங்களுக்காக மட்டுமே. அதை உங்கள் கணினி மற்றும் சாதனத்திற்கு இடையில் தரவை நகலெடுக்கவும், அறிவிப்பு இல்லாமல் உங்கள் சாதனத்தில் பயன்பாடுகளை நிறுவவும், பதிவு தரவைப் படிக்கவும் பயன்படுத்தவும்."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"நீங்கள் ஏற்கனவே அனுமதித்த எல்லா கணினிகளிலிருந்தும் USB பிழைத்திருத்தத்திற்கான அணுகலைத் திரும்பப்பெற வேண்டுமா?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"மேம்பட்ட அமைப்புகளை அனுமதிக்கவா?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"இந்த அமைப்பு மேம்பட்டப் பயன்பாட்டிற்காக மட்டுமே. உங்கள் சாதனம் மற்றும் அதில் உள்ள பயன்பாடுகளைச் சிதைக்கும் அல்லது தவறாகச் செயல்படும் வகையில் பாதிப்பை ஏற்படுத்தும்."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB பயன்பாடுகளை சரிபார்"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"தீங்கு விளைவிக்கும் செயல்பாட்டை அறிய ADB/ADT மூலம் நிறுவப்பட்டப் பயன்பாடுகளைச் சரிபார்."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"அக முனையம்"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"அக ஷெல் அணுகலை வழங்கும் இறுதிப் பயன்பாட்டை இயக்கு"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP சரிபார்ப்பு"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP சரிபார்க்கும் செயல்பாடுகளை அமை"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"பிழைத்திருத்தம்"</string>
+ <string name="debug_app" msgid="8349591734751384446">"பிழைத்திருத்தப் பயன்பாட்டைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"பிழைத்திருத்தப் பயன்பாடு அமைக்கப்படவில்லை"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"பிழைத்திருத்தும் பயன்பாடு: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"பயன்பாட்டைத் தேர்ந்தெடுக்கவும்"</string>
+ <string name="no_application" msgid="2813387563129153880">"ஒன்றுமில்லை"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"பிழைதிருத்திக்குக் காத்திருக்கவும்"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"பிழைதிருத்தப்பட்ட பயன்பாடு செயல்படுவதற்கு முன்பு பிழைதிருத்தியை இணைப்பதற்குக் காத்திருக்கிறது"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"உள்ளீடு"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"வரைபொருள்"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"வன்பொருள் முடுக்கத்துடன் கூடிய காட்சியாக்கம்"</string>
+ <string name="media_category" msgid="4388305075496848353">"மீடியா"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"கண்காணி"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"நிலையான பயன்முறை இயக்கப்பட்டது"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"முக்கிய தொடரிழையில் நீண்ட நேரம் செயல்படும்போது திரையைக் காட்சிப்படுத்து"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"குறிப்பான் இடம்"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"திரையின் மேல் அடுக்கானது தற்போது தொடப்பட்டிருக்கும் தரவைக் காண்பிக்கிறது"</string>
+ <string name="show_touches" msgid="1356420386500834339">"தொடுதலைக் காட்டு"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"தொடுதல்களுக்கு காட்சி விளைவைக் காட்டு"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"மேலோட்ட புதுப்பிப்புகளைக் காட்டு"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"சாளரத்தின் பரப்புநிலைகள் புதுப்பிக்கப்படும்போது, அவற்றை முழுவதுமாகக் காட்டு"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU காட்சி புதுப்பிப்புகளைக் காட்டு"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU மூலம் வரையும்போது சாளரங்களில் காட்சிகளைக் காட்டு"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"வன்பொருள் லேயர்களின் புதுப்பிப்புகளைக் காட்டு"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"வன்பொருள் லேயர்களைப் புதுப்பிக்கும்போது, அவற்றைப் பச்சை நிறத்தில் காட்டு"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ஓவர்டிராவைப் பிழைதிருத்து"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW மேலடுக்குகளை முடக்கு"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"திரைத் தொகுத்தலுக்கு எப்போதும் GPU ஐப் பயன்படுத்து"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"வண்ணத்தின் இடைவெளியை உருவகப்படுத்து"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL தடயங்களை இயக்கு"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ஆடியோ ரூட்டிங்கை முடக்கு"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ஆடியோ உபகரணத்திற்கு தன்னியக்க ரூட்டிங்கை முடக்கு"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"தளவமைப்பு எல்லைகளைக் காட்டு"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"கிளிப் எல்லைகள், ஓரங்கள், மேலும் பலவற்றைக் காட்டு"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL தளவமைப்பின் திசையை வலியுறுத்து"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"எல்லா மொழிகளுக்கும் திரையின் தளவமைப்பு திசையை RTL க்கு மாற்று"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU பயன்பாட்டைக் காட்டு"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"தற்போதைய CPU பயன்பாட்டைக் காட்டும் திரை மேலடுக்கு"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU காட்சியாக்கத்தை வலியுறுத்து"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d வரைபடத்திற்கு GPU பயன்பாட்டை வலியுறுத்து"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA ஐ வலியுறுத்து"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 பயன்பாடுகளில் 4x MSAA ஐ இயக்கு"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"செவ்வகம் அல்லாத கிளிப் செயல்பாடுகளைப் பிழைத்திருத்து"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"சுயவிவர GPU வழங்கல்"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"சாளர அனிமேஷன் அளவு"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"அனிமேஷன் மாற்றத்தின் அளவு"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"அனிமேட்டர் கால அளவு"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"இரண்டாம்நிலைக் காட்சிகளை உருவகப்படுத்து"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"பயன்பாடுகள்"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"செயல்பாடுகளை வைத்திருக்காதே"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"பயனர் வெளியேறியதும் செயல்பாடுகளை நீக்கு"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"பின்புலச் செயல்முறை வரம்பு"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"எல்லா ANRகளையும் காட்டு"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"பின்புலப் பயன்பாடுகளுக்குப் பயன்பாடு பதிலளிக்கவில்லை என்ற உரையாடலைக் காட்டு"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"பயன்பாடுகளை வெளிப்புறச் சேமிப்பிடத்தில் அனுமதி"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"மேனிஃபெஸ்ட் மதிப்புகளை பொருட்படுத்தாமல், எந்தப் பயன்பாட்டையும் வெளிப்புற சேமிப்பிடத்தில் எழுத அனுமதிக்கும்"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"செயல்பாடுகளை அளவுமாறக்கூடியதாக அமை"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"மேனிஃபெஸ்ட் மதிப்புகளைப் பொருட்படுத்தாமல், பல சாளரத்திற்கு எல்லா செயல்பாடுகளையும் அளவுமாறக்கூடியதாக அமைக்கும்."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"டெஸ்க்டாப் காப்புப்பிரதி கடவுச்சொல்"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"டெஸ்க்டாப்பின் முழு காப்புப்பிரதிகள் தற்போது பாதுகாக்கப்படவில்லை"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"டெஸ்க்டாப்பின் முழுமையான காப்புப்பிரதிகளுக்கான கடவுச்சொல்லை மாற்றுவதற்கு அல்லது அகற்றுவதற்குத் தொடவும்"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"புதிய காப்புப் பிரதியின் கடவுச்சொல் அமைக்கப்பட்டது"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"புதிய கடவுச்சொல்லும், உறுதிப்படுத்தலுக்கான கடவுச்சொல்லும் பொருந்தவில்லை"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"காப்புப் பிரதி கடவுச்சொல்லை அமைப்பதில் தோல்வி"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"வைபிரன்ட் (இயல்பு)"</item>
+ <item msgid="8446070607501413455">"இயற்கை வண்ணம்"</item>
+ <item msgid="6553408765810699025">"வழக்கமான வண்ணம்"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"மேம்படுத்தப்பட்ட வண்ணங்கள்"</item>
+ <item msgid="8280754435979370728">"கண்களால் பார்ப்பதைப் போலவே இயற்கையான வண்ணங்கள்"</item>
+ <item msgid="5363960654009010371">"டிஜிட்டல் உள்ளடக்கத்திற்கு ஏற்ப மேம்படுத்தப்பட்ட வண்ணங்கள்"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"செயலில் இல்லாத பயன்பாடுகள்"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"செயலில் இல்லை. மாற்ற, தொடவும்."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"செயலில் உள்ளது. மாற்ற, தொடவும்."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"இயங்கும் சேவைகள்"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"தற்போது இயக்கத்தில் இருக்கும் சேவைகளைப் பார்த்து கட்டுப்படுத்து"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"இரவு பயன்முறை"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"முடக்கப்பட்டது"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"எப்போதும் இயக்கத்தில் வை"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"தானியங்கு"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"கோப்பு முறைமையாக்கத்திற்கு மாற்று"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"மாற்று…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ஏற்கனவே கோப்பு முறைமையாக்கப்பட்டது"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"கோப்பு சார்ந்த முறைமையாக்கத்திற்கு மாற்றுதல்"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"தரவுப் பகிர்வை, கோப்பு சார்ந்த முறைமையாக்கத்திற்கு மாற்றவும்.\n !!எச்சரிக்கை!! இது எல்லா தரவையும் அழிக்கும்.\n இது ஆல்பா நிலை அம்சமாக இருப்பதால் சரியாகச் செயல்படாமல் போகக்கூடும்.\n தொடர, \'அழித்து, மாற்று…\' என்பதை அழுத்தவும்."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"அழித்து மாற்று…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"படத்தின் வண்ணப் பயன்முறை"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGBஐப் பயன்படுத்தும்"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"முடக்கப்பட்டது"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"மோனோகுரோமசி"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"நிறக்குருடு (சிவப்பு)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"நிறக்குருடு (பச்சை)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"நிறக்குருடு (நீலம்-மஞ்சள்)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"வண்ணத்திருத்தம்"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"இது சோதனை முறையிலான அம்சம், இது செயல்திறனைப் பாதிக்கலாம்."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> மூலம் மேலெழுதப்பட்டது"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-te-rIN/arrays.xml b/packages/SettingsLib/res/values-te-rIN/arrays.xml
index e21a5f4..9287aba 100644
--- a/packages/SettingsLib/res/values-te-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-te-rIN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"బ్లాక్ చేయబడింది"</item>
<item msgid="1805837518286731242">"బలహీన కనెక్షన్ను తాత్కాలికంగా నివారిస్తోంది"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ఎప్పటికీ తనిఖీ చేయవద్దు"</item>
+ <item msgid="6042769699089883931">"DRM కంటెంట్కు మాత్రమే తనిఖీ చేయండి"</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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"లాగ్ బఫర్కి 64K"</item>
+ <item msgid="2822309747675758628">"లాగ్ బఫర్కి 256K"</item>
+ <item msgid="6699306198357496731">"లాగ్ బఫర్కి 1M"</item>
+ <item msgid="5748528643937500349">"లాగ్ బఫర్కి 4M"</item>
+ <item msgid="1978629051085111592">"లాగ్ బఫర్కి 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"యానిమేషన్ ఆఫ్లో ఉంది"</item>
+ <item msgid="6624864048416710414">"యానిమేషన్ ప్రమాణం .5x"</item>
+ <item msgid="2219332261255416635">"యానిమేషన్ ప్రమాణం 1x"</item>
+ <item msgid="3544428804137048509">"యానిమేషన్ ప్రమాణం 1.5x"</item>
+ <item msgid="3110710404225974514">"యానిమేషన్ ప్రమాణం 2x"</item>
+ <item msgid="4402738611528318731">"యానిమేషన్ ప్రమాణం 5x"</item>
+ <item msgid="6189539267968330656">"యానిమేషన్ ప్రమాణం 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"యానిమేషన్ ఆఫ్లో ఉంది"</item>
+ <item msgid="3375781541913316411">"యానిమేషన్ ప్రమాణం .5x"</item>
+ <item msgid="1991041427801869945">"యానిమేషన్ ప్రమాణం 1x"</item>
+ <item msgid="4012689927622382874">"యానిమేషన్ ప్రమాణం 1.5x"</item>
+ <item msgid="3289156759925947169">"యానిమేషన్ ప్రమాణం 2x"</item>
+ <item msgid="7705857441213621835">"యానిమేషన్ ప్రమాణం 5x"</item>
+ <item msgid="6660750935954853365">"యానిమేషన్ ప్రమాణం 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"యానిమేషన్ ఆఫ్లో ఉంది"</item>
+ <item msgid="1138649021950863198">"యానిమేషన్ ప్రమాణం .5x"</item>
+ <item msgid="4394388961370833040">"యానిమేషన్ ప్రమాణం 1x"</item>
+ <item msgid="8125427921655194973">"యానిమేషన్ ప్రమాణం 1.5x"</item>
+ <item msgid="3334024790739189573">"యానిమేషన్ ప్రమాణం 2x"</item>
+ <item msgid="3170120558236848008">"యానిమేషన్ ప్రమాణం 5x"</item>
+ <item msgid="1069584980746680398">"యానిమేషన్ ప్రమాణం 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ఏదీ వద్దు"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (సురక్షితం)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (సురక్షితం)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (సురక్షితం)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (సురక్షితం)"</item>
+ <item msgid="3547211260846843098">"4K (రిజల్యూషన్ పెంచబడింది)"</item>
+ <item msgid="5411365648951414254">"4K (రిజల్యూ. పెంచబడింది, సురక్షితం)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (డ్యూయల్ స్క్రీన్)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ఏదీ వద్దు"</item>
+ <item msgid="9089630089455370183">"లాగ్క్యాట్"</item>
+ <item msgid="5397807424362304288">"సిస్ట్రేస్ (గ్రాఫిక్స్)"</item>
+ <item msgid="1340692776955662664">"glGetError సందర్భంలో స్టాక్ను కాల్ చేయి"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ఆఫ్లో ఉంది"</item>
+ <item msgid="675719912558941285">"దీర్ఘచతురస్రం కాని క్లిప్ ప్రాంతాన్ని నీలి రంగులో గీయండి"</item>
+ <item msgid="1064373276095698656">"పరీక్షించబడిన డ్రాయింగ్ ఆదేశాలను పచ్చ రంగులో హైలైట్ చేయండి"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ఆఫ్లో ఉంది"</item>
+ <item msgid="2751513398307949636">"స్క్రీన్లో పట్టీలుగా"</item>
+ <item msgid="1851438178120770973">"adb షెల్ డంప్సిస్ gfxinfoలో"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ఆఫ్"</item>
+ <item msgid="7688197031296835369">"ఓవర్డ్రా ప్రాంతాలను చూపండి"</item>
+ <item msgid="2290859360633824369">"డ్యూటెరానోమలీ కోసం ప్రాంతాలను చూపండి"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ప్రామాణిక పరిమితి"</item>
+ <item msgid="4071574792028999443">"నేపథ్య ప్రాసెస్లు లేవు"</item>
+ <item msgid="4810006996171705398">"గరిష్టంగా 1 ప్రాసెస్"</item>
+ <item msgid="8586370216857360863">"గరిష్టంగా 2 ప్రాసెస్లు"</item>
+ <item msgid="836593137872605381">"గరిష్టంగా 3 ప్రాసెస్లు"</item>
+ <item msgid="7899496259191969307">"గరిష్టంగా 4 ప్రాసెస్లు"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"ఛార్జింగ్"</item>
+ <item msgid="5220695614993094977">"MTP (మీడియా బదిలీ ప్రోటోకాల్)"</item>
+ <item msgid="2086000968159047375">"PTP (చిత్రం బదిలీ ప్రోటోకాల్)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ఈథర్నెట్)"</item>
+ <item msgid="1718924214939774352">"ఆడియో మూలం"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te-rIN/strings.xml
index 4b3570e..ce7fbf2 100644
--- a/packages/SettingsLib/res/values-te-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-te-rIN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"ప్రొఫైల్ను ఎంచుకోండి"</string>
<string name="category_personal" msgid="1299663247844969448">"వ్యక్తిగతం"</string>
<string name="category_work" msgid="8699184680584175622">"కార్యాలయం"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"డెవలపర్ ఎంపికలు"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"డెవలపర్ ఎంపికలను ప్రారంభించండి"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"అనువర్తన అభివృద్ధి కోసం ఎంపికలను సెట్ చేయండి"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ఈ వినియోగదారు కోసం డెవలపర్ ఎంపికలు అందుబాటులో లేవు"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN సెట్టింగ్లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"టీథరింగ్ సెట్టింగ్లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"ప్రాప్యత స్థానం పేరు సెట్టింగ్లు ఈ వినియోగదారుకి అందుబాటులో లేవు"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB డీబగ్గింగ్"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB కనెక్ట్ చేయబడినప్పుడు డీబగ్ మోడ్"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB డీబగ్ ప్రామాణీకరణలను ఉపసంహరించు"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"బగ్ నివేదిక సత్వరమార్గం"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"బగ్ నివేదికను తీసుకోవడానికి పవర్ మెనులో బటన్ను చూపు"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"సక్రియంగా ఉంచు"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"బ్లూటూత్ HCI రహస్య లాగ్ను ప్రారంభించు"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"ఫైల్లో అన్ని బ్లూటూత్ HCI ప్యాకెట్లను క్యాప్చర్ చేయి"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM అన్లాకింగ్"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"బూట్లోడర్ అన్లాక్ కావడానికి అనుమతించు"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM అన్లాకింగ్ను అనుమతించాలా?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"హెచ్చరిక: ఈ సెట్టింగ్ ఆన్ చేయబడినప్పుడు పరికరం రక్షణ లక్షణాలు ఈ పరికరంలో పని చేయవు."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"అనుకృత స్థాన అనువర్తనాన్ని ఎంచుకోండి"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"అనుకృత స్థాన అనువర్తనం ఏదీ సెట్ చేయబడలేదు"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"అనుకృత స్థాన అనువర్తనం: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"నెట్వర్కింగ్"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"వైర్లెస్ ప్రదర్శన ప్రమాణీకరణ"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi విశదీకృత లాగింగ్ను ప్రారంభించండి"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi‑Fi నుండి సెల్యులార్కి తీవ్ర ఒత్తిడితో మారడం"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi‑Fi సంచార స్కాన్లను ఎల్లప్పుడూ అనుమతించు"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"లెగసీ DHCP క్లయింట్ను ఉపయోగించు"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"ఎల్లప్పుడూ సెల్యులార్ డేటాను సక్రియంగా ఉంచు"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"ఇంటర్ఫేస్లో ఉండే డేటా ట్రాఫిక్ పరిమాణం ఆధారంగా Wi‑Fi సంచార స్కాన్లను అనుమతించు/నిరాకరించు"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"లాగర్ బఫర్ పరిమాణాలు"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"లాగ్ బఫర్కి లాగర్ పరిమా. ఎంచుకోండి"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB కాన్ఫిగరేషన్ని ఎంచుకోండి"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB కాన్ఫిగరేషన్ని ఎంచుకోండి"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"అనుకృత స్థానాలను అనుమతించు"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"అనుకృత స్థానాలను అనుమతించు"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"వీక్షణ లక్షణ పర్యవేక్షణను ప్రారంభించు"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"కొత్త Android DHCP క్లయింట్కి బదులుగా Lollipop నుండి DHCP క్లయింట్ను ఉపయోగించండి."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"ఎల్లప్పుడూ మొబైల్ డేటాను సక్రియంగా ఉంచు, Wi‑Fi సక్రియంగా ఉన్నా కూడా (వేగవంతమైన నెట్వర్క్ మార్పు కోసం)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB డీబగ్గింగ్ను అనుమతించాలా?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB డీబగ్గింగ్ అనేది అభివృద్ధి ప్రయోజనాల కోసం మాత్రమే ఉద్దేశించబడింది. మీ కంప్యూటర్ మరియు మీ పరికరం మధ్య డేటాను కాపీ చేయడానికి, నోటిఫికేషన్ లేకుండా మీ పరికరంలో అనువర్తనాలను ఇన్స్టాల్ చేయడానికి మరియు లాగ్ డేటాను చదవడానికి దీన్ని ఉపయోగించండి."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"మీరు గతంలో ప్రామాణీకరించిన అన్ని కంప్యూటర్ల నుండి USB డీబగ్గింగ్కు ప్రాప్యతను ఉపసంహరించాలా?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"అభివృద్ధి సెట్టింగ్లను అనుమతించాలా?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"ఈ సెట్టింగ్లు అభివృద్ధి వినియోగం కోసం మాత్రమే ఉద్దేశించబడినవి. వీటి వలన మీ పరికరం మరియు దీనిలోని అనువర్తనాలు విచ్ఛిన్నం కావచ్చు లేదా తప్పుగా ప్రవర్తించవచ్చు."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB ద్వారా అనువర్తనాలను ధృవీకరించు"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"హానికరమైన ప్రవర్తన కోసం ADB/ADT ద్వారా ఇన్స్టాల్ చేయబడిన అనువర్తనాలను తనిఖీ చేయి."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"స్థానిక టెర్మినల్"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"స్థానిక షెల్ ప్రాప్యతను అందించే టెర్మినల్ అనువర్తనాన్ని ప్రారంభించు"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP తనిఖీ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP తనిఖీ ప్రవర్తనను సెట్ చేయండి"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"డీబగ్గింగ్"</string>
+ <string name="debug_app" msgid="8349591734751384446">"డీబగ్ అనువర్తనాన్ని ఎంచుకోండి"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"డీబగ్ అనువర్తనం సెట్ చేయబడలేదు"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"డీబగ్గింగ్ అనువర్తనం: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"అనువర్తనాన్ని ఎంచుకోండి"</string>
+ <string name="no_application" msgid="2813387563129153880">"ఏదీ వద్దు"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"డీబగ్గర్ కోసం వేచి ఉండండి"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"డీబగ్ చేయబడిన అనువర్తనం అమలు కావడానికి ముందు జోడించాల్సిన డీబగ్గర్ కోసం వేచి ఉంటుంది"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ఇన్పుట్"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"డ్రాయింగ్"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"హార్డ్వేర్ వేగవంతమైన భాషాంతరీకరణ"</string>
+ <string name="media_category" msgid="4388305075496848353">"మీడియా"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"పర్యవేక్షణ"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"ఖచ్చితమైన మోడ్ ప్రారంభించబడింది"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"అనువర్తనాలు ప్రధాన థ్రెడ్లో సుదీర్ఘ చర్యలు చేసేటప్పుడు స్క్రీన్ను ఫ్లాష్ చేయండి"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"పాయింటర్ స్థానం"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"ప్రస్తుత స్పర్శ డేటాను చూపేలా స్క్రీన్ అతివ్యాప్తి చేయండి"</string>
+ <string name="show_touches" msgid="1356420386500834339">"స్పర్శ ప్రదేశాలను చూపు"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"స్పర్శలకు సంబంధించిన దృశ్యమాన అభిప్రాయాన్ని చూపు"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"సర్ఫేస్ నవీకరణలను చూపండి"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"పూర్తి విండో ఉపరితలాలు నవీకరించబడినప్పుడు వాటిని ఫ్లాష్ చేయండి"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU వీక్షణ నవీకరణలను చూపండి"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPUతో గీసినప్పుడు విండోల లోపల వీక్షణలను ఫ్లాష్ చేయండి"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"హార్డ్వేర్ లేయర్ల నవీకరణలను చూపండి"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"హార్డ్వేర్ లేయర్లు నవీకరించబడినప్పుడు వాటిని ఆకుపచ్చ రంగులో ఫ్లాష్ చేయండి"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ఓవర్డ్రాను డీబగ్ చేయండి"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW అతివ్యాప్తులను నిలిపివేయి"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"స్క్రీన్ కంపోజిషనింగ్ కోసం ఎల్లప్పుడూ GPUని ఉపయోగించు"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"రంగు అంతరాన్ని అనుకరించు"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ట్రేస్లను ప్రారంభించండి"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ఆడియో రూటిం. నిలిపి."</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ఆడియో పరికరాలకు స్వయం. రూటింగ్ను నిలిపివేయండి"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"లేఅవుట్ బౌండ్లను చూపండి"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"క్లిప్ సరిహద్దులు, అంచులు మొ. చూపు"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL లేఅవుట్ దిశను నిర్భందం చేయండి"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"అన్ని లొకేల్ల కోసం RTLకి స్క్రీన్ లేఅవుట్ దిశను నిర్భందించు"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU వినియోగాన్ని చూపు"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"ప్రస్తుత CPU వినియోగాన్ని చూపేలా స్క్రీన్ అతివ్యాప్తి చేయబడుతుంది"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"నిర్బంధంగా GPU భాషాంతరీకరణ"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2d డ్రాయింగ్ కోసం GPU నిర్భంద వినియోగం"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"నిర్భందం 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 అనువర్తనాల్లో 4x MSAAను ప్రారంభించండి"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"దీర్ఘ చతురస్రం కాని క్లిప్ చర్యలను డీబగ్ చేయండి"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"ప్రొఫైల్ GPU భాషాంతరీకరణ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"విండో యానిమేషన్ ప్రమాణం"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"పరివర్తన యానిమేషన్ ప్రమాణం"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"యానిమేటర్ వ్యవధి ప్రమాణం"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ప్రత్యామ్నాయ ప్రదర్శనలను అనుకరించండి"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"అనువర్తనాలు"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"కార్యాచరణలను ఉంచవద్దు"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ప్రతి కార్యాచరణను వినియోగదారు నిష్క్రమించిన వెంటనే తొలగించండి"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"నేపథ్య ప్రాసెస్ పరిమితి"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"అన్ని ANRలను చూపు"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"నేపథ్య అనువర్తనాల కోసం అనువర్తనం ప్రతిస్పందించడం లేదు డైలాగ్ను చూపు"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"అనువర్తనాలను బాహ్య నిల్వలో నిర్బంధంగా అనుమతించు"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ఏ అనువర్తనాన్ని అయినా మానిఫెస్ట్ విలువలతో సంబంధం లేకుండా బాహ్య నిల్వలో వ్రాయగలిగేలా అనుమతిస్తుంది"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"కార్యాచరణలను పరిమాణం మార్చగలిగేలా నిర్బంధించు"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"మానిఫెస్ట్ విలువలతో సంబంధం లేకుండా అన్ని కార్యాచరణలను బహుళ విండోల్లో సరిపోయేటట్లు పరిమాణం మార్చగలిగేలా చేస్తుంది."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"డెస్క్టాప్ బ్యాకప్ పాస్వర్డ్"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"డెస్క్టాప్ పూర్తి బ్యాకప్లు ప్రస్తుతం రక్షించబడలేదు"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"డెస్క్టాప్ పూర్తి బ్యాకప్ల కోసం పాస్వర్డ్ను మార్చడానికి లేదా తీసివేయడానికి తాకండి"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"కొత్త బ్యాకప్ పాస్వర్డ్ను సెట్ చేసారు"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"కొత్త పాస్వర్డ్ మరియు నిర్ధారణ సరిపోలడం లేదు"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"బ్యాకప్ పాస్వర్డ్ను సెట్ చేయడంలో వైఫల్యం"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"సచేతనం (డిఫాల్ట్)"</item>
+ <item msgid="8446070607501413455">"సహజం"</item>
+ <item msgid="6553408765810699025">"ప్రామాణికం"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"మెరుగైన రంగులు"</item>
+ <item msgid="8280754435979370728">"కంటికి కనిపించే విధంగా సహజమైన రంగులు"</item>
+ <item msgid="5363960654009010371">"డిజిటల్ కంటెంట్ కోసం అనుకూలీకరించిన రంగులు"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"నిష్క్రియ అనువర్తనాలు"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"నిష్క్రియంగా ఉంది. టోగుల్ చేయడానికి తాకండి."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"సక్రియంగా ఉంది. టోగుల్ చేయడానికి తాకండి."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"అమలులో ఉన్న సేవలు"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ప్రస్తుతం అమలులో ఉన్న సేవలను వీక్షించండి మరియు నియంత్రించండి"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"రాత్రి మోడ్"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"నిలిపివేయబడింది"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ఎల్లప్పుడూ ఆన్లో ఉంచు"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"స్వయంచాలకం"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"ఫైల్ గుప్తీకరణకు మార్చు"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"మార్చండి…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"ఫైల్ ఇప్పటికే గుప్తీకరించబడింది"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"ఫైల్ ఆధారిత గుప్తీకరణకు మార్చడం"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"డేటా భాగాన్ని ఫైల్ ఆధారిత గుప్తీకరణకు మార్చండి.\n !!హెచ్చరిక!! దీని వలన మీ డేటా మొత్తం తీసివేయబడుతుంది.\n ఈ లక్షణం ఆల్ఫా, కనుక సరిగ్గా పని చేయకపోవచ్చు.\n కొనసాగించడానికి \'తొలగించి, మార్చు...\' నొక్కండి."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"తొలగించి, మార్చు…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"చిత్రం రంగు మోడ్"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ఉపయోగిస్తుంది"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"నిలిపివేయబడింది"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"సంపూర్ణ వర్ణాంధత్వం"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"డ్యూటెరానోమలీ (ఎరుపు-ఆకుపచ్చ)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"ప్రొటానోమలీ (ఎరుపు-ఆకుపచ్చ రంగు)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ట్రైటనోమలీ (నీలం-పసుపు రంగు)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"రంగు సవరణ"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"ఈ లక్షణం ప్రయోగాత్మకమైనది మరియు పనితీరుపై ప్రభావం చూపవచ్చు."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> ద్వారా భర్తీ చేయబడింది"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 190a37d..43d2739 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"ถูกบล็อก"</item>
<item msgid="1805837518286731242">"หลีกเลี่ยงการเชื่อมต่อกับสัญญาณที่ไม่แรงพอชั่วคราว"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"ไม่ต้องตรวจสอบ"</item>
+ <item msgid="6042769699089883931">"ตรวจสอบเนื้อหา DRM เท่านั้น"</item>
+ <item msgid="9174900380056846820">"ตรวจสอบทุกครั้ง"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"ห้ามใช้การตรวจสอบ HDCP"</item>
+ <item msgid="3878793616631049349">"ใช้การตรวจสอบ HDCP สำหรับเนื้อหา DRM เท่านั้น"</item>
+ <item msgid="45075631231212732">"ใช้การตรวจสอบ HDCP เสมอ"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 K"</item>
+ <item msgid="505611754508988476">"256 K"</item>
+ <item msgid="6361286924268716397">"1 M"</item>
+ <item msgid="6405203239560695266">"4 M"</item>
+ <item msgid="3025431211013424097">"16 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 K"</item>
+ <item msgid="3534782711045262344">"256 K"</item>
+ <item msgid="8085867209202153403">"1 M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64 K ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+ <item msgid="2822309747675758628">"256 K ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+ <item msgid="6699306198357496731">"1 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+ <item msgid="5748528643937500349">"4 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+ <item msgid="1978629051085111592">"16 M ต่อบัฟเฟอร์ไฟล์บันทึก"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"ปิดภาพเคลื่อนไหว"</item>
+ <item msgid="6624864048416710414">"ภาพเคลื่อนไหวขนาด 0.5 เท่า"</item>
+ <item msgid="2219332261255416635">"ภาพเคลื่อนไหวขนาด 1 เท่า"</item>
+ <item msgid="3544428804137048509">"ภาพเคลื่อนไหวขนาด 1.5 เท่า"</item>
+ <item msgid="3110710404225974514">"ภาพเคลื่อนไหวขนาด 2 เท่า"</item>
+ <item msgid="4402738611528318731">"ภาพเคลื่อนไหวขนาด 5 เท่า"</item>
+ <item msgid="6189539267968330656">"ภาพเคลื่อนไหวขนาด 10 เท่า"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"ปิดภาพเคลื่อนไหว"</item>
+ <item msgid="3375781541913316411">"ภาพเคลื่อนไหวขนาด 0.5 เท่า"</item>
+ <item msgid="1991041427801869945">"ภาพเคลื่อนไหวขนาด 1 เท่า"</item>
+ <item msgid="4012689927622382874">"ภาพเคลื่อนไหวขนาด 1.5 เท่า"</item>
+ <item msgid="3289156759925947169">"ภาพเคลื่อนไหวขนาด 2 เท่า"</item>
+ <item msgid="7705857441213621835">"ภาพเคลื่อนไหวขนาด 5 เท่า"</item>
+ <item msgid="6660750935954853365">"ภาพเคลื่อนไหวขนาด 10 เท่า"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"ปิดภาพเคลื่อนไหว"</item>
+ <item msgid="1138649021950863198">"ความเร็วภาพเคลื่อนไหว 0.5 เท่า"</item>
+ <item msgid="4394388961370833040">"ความเร็วภาพเคลื่อนไหว 1 เท่า"</item>
+ <item msgid="8125427921655194973">"ความเร็วภาพเคลื่อนไหว 1.5 เท่า"</item>
+ <item msgid="3334024790739189573">"ความเร็วภาพเคลื่อนไหว 2 เท่า"</item>
+ <item msgid="3170120558236848008">"ความเร็วภาพเคลื่อนไหว 5 เท่า"</item>
+ <item msgid="1069584980746680398">"ความเร็วภาพเคลื่อนไหว 10 เท่า"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"ไม่มี"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (ปลอดภัย)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (ปลอดภัย)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (ปลอดภัย)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (ปลอดภัย)"</item>
+ <item msgid="3547211260846843098">"4K (เพิ่มความละเอียด)"</item>
+ <item msgid="5411365648951414254">"4K (เพิ่มความละเอียด ปลอดภัย)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (หน้าจอคู่)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"ไม่มี"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (กราฟิก)"</item>
+ <item msgid="1340692776955662664">"ชุดรายการเรียกใน glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"ปิด"</item>
+ <item msgid="675719912558941285">"วาดคลิปที่ไม่ใช่สี่เหลี่ยมด้วยสีฟ้า"</item>
+ <item msgid="1064373276095698656">"ไฮไลต์คำสั่งวาดที่ทดสอบด้วยสีเขียว"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"ปิด"</item>
+ <item msgid="2751513398307949636">"เป็นแถบบนหน้าจอ"</item>
+ <item msgid="1851438178120770973">"ใน adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"ปิด"</item>
+ <item msgid="7688197031296835369">"แสดงพื้นที่การวาดทับ"</item>
+ <item msgid="2290859360633824369">"แสดงพื้นที่สำหรับคนตาบอดสีเขียว"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"ขีดจำกัดมาตรฐาน"</item>
+ <item msgid="4071574792028999443">"ไม่มีกระบวนการพื้นหลัง"</item>
+ <item msgid="4810006996171705398">"มากที่สุด 1 กระบวนการ"</item>
+ <item msgid="8586370216857360863">"มากที่สุด 2 กระบวนการ"</item>
+ <item msgid="836593137872605381">"มากที่สุด 3 กระบวนการ"</item>
+ <item msgid="7899496259191969307">"มากที่สุด 4 กระบวนการ"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"การชาร์จ"</item>
+ <item msgid="5220695614993094977">"MTP (โปรโตคอลการโอนสื่อ)"</item>
+ <item msgid="2086000968159047375">"PTP (โปรโตคอลการโอนรูปภาพ)"</item>
+ <item msgid="7398830860950841822">"RNDIS (อีเทอร์เน็ต USB)"</item>
+ <item msgid="1718924214939774352">"แหล่งที่มาของเสียง"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index c3c287c..c91bb42 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"เลือกโปรไฟล์"</string>
<string name="category_personal" msgid="1299663247844969448">"ส่วนตัว"</string>
<string name="category_work" msgid="8699184680584175622">"ที่ทำงาน"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"สำหรับนักพัฒนาซอฟต์แวร์"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"เปิดใช้ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ตั้งค่าตัวเลือกสำหรับการพัฒนาแอปพลิเคชัน"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ไม่สามารถใช้ได้สำหรับผู้ใช้นี้"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"การตั้งค่า VPN ไม่สามารถใช้ได้สำหรับผู้ใช้รายนี้"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"การตั้งค่าการปล่อยสัญญาณไม่สามารถใช้ได้สำหรับผู้ใช้รายนี้"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"การตั้งค่าจุดเข้าใช้งานไม่สามารถใช้ได้สำหรับผู้ใช้รายนี้"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"การแก้ไขข้อบกพร่อง USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"โหมดแก้ไขข้อบกพร่องเมื่อเชื่อมต่อ USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"ยกเลิกการให้สิทธิ์การแก้ปัญหา USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"ทางลัดรายงานข้อบกพร่อง"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"แสดงปุ่มในเมนูเปิด/ปิดสำหรับการใช้รายงานข้อบกพร่อง"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"เปิดหน้าจอค้าง"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"หน้าจอจะไม่เข้าสู่โหมดสลีปขณะชาร์จ"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"เปิดใช้งานบันทึกสอดแนมบลูทูธ HCI"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"บันทึกแพ็คเก็ตบลูทูธ HCI ทั้งหมดในไฟล์"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"การปลดล็อก OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"อนุญาตให้ปลดล็อกตัวโหลดการเปิดเครื่อง"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"อนุญาตการปลดล็อก OEM ไหม"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"คำเตือน: คุณลักษณะการปกป้องอุปกรณ์จะไม่ทำงานบนอุปกรณ์นี้ขณะที่การตั้งค่านี้เปิดอยู่"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"เลือกแอปจำลองตำแหน่ง"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"ไม่ได้ตั้งค่าแอปจำลองตำแหน่ง"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"แอปจำลองตำแหน่ง: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"เครือข่าย"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"การรับรองการแสดงผลแบบไร้สาย"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"เปิดใช้การบันทึกรายละเอียด Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"สลับ Wi‑Fi เป็นมือถือเมื่อสัญญาณอ่อน"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ใช้การสแกน Wi-Fi ข้ามเครือข่ายเสมอ"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"ใช้ไคลเอ็นต์ DHCP เดิม"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"เปิดใช้ข้อมูลมือถือเสมอ"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"อนุญาต/ไม่อนุญาตการสแกน Wi-Fi ข้ามเครือข่าย ตามปริมาณข้อมูลการเข้าชมที่ปรากฏในอินเทอร์เฟซ"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"ขนาดบัฟเฟอร์ของ Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"เลือกขนาด Logger ต่อบัฟเฟอร์ไฟล์บันทึก"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"เลือกการกำหนดค่า USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"เลือกการกำหนดค่า USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"อนุญาตให้จำลองตำแหน่ง"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"อนุญาตให้จำลองตำแหน่ง"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"เปิดใช้การตรวจสอบแอตทริบิวต์มุมมอง"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"ใช้ไคลเอ็นต์ DHCP จาก Lollipop แทนไคลเอ็นต์ DHCP ใหม่บน Android"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"เปิดใช้ข้อมูลมือถืออยู่เสมอ แม้ในเวลาที่ใช้งาน Wi-Fi อยู่ (สำหรับสวิตชิงเครือข่ายความเร็วสูง)"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"อนุญาตให้แก้ไขข้อบกพร่อง USB หรือไม่"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"การแก้ไขข้อบกพร่อง USB มีไว้เพื่อการพัฒนาเท่านั้น ให้ใช้การแก้ไขนี้เพื่อคัดลอกข้อมูลระหว่างคอมพิวเตอร์และอุปกรณ์ ติดตั้งแอปพลิเคชันบนอุปกรณ์โดยไม่มีการแจ้งเตือน และอ่านข้อมูลบันทึก"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"ยกเลิกการเข้าถึงเพื่อแก้ปัญหาผ่าน USB จากคอมพิวเตอร์ทุกเครื่องที่คุณได้ให้สิทธิ์ก่อนหน้านี้ไหม"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"อนุญาตการตั้งค่าสำหรับการพัฒนาหรือไม่"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"การตั้งค่านี้มีไว้เพื่อการพัฒนาเท่านั้น จึงอาจทำให้อุปกรณ์และแอปพลิเคชันที่มีอยู่เสียหายหรือทำงานผิดพลาดได้"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"ยืนยันแอปพลิเคชันผ่าน USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ตรวจสอบแอปพลิเคชันที่ติดตั้งผ่าน ADB/ADT เพื่อตรวจดูพฤติกรรมที่เป็นอันตราย"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"เทอร์มินัลในตัวเครื่อง"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"เปิดใช้งานแอปเทอร์มินัลที่ให้การเข้าถึงเชลล์ในตัวเครื่อง"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"การตรวจสอบ HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"ตั้งค่าการตรวจสอบ HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"การแก้ไขข้อบกพร่อง"</string>
+ <string name="debug_app" msgid="8349591734751384446">"เลือกแอปพลิเคชันที่จะแก้ไขข้อบกพร่อง"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"ไม่มีชุดแอปพลิเคชันแก้ไขข้อบกพร่อง"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"แอปพลิเคชันแก้ไขข้อบกพร่อง: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"เลือกแอปพลิเคชัน"</string>
+ <string name="no_application" msgid="2813387563129153880">"ไม่มี"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"รอโปรแกรมแก้ไขข้อบกพร่อง"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"แอปพลิเคชันที่มีการแก้ปัญหาจะรอให้โปรแกรมแก้ไขข้อบกพร่องแนบข้อมูลก่อนปฏิบัติการ"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"อินพุต"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"การวาดภาพ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"การแสดงผลที่มีการเร่งด้วยฮาร์ดแวร์"</string>
+ <string name="media_category" msgid="4388305075496848353">"สื่อ"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"กำลังตรวจสอบ"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"เปิดใช้งานโหมดเข้มงวด"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"แสดงหน้าจอเมื่อแอปพลิเคชันทำงาน ในชุดข้อความหลักนาน"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"ตำแหน่งของตัวชี้"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"การวางซ้อนหน้าจอที่แสดงข้อมูลการแตะ ในปัจจุบัน"</string>
+ <string name="show_touches" msgid="1356420386500834339">"แสดงการแตะ"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"แสดงความคิดเห็นด้วยภาพสำหรับการแตะ"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"แสดงการอัปเดตพื้นผิว"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"แฟลชพื้นผิวหน้าต่างทั้งหมดเมื่อมีการอัปเดต"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"แสดงการอัปเดตมุมมอง GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"แฟลชมุมมองภายในหน้าต่างเมื่อวาดด้วย GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"แสดงอัปเดตเลเยอร์ฮาร์ดแวร์"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"เลเยอร์ฮาร์ดแวร์กะพริบเป็นสีเขียว เมื่อมีการอัปเดต"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"แก้ปัญหาการวาดทับด้วย GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"ปิดใช้งานการวางซ้อน HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"ใช้ GPU ในการจัดวางองค์ประกอบหน้าจอเสมอ"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"จำลองระบบสี"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"เปิดใช้การติดตามใน OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"ปิดการกำหนดเส้นทางเสียงทาง USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"ปิดการกำหนดเส้นทางโดยอัตโนมัติไปยังอุปกรณ์ต่อพ่วงเสียงทาง USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"แสดงขอบของการจัดวาง"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"แสดงหน้าปกคลิป ขอบ ฯลฯ"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"บังคับทิศทางการจัดวาง RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"บังคับทิศทางการจัดวางหน้าจอเป็น RTL สำหรับทุกภาษา"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"แสดงการใช้ CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"การวางซ้อนหน้าจอที่แสดงการใช้ CPU ในปัจจุบัน"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"เร่งการแสดงผลของ GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"ต้องใช้ GPU สำหรับการวาดภาพ 2 มิติ"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"บังคับใช้ 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"เปิดใช้งาน 4x MSAA ในแอปพลิเคชัน OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"แก้ไขการทำงานของคลิปที่ไม่ใช่สี่เหลี่ยม"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"การแสดงผล GPU ตามโปรไฟล์"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ขนาดหน้าต่างภาพเคลื่อนไหว"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"อัตราการสลับภาพเคลื่อนไหว"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"ความเร็วตามผู้สร้างกำหนด"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"จำลองจอแสดงผลที่สอง"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"แอปพลิเคชัน"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"ไม่เก็บกิจกรรม"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"ล้างทุกกิจกรรมทันทีที่ผู้ใช้ออกไป"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"ขีดจำกัดกระบวนการพื้นหลัง"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"แสดง ANR ทั้งหมด"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"แสดงหน้าต่างแอปไม่ตอบสนอง สำหรับแอปพื้นหลัง"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"บังคับให้แอปสามารถใช้ที่เก็บภายนอก"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ให้สามารถเขียนแอปต่างๆ ไปยังที่เก็บภายนอกได้ โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"บังคับให้กิจกรรมปรับขนาดได้"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"ทำให้กิจกรรมทั้งหมดปรับขนาดได้สำหรับหน้าต่างหลายบาน โดยไม่คำนึงถึงค่าในไฟล์ Manifest"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"รหัสผ่านการสำรองข้อมูลในเดสก์ท็อป"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"การสำรองข้อมูลเต็มรูปแบบในเดสก์ท็อป ไม่ได้รับการป้องกันในขณะนี้"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"แตะเพื่อเปลี่ยนหรือลบรหัสผ่านสำหรับการสำรองข้อมูลเต็มรูปแบบในเดสก์ท็อป"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"ตั้งรหัสผ่านสำหรับการสำรองข้อมูลใหม่แล้ว"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"รหัสผ่านใหม่และการพิมพ์ยืนยันไม่ตรงกัน"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"ไม่สามารถตั้งรหัสผ่านสำหรับการสำรองข้อมูล"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"สด (ค่าเริ่มต้น)"</item>
+ <item msgid="8446070607501413455">"ธรรมชาติ"</item>
+ <item msgid="6553408765810699025">"มาตรฐาน"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"สีที่ได้รับการปรับปรุง"</item>
+ <item msgid="8280754435979370728">"สีธรรมชาติตามที่ดวงตามองเห็น"</item>
+ <item msgid="5363960654009010371">"สีที่เหมาะกับเนื้อหาดิจิทัล"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"แอปที่ไม่ได้ใช้งาน"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"ไม่ได้ใช้งานอยู่ แตะเพื่อสลับ"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"ใช้งานอยู่ แตะเพื่อสลับ"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"บริการที่ทำงานอยู่"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"ดูและควบคุมบริการที่ทำงานอยู่"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"โหมดกลางคืน"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"ปิดใช้แล้ว"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"เปิดใช้เสมอ"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"อัตโนมัติ"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"แปลงเป็นการเข้ารหัสไฟล์"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"แปลง…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"เข้ารหัสไฟล์แล้ว"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"การแปลงเป็นการเข้ารหัสตามไฟล์"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"แปลงพาร์ทิชันข้อมูลเป็นการเข้ารหัสแบบไฟล์\n !!คำเตือน!! การดำเนินการนี้จะลบข้อมูลทั้งหมดของคุณ\n คุณลักษณะนี้เป็นแบบอัลฟา และอาจทำงานไม่เป็นปกติ\n กด \"ลบและแปลง...\" เพื่อดำเนินการต่อ"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"ลบและแปลง…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"โหมดสีของรูปภาพ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"ใช้ sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"ปิดใช้"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"ตาบอดสีแบบไม่เห็นสีเลย"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"ตาบอดจางสีเขียว (สีแดง/เขียว)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"ตาบอดจางสีแดง (สีแดง/เขียว)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"ตาบอดจางสีน้ำเงิน (สีน้ำเงิน/เหลือง)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"การแก้สี"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"คุณลักษณะนี้เป็นแบบทดลองและอาจส่งผลต่อประสิทธิภาพการทำงาน"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"แทนที่โดย <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index 35c9724..c7cf6d2 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Naka-block"</item>
<item msgid="1805837518286731242">"Pansamantalang iniiwasan ang mabagal na koneksyon"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Huwag kailanman suriin"</item>
+ <item msgid="6042769699089883931">"Suriin lang para sa DRM content"</item>
+ <item msgid="9174900380056846820">"Palaging suriin"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Huwag kailanman gumamit ng pagsusuring HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K kada log buffer"</item>
+ <item msgid="2822309747675758628">"256K kada log buffer"</item>
+ <item msgid="6699306198357496731">"1M kada log buffer"</item>
+ <item msgid="5748528643937500349">"4M kada log buffer"</item>
+ <item msgid="1978629051085111592">"16M kada log buffer"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Naka-off ang animation"</item>
+ <item msgid="6624864048416710414">"Scale ng animation .5x"</item>
+ <item msgid="2219332261255416635">"Scale ng animation 1x"</item>
+ <item msgid="3544428804137048509">"Scale ng animation 1.5x"</item>
+ <item msgid="3110710404225974514">"Scale ng animation 2x"</item>
+ <item msgid="4402738611528318731">"Scale ng animation 5x"</item>
+ <item msgid="6189539267968330656">"Scale ng animation 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Naka-off ang animation"</item>
+ <item msgid="3375781541913316411">"Scale ng animation .5x"</item>
+ <item msgid="1991041427801869945">"Scale ng animation 1x"</item>
+ <item msgid="4012689927622382874">"Scale ng animation 1.5x"</item>
+ <item msgid="3289156759925947169">"Scale ng animation 2x"</item>
+ <item msgid="7705857441213621835">"Scale ng animation 5x"</item>
+ <item msgid="6660750935954853365">"Scale ng animation 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Naka-off ang animation"</item>
+ <item msgid="1138649021950863198">"Scale ng animation .5x"</item>
+ <item msgid="4394388961370833040">"Scale ng animation 1x"</item>
+ <item msgid="8125427921655194973">"Scale ng animation 1.5x"</item>
+ <item msgid="3334024790739189573">"Scale ng animation 2x"</item>
+ <item msgid="3170120558236848008">"Scale ng animation 5x"</item>
+ <item msgid="1069584980746680398">"Scale ng animation 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Wala"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (secure)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (secure)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (secure)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (secure)"</item>
+ <item msgid="3547211260846843098">"4K (na-upscale)"</item>
+ <item msgid="5411365648951414254">"4K (na-upscale, secure)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Wala"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Graphics)"</item>
+ <item msgid="1340692776955662664">"Stack ng tawag sa glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"I-off"</item>
+ <item msgid="675719912558941285">"Iguhit sa asul ang di-parihabang clip region"</item>
+ <item msgid="1064373276095698656">"I-higlight nang berde ang tested drawing commands"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Naka-off"</item>
+ <item msgid="2751513398307949636">"Sa screen bilang mga bar"</item>
+ <item msgid="1851438178120770973">"In adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"I-off"</item>
+ <item msgid="7688197031296835369">"Tingnan ang mga overdraw na bahagi"</item>
+ <item msgid="2290859360633824369">"Ipakita ang mga lugar para sa Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Karaniwang limitasyon"</item>
+ <item msgid="4071574792028999443">"Walang mga proseso sa background"</item>
+ <item msgid="4810006996171705398">"1 proseso sa pinakamarami"</item>
+ <item msgid="8586370216857360863">"2 proseso sa pinakamarami"</item>
+ <item msgid="836593137872605381">"3 proseso sa pinakamarami"</item>
+ <item msgid="7899496259191969307">"4 na proseso sa pinakamarami"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Nagcha-charge"</item>
+ <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item>
+ <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Pinagmulan ng Audio"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 49f10a9..a389feb 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Pumili ng Profile"</string>
<string name="category_personal" msgid="1299663247844969448">"Personal"</string>
<string name="category_work" msgid="8699184680584175622">"Trabaho"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Mga opsyon ng developer"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"I-enable ang mga opsyon ng developer"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Magtakda ng mga pagpipilian para sa pagbuo ng app"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Hindi available ang mga pagpipilian ng developer para sa user na ito"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Hindi available ang mga setting ng VPN para sa user na ito"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Hindi available ang mga setting ng pagte-theter para sa user na ito"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Hindi available ang mga setting ng Access Point Name para sa user na ito"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Pagde-debug ng USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode kapag nakakonekta ang USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Bawiin ang mga pahintulot sa pag-debug ng USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Shortcut ng ulat sa bug"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Magpakita ng button sa power menu sa pagkuha ng ulat sa bug"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Manatiling gumagana"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Hindi kailanman hihinto ang screen kapag kinakargahan"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"I-enable ang Bluetooth HCI snoop log"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"I-capture ang lahat ng bluetooth HCI packet sa isang file"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Pag-a-unlock ng OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Payagan na ma-unlock ang bootloader"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Payagan ang pag-a-unlock ng OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"BABALA: Hindi gagana ang mga feature sa pagprotekta sa device na ito habang naka-on ang setting na ito."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Pumili ng app para sa kunwaring lokasyon"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Walang nakatakdang app para sa kunwaring lokasyon"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"App para sa kunwaring lokasyon: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Certification ng wireless display"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"I-enable ang Pagla-log sa Wi‑Fi Verbose"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Agresibong paglipat ng Wi‑Fi sa Cellular"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Palaging payagan ang Mga Pag-scan sa Roaming ng Wi‑Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Gumamit ng legacy na DHCP client"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Palaging aktibo ang cellular data"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Payagan/Huwag payagan ang Mga Pag-scan sa Roaming ng Wi‑Fi batay sa dami ng trapiko ng data na mayroon sa interface"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Mga laki ng buffer ng Logger"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Pumili ng mga laki ng Logger bawat log buffer"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Pumili ng USB Configuration"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Pumili ng USB Configuration"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Payagan ang mga kunwaring lokasyon"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Payagan ang mga kunwaring lokasyon"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"I-enable ang pagsisiyasat sa attribute na view"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Gamitin ang DHCP client mula sa Lollipop sa halip na ang bagong Android DHCP client."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Palaging panatilihing aktibo ang mobile data, kahit na aktibo ang Wi‑Fi (para sa mabilis na paglipat ng network)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Payagan ang pag-debug ng USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ang pag-debug ng USB ay nilalayon para sa mga layuning pagpapabuti lamang. Gamitin ito upang kumopya ng data sa pagitan ng iyong computer at iyong device, mag-install ng apps sa iyong device nang walang notification, at magbasa ng data ng log."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Bawiin ang access sa pagde-debug ng USB mula sa lahat ng computer na dati mong pinahintulutan?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Payagan ang mga setting ng pag-develop?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Nilalayon ang mga setting na ito para sa paggamit sa pag-develop lamang. Maaaring magsanhi ang mga ito ng pagkasira o hindi paggana nang maayos ng iyong device at mga application na nandito."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"I-verify ang mga app sa USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Tingnan kung may nakakahamak na pagkilos sa apps na na-install sa pamamagitan ng ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Lokal na terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Paganahin ang terminal app na nag-aalok ng lokal na shell access"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Pagsusuring HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP checking behavior"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Pagde-debug"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Pumili ng debug app"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Walang nakatakdang application sa pag-debug"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Application sa pag-debug: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Pumili ng application"</string>
+ <string name="no_application" msgid="2813387563129153880">"Wala"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Maghintay ng debugger"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Hinihintay ng na-debug na application na ma-attach ang debugger bago magsagawa"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Input"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Pagguhit"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Pag-render na pinapabilis ng hardware"</string>
+ <string name="media_category" msgid="4388305075496848353">"Media"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Pagsubaybay"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Enabled ang strict mode"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"I-flash ang screen pag may long ops ang app sa main thread"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Lokasyon ng pointer"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Overlay ng screen na nagpapakita ng touch data"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Ipakita ang mga pagpindot"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Ipakita ang visual na feedback para sa mga pagpindot"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Ipakita update sa surface"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"I-flash ang buong window surface kapag nag-update"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Ipakita GPU view update"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"I-flash ang view sa windows kapag ginuhit sa GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Ipakita ang mga update ng hardware layers"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"I-flash nang berde ang hardware layer pag nag-update ito"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"I-debug ang GPU overdraw"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Wag paganahin HW overlay"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Laging gamitin ang GPU para sa screen compositing"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Gayahin ang color space"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"I-enable ang OpenGL traces"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"I-disable USB audio routing"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"I-disable automatic routing sa USB audio peripheral"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Ipakita mga layout bound"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Ipakita ang mga hangganan ng clip, margin, atbp."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout dir."</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout dir. sa RTL sa lahat ng lokal"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Ipakita paggamit ng CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Ipinapakita ng screen overlay ang paggamit ng CPU ngayon"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Ipilit ang pag-render ng GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Sapilitang paggamit sa GPU para sa 2d na pagguhit"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Puwersahin ang 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Paganahin ang 4x MSAA sa OpenGL ES 2.0 na apps"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"I-debug ang di-parihabang mga clip operation"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Pag-render GPU ng Profile"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Scale ng window animation"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Scale ng transition animation"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Scale ng tagal ng animator"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"I-simulate, ika-2 display"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Huwag magtago ng mga aktibidad"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Sirain ang bawat aktibidad sa sandaling iwan ito ng user"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Limitasyon ng proseso sa background"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Ipakita ang lahat ng ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"App Not Responding dialog para sa background apps"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Pwersahang payagan ang mga app sa external"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Mara-write na sa external storage ang anumang app, anuman ang manifest value"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Sapilitang gawing resizable ang mga aktibidad"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Gawing resizable para sa multi-window ang lahat ng aktibidad, anuman ang mga manifest value."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Password ng pag-backup ng desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Kasalukuyang hindi pinoprotektahan ang mga buong pag-backup ng desktop"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Pindutin upang baguhin o alisin ang password para sa mga buong pag-backup ng desktop"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Naitakda ang bagong backup na password"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Hindi tugma ang password at kumpirmasyon"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Nabigo sa pagtatakda ng backup na password"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Vibrant (default)"</item>
+ <item msgid="8446070607501413455">"Natural"</item>
+ <item msgid="6553408765810699025">"Standard"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Mga pinagandang kulay"</item>
+ <item msgid="8280754435979370728">"Mga natural na kulay tulad ng nakikita ng mata"</item>
+ <item msgid="5363960654009010371">"Mga kulay na naka-optimize para sa digital na content"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Mga hindi aktibong app"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Hindi aktibo. Pindutin upang ma-toggle."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Aktibo. Pindutin upang ma-toggle."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Mga tumatakbong serbisyo"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Tingnan at kontrolin ang mga kasalukuyang tumatakbong serbisyo"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Naka-disable"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Palaging naka-on"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Awtomatiko"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"I-convert at gawing pag-encrypt ng file"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"I-convert..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Na-encrypt na ang file"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Kino-convert sa pag-encrypt na batay sa file"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"I-convert ang partition ng data at gawing pag-encrypt na batay sa file.\n !!Babala!! Kapag isinagawa mo ito, mabubura ang lahat ng iyong data.\n Maituturing na alpha ang feature na ito at maaaring hindi ito gumana nang maayos.\n Pindutin ang \'I-wipe at i-convert...\' upang makapagpatuloy."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"I-wipe at i-convert…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Mode ng kulay ng larawan"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Gamitin ang sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Naka-disable"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (pula-berde)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (pula-berde)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (asul-dilaw)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Pagtatama ng kulay"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Ang feature na ito ay pinag-eeksperimentuhan at maaaring makaapekto sa pagganap."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Na-override ng <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index 49d6839..9326903 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Engellendi"</item>
<item msgid="1805837518286731242">"Kötü bağlantıdan geçici olarak kaçınılıyor"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Hiçbir zaman denetleme"</item>
+ <item msgid="6042769699089883931">"Yalnızca DRM içeriğini denetle"</item>
+ <item msgid="9174900380056846820">"Her zaman denetle"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"HDCP denetimini hiçbir zaman kullanma"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Günlük arabelleği başına 64 KB"</item>
+ <item msgid="2822309747675758628">"Günlük arabelleği başına 256 KB"</item>
+ <item msgid="6699306198357496731">"Günlük arabelleği başına 1 MB"</item>
+ <item msgid="5748528643937500349">"Günlük arabelleği başına 4 MB"</item>
+ <item msgid="1978629051085111592">"Günlük arabelleği başına 16 MB"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animasyon kapalı"</item>
+ <item msgid="6624864048416710414">"Animasyon ölçeği 0,5x"</item>
+ <item msgid="2219332261255416635">"Animasyon ölçeği 1x"</item>
+ <item msgid="3544428804137048509">"Animasyon ölçeği 1,5x"</item>
+ <item msgid="3110710404225974514">"Animasyon ölçeği 2x"</item>
+ <item msgid="4402738611528318731">"Animasyon ölçeği 5x"</item>
+ <item msgid="6189539267968330656">"Animasyon ölçeği 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animasyon kapalı"</item>
+ <item msgid="3375781541913316411">"Animasyon ölçeği 0,5x"</item>
+ <item msgid="1991041427801869945">"Animasyon ölçeği 1x"</item>
+ <item msgid="4012689927622382874">"Animasyon ölçeği 1,5x"</item>
+ <item msgid="3289156759925947169">"Animasyon ölçeği 2x"</item>
+ <item msgid="7705857441213621835">"Animasyon ölçeği 5x"</item>
+ <item msgid="6660750935954853365">"Animasyon ölçeği 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animasyon kapalı"</item>
+ <item msgid="1138649021950863198">"Animasyon ölçeği 0,5x"</item>
+ <item msgid="4394388961370833040">"Animasyon ölçeği 1x"</item>
+ <item msgid="8125427921655194973">"Animasyon ölçeği 1,5x"</item>
+ <item msgid="3334024790739189573">"Animasyon ölçeği 2x"</item>
+ <item msgid="3170120558236848008">"Animasyon ölçeği 5x"</item>
+ <item msgid="1069584980746680398">"Animasyon ölçeği 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Yok"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (güvenli)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (güvenli)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (güvenil)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (güvenli)"</item>
+ <item msgid="3547211260846843098">"4K (yukarı ölçeklenmiş)"</item>
+ <item msgid="5411365648951414254">"4K (yukarı ölçeklenmiş, güvenli)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (çift ekran)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Hiçbiri"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafik)"</item>
+ <item msgid="1340692776955662664">"glGetError\'da yığın çağır"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Kapalı"</item>
+ <item msgid="675719912558941285">"Dikdörtgen olm. kırpma bölgesini mavi çiz"</item>
+ <item msgid="1064373276095698656">"Test edilmiş çizim komutlarını yeşille vurgula"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Kapalı"</item>
+ <item msgid="2751513398307949636">"Ekranda çubuk şeklinde"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo içinde"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Kapalı"</item>
+ <item msgid="7688197031296835369">"Fazla çizilen alanları göster"</item>
+ <item msgid="2290859360633824369">"Alanları renk körlüğüne uygun olarak göster"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standart sınır"</item>
+ <item msgid="4071574792028999443">"Arka planda işlem yok"</item>
+ <item msgid="4810006996171705398">"En çok 1 işlem"</item>
+ <item msgid="8586370216857360863">"En çok 2 işlem"</item>
+ <item msgid="836593137872605381">"En çok 3 işlem"</item>
+ <item msgid="7899496259191969307">"En çok 4 işlem"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Şarj oluyor"</item>
+ <item msgid="5220695614993094977">"MTP (Medya Aktarım Protokolü)"</item>
+ <item msgid="2086000968159047375">"PTP (Resim Aktarım Protokolü)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Ses Kaynağı"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index db40231..48ed867 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profil Seçin"</string>
<string name="category_personal" msgid="1299663247844969448">"Kişisel"</string>
<string name="category_work" msgid="8699184680584175622">"İş"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Geliştirici seçenekleri"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Geliştirici seçeneklerini etkinleştir"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Uygulama geliştirme için seçenekleri ayarla"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Bu kullanıcı, geliştirici seçeneklerini kullanamaz"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN ayarları bu kullanıcı için kullanılamıyor"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering ayarları bu kullanıcı için kullanılamıyor"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Erişim Noktası Adı ayarları bu kullanıcı için kullanılamıyor"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB hata ayıklaması"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB bağlandığında hata ayıklama modu"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB hata ayıklama yetkilerini kaldır"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Hata raporu kısayolu"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Hata raporu almak için güç menüsünde bir düğme göster"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Uyanık kal"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Şarj edilirken ekran hiçbir zaman uykuya geçmez"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI araştırmayı etkinleştir"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Bir dosyadaki tüm Bluetooth HCI paketlerini yakala"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilit açma"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Önyükleyicinin kilidinin açılmasına izin ver"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilit açmaya izin verilsin mi?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"UYARI: Bu ayar açıkken cihaz koruma özellikleri bu cihazda çalışmayacaktır."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Sahte konum uygulamasını seç"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Sahte konum uygulaması ayarlanmadı"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Sahte konum uygulaması: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Ağ işlemleri"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Kablosuz ekran sertifikası"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Kablosuz Ayrıntılı Günlük Kaydını etkinleştir"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Kablosuz\'dan Hücresel Ağa agresif geçiş"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Kablosuz Dolaşım Taramalarına daima izin ver"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Eski DHCP istemcisini kullan"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Hücresel veri her zaman etkin"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Arayüzde mevcut veri trafiği miktarına bağlı olarak Kablosuz Dolaşım Taramalarına İzin Verin/Vermeyin"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Günlük Kaydedici arabellek boyutları"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Gün. arabel. başına Gün. Kayd. boyutunu seç"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB Yapılandırmasını seç"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB Yapılandırmasını seç"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Sahte konumlara izin ver"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Sahte konumlara izin ver"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Görünüm özelliği incelemeyi etkinleştir"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Yeni Android DHCP istemcisi yerine Lollipop DHCP istemcisini kullan."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Kablosuz bağlantı etkin bile olsa mobil veri kullanımını her zaman etkin tut (ağlar arasında hızlı geçiş yapmak için)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB hata ayıklamasına izin verilsin mi?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB hata ayıklaması yalnızca geliştirme amaçlıdır. Verileri bilgisayarınızla cihazınız arasında kopyalamak, bildirim göndermeksizin uygulamaları cihazınıza yüklemek ve günlük verilerini okumak için kullanın."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Daha önce yetki verdiğiniz tüm bilgisayarların USB hata ayıklama erişimini iptal etmek istiyor musunuz?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Geliştirme amaçlı ayarlara izin verilsin mi?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Bu ayarlar yalnızca geliştirme amaçlıdır. Cihazınızın veya cihazdaki uygulamaların bozulmasına veya hatalı çalışmasına neden olabilir."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB\'den yüklenen uygulamaları doğrula"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT üzerinden yüklenen uygulamaları zararlı davranışlara karşı denetle."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Yerel terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Yerel kabuk erişimi sunan terminal uygulamasını etkinleştir"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP denetimi"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP denetimini ayarla"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Hata ayıklama"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Hata ayıklama uygulaması seç"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Hata ayıklama uygulaması ayarlanmadı"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Hata ayıklama uygulaması: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Uygulama seçin"</string>
+ <string name="no_application" msgid="2813387563129153880">"Hiçbiri"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Hata ayıklayıcıyı bekle"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Hata ayıklanan uygulama, çalıştırılmadan önce hata ayıklayıcının eklenmesini bekler"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Girdi"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Çizim"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Donanım hızlandırmalı oluşturma"</string>
+ <string name="media_category" msgid="4388305075496848353">"Medya"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"İzleme"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Yüksek düzey modu etkin"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Uyg. ana işlem parçasında uzun işlem yap. ekr. yakıp söndür"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"İşaretçi konumu"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Mevcut dokunmatik verilerini gösteren yer paylaşımı"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Dokunmaları göster"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Dokunmalarda görsel geri bildirim göster"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Yüzey güncellemelerini göster"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Güncelleme sırasında tüm pencere yüzeylerini çiz"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU görünüm güncellemelerini göster"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU ile çizim yapılırken pencerelerdeki görünümleri çiz"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Donanım katmanı güncellemelerini göster"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash donanım katmanları güncellendiğinde yeşildir"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU fazla çizim hatasını ayıkla"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Donanım katmanlarını devre dışı bırak"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Ekran oluştururken her zaman GPU\'yu kullan"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Renk uzayını simüle et"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL izlerini etkinleştir"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB ses yönlendirmesini kapat"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB ses çevre birimlerine otomatik yönlendirmeyi kapat"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Düzen sınırlarını göster"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Klip sınırlarını, kenar boşluklarını vb. göster"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Sağdan sola düzenini zorla"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Tüm yerel ayarlar için sağdan sola ekran düzenini zorlar"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU kullanımını göster"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Mevcut CPU kullanımını gösteren yer paylaşımı"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU oluşturmayı zorla"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2D çizimde GPU kullanımını zorla"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA\'yı zorla"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 uygulamalarda 4x MSAA\'yı etkinleştir"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Dikdörtgen olmayan kırpma işlemlerinde hata ayıkla"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Profil GPU oluşturma"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Pencere animasyonu ölçeği"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Geçiş animasyonu ölçeği"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatör süre ölçeği"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"İkincil ekranları simüle et"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Uygulamalar"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Etkinlikleri saklama"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Kullanıcının ayrıldığı her etkinliği hemen yok et"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Arka plan işlem sınırı"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Tüm ANR\'leri göster"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Arka plan uygulamalar için Uygulama Yanıt Vermiyor mesajını göster"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Harici birimdeki uygulamalara izin vermeye zorla"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Bildirilen değerlerden bağımsız olarak uygulamaları harici depolamaya yazmak için uygun hale getirir"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Etkinlikleri yeniden boyutlandırılabilmeye zorla"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Manifest değerlerinden bağımsız olarak, tüm etkinlikleri birden fazla pencerede yeniden boyutlandırılabilir hale getirir."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Masaüstü yedekleme şifresi"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Masaüstü tam yedeklemeleri şu an korunmuyor"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Masaüstü tam yedeklemelerinin şifresini değiştirmek veya kaldırmak için dokunun"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Yeni yedekleme şifresi ayarlandı"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Yeni şifre ve onayı eşleşmiyor."</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Yedekleme şifresi ayarlanamadı"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Canlı (varsayılan)"</item>
+ <item msgid="8446070607501413455">"Doğal"</item>
+ <item msgid="6553408765810699025">"Standart"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Geliştirilmiş renkler"</item>
+ <item msgid="8280754435979370728">"Göze göründüğü şekilde doğal renkler"</item>
+ <item msgid="5363960654009010371">"Dijital içerik için optimize edilmiş renkler"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Devre dışı uygulamalar"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Devre dışı. Değiştirmek için dokunun."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Etkin. Değiştirmek için dokunun."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Çalışan hizmetler"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Şu anda çalışan hizmetleri görüntüle ve denetle"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Gece modu"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Devre dışı"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Her zaman açık"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Otomatik"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Dosya şifrelemeye dönüştür"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Dönüştür…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Dosya şifreleme zaten uygulandı"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Dosya tabanlı şifrelemeye dönüştürme"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Veri bölmesini dosya tabanlı şifrelemeye dönüştür.\n !!Dikkat!! Bu işlem tüm verilerinizi siler\n Bu özellik henüz alfa aşamasındadır ve düzgün çalışmayabilir.\n Devam etmek için \"Sil ve dönüştür…\" seçeneğine basın."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Sil ve dönüştür…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Resim renk modu"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB\'yi kullan"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Devre dışı"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Tam renk körlüğü"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Yeşil renk körlüğü (kırmızı-yeşil)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Kırmızı renk körlüğü (kırmızı-yeşil)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Mavi renk körlüğü (mavi-sarı)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Renk düzeltme"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Bu özellik deneyseldir ve performansı etkileyebilir."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> tarafından geçersiz kılındı"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index a5608b4..6cccc8c 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Заблоковано"</item>
<item msgid="1805837518286731242">"Тимчасове уникнення слабкого з’єднання"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Ніколи не перевіряти"</item>
+ <item msgid="6042769699089883931">"Перевіряти лише DRM-контент"</item>
+ <item msgid="9174900380056846820">"Завжди перевіряти"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ніколи не використовувати перевірку HDCP"</item>
+ <item msgid="3878793616631049349">"Використовувати перевірку HDCP лише для вмісту, захищеного DRM"</item>
+ <item msgid="45075631231212732">"Завжди використовувати перевірку HDCP"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 Кб"</item>
+ <item msgid="505611754508988476">"256 Кб"</item>
+ <item msgid="6361286924268716397">"1 Мб"</item>
+ <item msgid="6405203239560695266">"4 Мб"</item>
+ <item msgid="3025431211013424097">"16 Мб"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 Кб"</item>
+ <item msgid="3534782711045262344">"256 Кб"</item>
+ <item msgid="8085867209202153403">"1 Мб"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Буфер: макс. 64 Кб"</item>
+ <item msgid="2822309747675758628">"Буфер: макс. 256 Кб"</item>
+ <item msgid="6699306198357496731">"Буфер: макс. 1 Мб"</item>
+ <item msgid="5748528643937500349">"Буфер: макс. 4 Мб"</item>
+ <item msgid="1978629051085111592">"Буфер: макс. 16 Мб"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Анімацію вимкнено"</item>
+ <item msgid="6624864048416710414">"Анімація 0,5x"</item>
+ <item msgid="2219332261255416635">"Анімація 1x"</item>
+ <item msgid="3544428804137048509">"Анімація 1,5x"</item>
+ <item msgid="3110710404225974514">"Анімація 2x"</item>
+ <item msgid="4402738611528318731">"Анімація 5x"</item>
+ <item msgid="6189539267968330656">"Анімація 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Анімацію вимкнено"</item>
+ <item msgid="3375781541913316411">"Анімація 0,5x"</item>
+ <item msgid="1991041427801869945">"Анімація 1x"</item>
+ <item msgid="4012689927622382874">"Анімація 1,5x"</item>
+ <item msgid="3289156759925947169">"Анімація 2x"</item>
+ <item msgid="7705857441213621835">"Анімація 5x"</item>
+ <item msgid="6660750935954853365">"Анімація 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Анімацію вимкнено"</item>
+ <item msgid="1138649021950863198">"Анімація 0,5x"</item>
+ <item msgid="4394388961370833040">"Анімація 1x"</item>
+ <item msgid="8125427921655194973">"Анімація 1,5x"</item>
+ <item msgid="3334024790739189573">"Анімація 2x"</item>
+ <item msgid="3170120558236848008">"Анімація 5x"</item>
+ <item msgid="1069584980746680398">"Анімація 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Немає"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (захист)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (захист)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (захист)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (захист)"</item>
+ <item msgid="3547211260846843098">"4K (масштабування)"</item>
+ <item msgid="5411365648951414254">"4K (масштабування, захист)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (два екрани)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Нічого"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (графіка)"</item>
+ <item msgid="1340692776955662664">"Стек викликів glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Вимкнено"</item>
+ <item msgid="675719912558941285">"Непрямокутне обрізання синім"</item>
+ <item msgid="1064373276095698656">"Тест. команди малювання зеленим"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Вимк."</item>
+ <item msgid="2751513398307949636">"На екрані у вигляді смужок"</item>
+ <item msgid="1851438178120770973">"У adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Вимк."</item>
+ <item msgid="7688197031296835369">"Показувати області накладання"</item>
+ <item msgid="2290859360633824369">"Показувати області дейтераномалії"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Стандартне обмеження"</item>
+ <item msgid="4071574792028999443">"Без фонових процесів"</item>
+ <item msgid="4810006996171705398">"Не більше 1 процесу"</item>
+ <item msgid="8586370216857360863">"Не більше 2 процесів"</item>
+ <item msgid="836593137872605381">"Не більше 3 процесів"</item>
+ <item msgid="7899496259191969307">"Не більше 4 процесів"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Заряджається"</item>
+ <item msgid="5220695614993094977">"MTP (протокол передавання медіаданих)"</item>
+ <item msgid="2086000968159047375">"PTP (протокол передавання зображень)"</item>
+ <item msgid="7398830860950841822">"RNDIS (Ethernet через USB)"</item>
+ <item msgid="1718924214939774352">"Джерело аудіо"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 696ea39..5a0ddd0 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Вибрати профіль"</string>
<string name="category_personal" msgid="1299663247844969448">"Особисте"</string>
<string name="category_work" msgid="8699184680584175622">"Робота"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Параметри розробника"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Увімкнути параметри розробника"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Установити параметри для розробки програми"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Параметри розробника не доступні для цього користувача"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Цей користувач не може налаштовувати мережу VPN"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Цей користувач не може налаштовувати режим модема"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Цей користувач не може налаштовувати назву точки доступу"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Налагодження USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Увімк. режим налагодження, коли телефон підключено через USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Скасувати доступ до налагодження USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Ярлик звіту про помилки"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Показувати в меню живлення кнопку створення звіту про помилки"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Залишати активним"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран не засинатиме під час заряджання"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Увімкнути журнал відстеження інтерфейсу Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Зберігати всі пакети інтерфейсу Bluetooth у файлі"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Розблокування виробником"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволити розблокування завантажувача"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволити виробникові розблоковувати пристрій?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ЗАСТЕРЕЖЕННЯ. Функції захисту пристрою не працюватимуть, поки ввімкнено це налаштування."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Вибрати додаток для фіктивних місцезнаходжень"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Додаток для фіктивних місцезнаходжень не вибрано"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Додаток для фіктивних місцезнаходжень: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Мережі"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Сертифікація бездрот. екрана"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Докладний запис у журнал Wi-Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Перемикатись на моб. мережу"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Завжди шукати мережі Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Використовувати старий клієнт DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Не вимикати передавання даних"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Дозволити чи заборонити Wi-Fi шукати роумінг на основі обсягу трафіку даних в інтерфейсі"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Розміри буфера журналу"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Виберіть розміри буфера журналу"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Вибрати конфігурацію USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Вибрати конфігурацію USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Фіктивні місцезнаходження"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Дозв. фіктивні місцезн."</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Увімкнути оцінку атрибуції переглядів"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Використовувати клієнт DHCP з Lollipop, а не новий клієнт DHCP з Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Не вимикати мобільний Інтернет, навіть якщо ввімкнено Wi‑Fi (щоб швидше переходити між мережами)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Дозвол. налагодж. USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Налагодження USB застосовується лише з метою розробки. Його можна використовувати для копіювання даних між комп’ютером і пристроєм, встановлення програм на вашому пристрої без сповіщення та читання даних журналу."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Скасувати доступ до налагодження USB для всіх комп’ютерів, які раніше отримали таке право?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Дозволити налаштування розробки?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Ці налаштування застосовуються лише з метою розробки. Вони можуть спричиняти вихід з ладу або неправильне функціонування вашого пристрою чи програм у ньому."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Встановлення через USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Перевіряти безпеку додатків, установлених через ADB/ADT."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Локальний термінал"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Увімк. програму-термінал, що надає локальний доступ до оболонки"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Перевірка HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Порядок перевірки HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Налагодження"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Вибрати додаток для налагодження"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Не встановлено додаток для налагодження"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Програма для налагодження: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Вибір додатка"</string>
+ <string name="no_application" msgid="2813387563129153880">"Нічого"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Зачекайте на налагоджувач"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Додаток очікує підключення налагоджувача"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Ввід"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Рисування"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Апаратне прискорення"</string>
+ <string name="media_category" msgid="4388305075496848353">"Медіа"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Моніторинг"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Строгий режим увімкнено"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Підсвічувати екран під час довгострокових операцій"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Розташування курсора"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Показувати на екрані жести й натискання"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Показувати дотики"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Показувати візуальну реакцію на торкання"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Показ. оновлення поверхні"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Підсвічувати вікна повністю під час оновлення"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Показувати оновл. екрана"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Підсвічув. область у вікні під час рисування з GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Показ. апаратні оновлення"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Виділяти апаратні рівні зеленим під час оновлення"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Налагодити накладання GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Вимк. апаратн. накладання"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Завжди використовувати GPU для компонування екрана"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Моделювання кольорів"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Увімк. трасування OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Вимкнути звук через USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Вимкн. передавання звуку на зовнішні USB-пристрої"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Показувати межі макета"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Показувати межі роликів, поля тощо"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Макет письма справа наліво"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Застосовувати макет письма справа наліво для всіх мов"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Показати використання ЦП"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Показувати на екрані поточне використання ЦП"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Примусова візуалізація GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Примусово використовувати GPU для 2D-малювання"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Примус. запустити 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Увімкнути 4x MSAA в програмах OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Налагодити операції непрямокутної обрізки"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Запис часу роботи GPU"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Анімація вікон"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Анімація переходів"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Тривалість анімації"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Імітувати додаткові екрани"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Додатки"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Не зберігати дії"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Видаляти зведення дій після їх завершення"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Обмеження фон. процесів"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Показувати всі ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Сповіщати, коли додаток не відповідає"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Примусово записувати додатки в зовнішню пам’ять"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Додатки можна записувати на зовнішню пам’ять незалежно від значень маніфесту"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Примусово масштабувати активність"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Активність масштабуватиметься на кілька вікон, незалежно від значень у файлі маніфесту."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Пароль резерв.копії на ПК"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Повні резервні копії на комп’ютері наразі не захищені"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Торкніться, щоб змінити чи видалити пароль для повного резервного копіювання на комп’ютер"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Новий пароль резервної копії встановлено"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Паролі не збігаються"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Не вдалося зберегти пароль"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Насичений (за умовчанням)"</item>
+ <item msgid="8446070607501413455">"Природний"</item>
+ <item msgid="6553408765810699025">"Стандартний"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Покращені кольори"</item>
+ <item msgid="8280754435979370728">"Природні кольори"</item>
+ <item msgid="5363960654009010371">"Кольори для цифрового вмісту"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Неактивні додатки"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Неактивний додаток. Торкніться, щоб активувати."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Активний додаток. Торкніться, щоб дезактивувати."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Запущені служби"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Перегляд і керування запущеними службами"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Нічний режим"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Вимкнено"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Завжди ввімкнено"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Автоматично"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Конвертувати в зашифрований файл"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Конвертація…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Уже конвертовано в зашифрований файл"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Конвертація в зашифрований файл"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Конвертувати розділ даних у зашифрований файл.\n Застереження. Усі дані буде стерто.\n Це альфа-версія функції. Вона може працювати неналежним чином.\n Щоб продовжити, натисніть \"Стерти та конвертувати…\"."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Стерти та конвертувати…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Режим кольору"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Використовувати sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Вимкнено"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Монохромність"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Дейтераномалія (червоний – зелений)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Протаномалія (червоний – зелений)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Тританомалія (синій – жовтий)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Корекція кольору"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Це експериментальна функція. Вона може вплинути на продуктивність."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Замінено на <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-ur-rPK/arrays.xml b/packages/SettingsLib/res/values-ur-rPK/arrays.xml
index c58a4a7..80fb750 100644
--- a/packages/SettingsLib/res/values-ur-rPK/arrays.xml
+++ b/packages/SettingsLib/res/values-ur-rPK/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"مسدود ہے"</item>
<item msgid="1805837518286731242">"عارضی طور پر خراب کنکشن سے اجتناب کر رہا ہے"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"کبھی چیک نہ کریں"</item>
+ <item msgid="6042769699089883931">"صرف DRM مواد چیک کریں"</item>
+ <item msgid="9174900380056846820">"ہمیشہ چیک کریں"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"کبھی بھی HDCP چیکنگ استعمال نہ کریں"</item>
+ <item msgid="3878793616631049349">"HDCP چیکنگ صرف DRM مواد کیلئے استعمال کریں"</item>
+ <item msgid="45075631231212732">"ہمیشہ HDCP چیکنگ استعمال کریں"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K فی لاگ بفر"</item>
+ <item msgid="2822309747675758628">"256K فی لاگ بفر"</item>
+ <item msgid="6699306198357496731">"1M فی لاگ بفر"</item>
+ <item msgid="5748528643937500349">"4M فی لاگ بفر"</item>
+ <item msgid="1978629051085111592">"16M فی لاگ بفر"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"اینیمیشن آف ہے"</item>
+ <item msgid="6624864048416710414">"اینیمیشن اسکیل .5x"</item>
+ <item msgid="2219332261255416635">"اینیمیشن اسکیل 1x"</item>
+ <item msgid="3544428804137048509">"اینیمیشن اسکیل 1.5x"</item>
+ <item msgid="3110710404225974514">"اینیمیشن اسکیل 2x"</item>
+ <item msgid="4402738611528318731">"اینیمیشن اسکیل 5x"</item>
+ <item msgid="6189539267968330656">"اینیمیشن اسکیل 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"اینیمیشن آف ہے"</item>
+ <item msgid="3375781541913316411">"اینیمیشن اسکیل .5x"</item>
+ <item msgid="1991041427801869945">"اینیمیشن اسکیل 1x"</item>
+ <item msgid="4012689927622382874">"اینیمیشن اسکیل 1.5x"</item>
+ <item msgid="3289156759925947169">"اینیمیشن اسکیل 2x"</item>
+ <item msgid="7705857441213621835">"اینیمیشن اسکیل 5x"</item>
+ <item msgid="6660750935954853365">"اینیمیشن اسکیل 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"انیمیشن آف ہے"</item>
+ <item msgid="1138649021950863198">"انیمیشن اسکیل 5x."</item>
+ <item msgid="4394388961370833040">"انیمیشن اسکیل 1x"</item>
+ <item msgid="8125427921655194973">"انیمیشن اسکیل 1.5x"</item>
+ <item msgid="3334024790739189573">"انیمیشن اسکیل 2x"</item>
+ <item msgid="3170120558236848008">"اینیمیشن اسکیل 5x"</item>
+ <item msgid="1069584980746680398">"انیمیشن اسکیل 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"کوئی نہیں"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (محفوظ)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (محفوظ)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (محفوظ)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (محفوظ)"</item>
+ <item msgid="3547211260846843098">"4K (اعلی سکیل شدہ)"</item>
+ <item msgid="5411365648951414254">"4K (اعلی سکیل شدہ، محفوظ)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (دوہری سکرین)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"کوئی نہیں"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (گرافکس)"</item>
+ <item msgid="1340692776955662664">"glGetError پر کال کا انبار"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"آف"</item>
+ <item msgid="675719912558941285">"نیلا غیر مستطیل نما کلپ خطہ بنائیں"</item>
+ <item msgid="1064373276095698656">"سبز رنگ میں آزمودہ ڈرائنگ کمانڈز کو نمایاں کریں"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"آف"</item>
+ <item msgid="2751513398307949636">"بارز کے بطور اسکرین پر"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo میں"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"آف"</item>
+ <item msgid="7688197031296835369">"اوور ڈرا والے حصے دکھائیں"</item>
+ <item msgid="2290859360633824369">"Deuteranomaly کیلئے حصے دکھائیں"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"معیاری حد"</item>
+ <item msgid="4071574792028999443">"کوئی پس منظر والے پروسیسز نہیں ہیں"</item>
+ <item msgid="4810006996171705398">"زیادہ سے زیادہ 1 پروسیس"</item>
+ <item msgid="8586370216857360863">"زیادہ سے زیادہ 2 پروسیسز"</item>
+ <item msgid="836593137872605381">"زیادہ سے زیادہ 3 پروسیسز"</item>
+ <item msgid="7899496259191969307">"زیادہ سے زیادہ 4 پروسیسز"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"چارجنگ"</item>
+ <item msgid="5220695614993094977">"MTP (میڈیا کی منتقلی کا پروٹوکول)"</item>
+ <item msgid="2086000968159047375">"PTP (تصویر کی منتقلی کا پروٹوکول)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB ایتھرنیٹ)"</item>
+ <item msgid="1718924214939774352">"آڈیو ماخذ"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur-rPK/strings.xml
index 31b76ed..3f6563b 100644
--- a/packages/SettingsLib/res/values-ur-rPK/strings.xml
+++ b/packages/SettingsLib/res/values-ur-rPK/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"پروفائل منتخب کریں"</string>
<string name="category_personal" msgid="1299663247844969448">"ذاتی"</string>
<string name="category_work" msgid="8699184680584175622">"دفتر"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"ڈویلپر کے اختیارات"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"ڈیولپر کے اختیارات فعال کریں"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"ایپ ڈویلپمنٹ کیلئے اختیارات سیٹ کریں"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"اس صارف کیلئے ڈیولپر کے اختیارات دستیاب نہیں ہیں"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"ربط کی ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"رسائی کی جگہ کے نام کی ترتیبات اس صارف کیلئے دستیاب نہیں ہیں"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB ڈیبگ کرنا"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB مربوط ہونے پر ڈيبگ کرنے کی وضع"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB ڈیبگ کرنے کی اجازت دہندگیوں کو منسوخ کریں"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"بگ رپورٹ کا شارٹ کٹ"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"بگ رپورٹ لینے کیلئے پاور مینو میں ایک بٹن دکھائیں"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"بیدار رکھیں"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"چارج ہوتے وقت اسکرین کبھی بھی سلیپ وضع میں نہيں جائے گی"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"بلوٹوتھ HCI کا جاسوسی لاگ فعال کریں"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"سبھی بلوٹوتھ HCI کے پیکٹس ایک فائل میں قید کریں"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM اَن لاکنگ"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"بوٹ لوڈر کو غیر مقفل ہونے کی اجازت دیں"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM اَن لاکنگ کی اجازت دیں؟"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"انتباہ: یہ ترتیب آن ہونے پر آلہ کے تحفظ کی خصوصیات اس آلہ پر کام نہیں کریں گی۔"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"فرضی مقام کی ایپ منتخب کریں"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"فرضی مقام کی کوئی ایپ سیٹ نہیں ہے"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"فرضی مقام کی ایپ: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"نیٹ ورکنگ"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"وائرلیس ڈسپلے سرٹیفیکیشن"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi وربوس لاگنگ فعال کریں"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"جارحانہ Wi‑Fi سے سیلولر ہینڈ اوور"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"ہمیشہ Wi‑Fi روم اسکینز کی اجازت دیں"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"پرانا DHCP کلائنٹ استعمال کریں"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"سیلولر ڈیٹا کو ہمیشہ فعال رکھیں"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"انٹرفیس پر موجود ڈیٹا ٹریفک کی مقدار کی بنیاد پر Wi‑Fi روم اسکینز کی اجازت دیں/اجازت نہ دیں"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"لاگر بفر کے سائز"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"فی لاگ بفر لاگر کے سائز منتخب کریں"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB کنفیگریشن منتخب کریں"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB کنفیگریشن منتخب کریں"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"فرضی مقامات کی اجازت دیں"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"فرضی مقامات کی اجازت دیں"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"منظر انتساب کے معائنہ کو فعال کریں"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"نئے Android DHCP کلائنٹ کی بجائے Lollipop کا DHCP کلائنٹ استعمال کریں۔"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Wi‑Fi فعال ہونے پر بھی موبائل ڈیٹا کو ہمیشہ فعال رکھیں (تیزی سے نیٹ ورک سوئچ کرنے کیلئے)۔"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB ڈیبگ کرنے کی اجازت دیں؟"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB ڈیبگ کرنا صرف ڈیولپمنٹ کے مقاصد کیلئے ہے۔ اپنے کمپیوٹر اور اپنے آلہ کے درمیان ڈیٹا کاپی کرنے کیلئے اسے استعمال کریں، بغیر اطلاع کے اپنے آلہ پر ایپس انسٹال کریں اور لاگ ڈیٹا پڑھیں۔"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"اپنے ذریعہ پہلے سے اجازت یافتہ سبھی کمپیوٹرز سے USB ڈیبگ کرنے کی رسائی کو کالعدم کریں؟"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"ڈویلپمنٹ ترتیبات کی اجازت دیں؟"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"یہ ترتیبات صرف ڈویلپمنٹ استعمال کے ارادے سے ہیں۔ ان سے آپ کا آلہ اور اس پر موجود ایپلیکیشنز بریک ہو سکتی یا غلط برتاؤ کر سکتی ہیں۔"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB پر ایپس کی توثیق کریں"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"نقصان دہ رویے کے مدنظر ADB/ADT کی معرفت انسٹال شدہ ایپس کی جانچ کریں۔"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"مقامی ٹرمینل"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"مقامی شیل رسائی پیش کرنے والی ٹرمینل ایپ فعال کریں"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP چیکنگ"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCP چیکنگ برتاؤ سیٹ کریں"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"ڈیبگ کرنا"</string>
+ <string name="debug_app" msgid="8349591734751384446">"ڈیبگ ایپ منتخب کریں"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"کوئی ڈیبگ ایپلیکیشن سیٹ نہیں ہے"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"ڈیبگنگ ایپلیکیشن: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"ایپلیکیشن منتخب کریں"</string>
+ <string name="no_application" msgid="2813387563129153880">"کچھ نہیں"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"ڈیبگر کا انتظار کریں"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"ڈیبگ کردہ ایپلیکیشن کاروائی سے پہلے ڈیبگر کے منسلک ہونے کا انتظار کرتی ہے"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"ان پٹ"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"ڈرائنگ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"ہارڈ ویئر کے ذریعے تیز کردہ رینڈرنگ"</string>
+ <string name="media_category" msgid="4388305075496848353">"میڈیا"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"مانیٹر کرنا"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"سخت وضع فعال ہے"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"ایپس کے اصل تھریڈ پر طویل اعمال انجام دیتے وقت اسکرین کو فلیش کریں"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"پوائنٹر مقام"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"موجودہ ٹچ ڈیٹا دکھانے والا اسکرین اوور لے"</string>
+ <string name="show_touches" msgid="1356420386500834339">"ٹچز دکھائیں"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"ٹچز کیلئے بصری تاثرات دکھائیں"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"سطح کے اپ ڈیٹس دکھائیں"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"اپ ڈیٹ ہونے پر ونڈو کی پوری سطحیں جھلملائیں"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"GPU منظر اپ ڈیٹس دکھائیں"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU کے ساتھ تیار ہونے پر ملاحظات ونڈوز کے اندر جھلملائیں"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"ہارڈویئر پرتوں کی اپ ڈیٹس دکھائیں"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"ہارڈویئر پرتیں اپ ڈیٹ ہونے پر سبز رنگ میں جھلملائیں"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU اوور ڈرا کو ڈیبگ کریں"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"HW اوور لیز غیر فعال کریں"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"سکرین کی ساخت بنانے کیلئے ہمیشہ GPU استعمال کریں"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"رنگ کی جگہ کو تحریک دیں"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL ٹریسز کو فعال کریں"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"USB آڈیو روٹنگ غیر فعال کریں"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"USB آڈیو پیریفیرلز کیلئے خودکار روٹنگ غیرفعال کریں"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"لے آؤٹ کی حدیں دکھائیں"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"کلپ باؤنڈز، حاشیے وغیرہ دکھائیں"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"RTL لے آؤٹ سمت زبردستی نافذ کریں"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"سبھی زبانوں کیلئے اسکرین لے آؤٹ کی سمت کو RTL پر مجبور کریں"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"CPU استعمال دکھائیں"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"موجودہ CPU استعمال دکھانے والا اسکرین اوورلے"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU رینڈرنگ زبردستی نافذ کریں"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"2D ڈرائنگ کیلئے GPU کا استعمال زبردستی نافذ کریں"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAA زبردستی نافذ کریں"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ایپس میں 4x MSAA فعال کریں"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"غیر مستطیل نما کلپ آپریشنز ڈیبگ کریں"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"پروفائل GPU رینڈرنگ"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"ونڈو اینیمیشن اسکیل"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"منتقلی اینیمیشن اسکیل"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"اینیمیٹر دورانیے کا اسکیل"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"ثانوی ڈسپلیز کو تحریک دیں"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"ایپس"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"سرگرمیوں کو نہ رکھیں"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"صارف کی ہر سرگرمی صارف کے چھوڑنے پر حذف کر دیں"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"پس منظر پروسیس کی حد"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"سبھی ANRs کو دکھائیں"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"پس منظر کی ایپس کیلئے ایپ جواب نہیں دے رہی ہے ڈائلاگ دکھائیں"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"بیرونی پر ایپس کو زبردستی اجازت دیں"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"manifest اقدار سے قطع نظر، کسی بھی ایپ کو بیرونی اسٹوریج پر لکھے جانے کا اہل بناتا ہے"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"سرگرمیوں کو ری سائز ایبل بنائیں"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"manifest اقدار سے قطع نظر، ملٹی ونڈو کیلئے تمام سرگرمیوں کو ری سائز ایبل بناتا ہے۔"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"ڈیسک ٹاپ کا بیک اپ پاس ورڈ"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"ڈیسک ٹاپ کے مکمل بیک اپس فی الحال محفوظ کیے ہوئے نہیں ہیں"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"ڈیسک ٹاپ کے مکمل بیک اپس کیلئے پاس ورڈ کو تبدیل کرنے یا ہٹانے کیلئے ٹچ کریں"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"بیک اپ کا نیا پاس ورڈ سیٹ کر دیا گیا"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"نیا پاس ورڈ اور تصدیق مماثل نہیں ہے"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"بیک اپ پاس ورڈ ترتیب دینے میں ناکامی"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"پرجوش (ڈیفالٹ)"</item>
+ <item msgid="8446070607501413455">"قدرتی"</item>
+ <item msgid="6553408765810699025">"معیاری"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"بہتر رنگ"</item>
+ <item msgid="8280754435979370728">"آنکھ سے نظر آنے والے قدرتی رنگ"</item>
+ <item msgid="5363960654009010371">"ڈیجیٹیل مواد کیلئے بہترین کردہ رنگ"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"غیر فعال ایپس"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"غیر فعال۔ ٹوگل کرنے کیلئے ٹچ کریں۔"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"فعال۔ ٹوگل کرنے کیلئے ٹچ کریں۔"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"چل رہی سروسز"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"فی الحال چل رہی سروسز دیکھیں اور انہیں کنٹرول کریں"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"رات موڈ"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"غیر فعال"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"ہمیشہ آن"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"خودکار"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"فائل مرموز کاری میں بدلیں"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"بدلیں…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"فائل پہلے ہی مرموز شدہ ہے"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"فائل پر مبنی مرموز کاری میں بدلا جا رہا ہے"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"ڈیٹا پارٹیشن کو فائل پر مبنی مرموز کاری میں بدلیں۔\n !!تنبیہ!! اس سے آپ کا سارا ڈیٹا مٹ جائے گا۔\n یہ خصوصیت الفا ہے اور شاید ٹھیک طرح سے کام نہ کرے۔\n جاری رکھنے کیلئے \'صاف کریں اور بدلیں…\' دبائیں۔"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"صاف کریں اور بدلیں…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"تصویری رنگ موڈ"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB استعمال کریں"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"غیر فعال"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranopia (سرخ سبز)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (سرخ سبز)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (نیلا پیلا)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"رنگ کی اصلاح"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"یہ خصوصیت تجرباتی ہے اور اس کی وجہ سے کاکردگی متاثر ہو سکتی ہے۔"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> کے ذریعہ منسوخ کردیا گیا"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml b/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
index f2cae2c..a84c5d5 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
+++ b/packages/SettingsLib/res/values-uz-rUZ/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"To‘sib qo‘yilgan"</item>
<item msgid="1805837518286731242">"Sifatsiz ulanishdan vaqtinchalik chetlashish"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Hech qachon tekshirilmasin"</item>
+ <item msgid="6042769699089883931">"Faqat DRM kontent tekshirilsin"</item>
+ <item msgid="9174900380056846820">"Har doim tekshirilsin"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Hech qachon HDCP tekshiruvidan foydalanilmasin"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64 KB"</item>
+ <item msgid="505611754508988476">"256 KB"</item>
+ <item msgid="6361286924268716397">"1 MB"</item>
+ <item msgid="6405203239560695266">"4 MB"</item>
+ <item msgid="3025431211013424097">"16 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64 KB"</item>
+ <item msgid="3534782711045262344">"256 KB"</item>
+ <item msgid="8085867209202153403">"1 MB"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"Bufer: maks. 64 KB"</item>
+ <item msgid="2822309747675758628">"Bufer: maks. 256 KB"</item>
+ <item msgid="6699306198357496731">"Bufer: maks. 1 MB"</item>
+ <item msgid="5748528643937500349">"Bufer: maks. 4 MB"</item>
+ <item msgid="1978629051085111592">"Bufer: maks. 16 MB"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Animatsiya o‘chiq"</item>
+ <item msgid="6624864048416710414">"Animatsiya (0,5x)"</item>
+ <item msgid="2219332261255416635">"Animatsiya (1x)"</item>
+ <item msgid="3544428804137048509">"Animatsiya (1,5x)"</item>
+ <item msgid="3110710404225974514">"Animatsiya (2x)"</item>
+ <item msgid="4402738611528318731">"Animatsiya (5x)"</item>
+ <item msgid="6189539267968330656">"Animatsiya (10x)"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Animatsiya o‘chiq"</item>
+ <item msgid="3375781541913316411">"Animatsiya (0,5x)"</item>
+ <item msgid="1991041427801869945">"Animatiya (1x)"</item>
+ <item msgid="4012689927622382874">"Animatsiya (1,5x)"</item>
+ <item msgid="3289156759925947169">"Animatsiya (2x)"</item>
+ <item msgid="7705857441213621835">"Animatsiya (5x)"</item>
+ <item msgid="6660750935954853365">"Animatsiya (10x)"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Animatsiya o‘chiq"</item>
+ <item msgid="1138649021950863198">"0,5x tezlik"</item>
+ <item msgid="4394388961370833040">"1x tezlik"</item>
+ <item msgid="8125427921655194973">"1,5x tezlik"</item>
+ <item msgid="3334024790739189573">"2x tezlik"</item>
+ <item msgid="3170120558236848008">"5x tezlik"</item>
+ <item msgid="1069584980746680398">"10x tezlik"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Ma’lumot yo‘q"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (xavfsiz)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (xavfsiz)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (xavfsiz)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (xavfsiz)"</item>
+ <item msgid="3547211260846843098">"4K (miqyosi o‘zgaradi)"</item>
+ <item msgid="5411365648951414254">"4K (miqyosi o‘zgaradi, xavfsiz)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (ikkita ekran)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Ma’lumot yo‘q"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Grafika)"</item>
+ <item msgid="1340692776955662664">"glGetError’dagi chaqiruvlar ro‘yxati"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"O‘ch."</item>
+ <item msgid="675719912558941285">"To‘g‘ri burchakli bo‘lmagan kesishmalarni ko‘k bilan"</item>
+ <item msgid="1064373276095698656">"Chizmaning sinov buyruqlarini yashil bilan"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"O‘chirib qo‘yish"</item>
+ <item msgid="2751513398307949636">"Ekranda bo‘laklar tarzida"</item>
+ <item msgid="1851438178120770973">"adb shell dumpsys gfxinfo ichida"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"O‘CHIQ"</item>
+ <item msgid="7688197031296835369">"Ortiqcha chizilgan joylarni ko‘rsatish"</item>
+ <item msgid="2290859360633824369">"Muayyan rangdagi hududlarni ajratib belgilash"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Standard cheklov"</item>
+ <item msgid="4071574792028999443">"Fondagi jarayonlarsiz"</item>
+ <item msgid="4810006996171705398">"Ko‘pi bilan 1 ta jarayon"</item>
+ <item msgid="8586370216857360863">"ko‘pi bilan 2 jarayonda"</item>
+ <item msgid="836593137872605381">"Ko‘pi bilan 3 ta jarayon"</item>
+ <item msgid="7899496259191969307">"Ko‘pi bilan 4 ta jarayon"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Quvvat olmoqda"</item>
+ <item msgid="5220695614993094977">"MTP (media fayllarni o‘tkazish protokoli)"</item>
+ <item msgid="2086000968159047375">"PTP (rasmlarni o‘tkazish protokoli)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Audio manbasi"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
index 705194c..82e8dc6 100644
--- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml
+++ b/packages/SettingsLib/res/values-uz-rUZ/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Profil tanlash"</string>
<string name="category_personal" msgid="1299663247844969448">"Shaxsiy"</string>
<string name="category_work" msgid="8699184680584175622">"Ish"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Dasturchi sozlamalari"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Dasturchi sozlamalarini yoqish"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Ilova dasturlash moslamalari"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Bu foydalanuvchiga dasturchi imkoniyatlari taqdim etilmagan"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Ushbu foydalanuvchi uchun VPN sozlamalari mavjud emas"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Ushbu foydalanuvchi uchun Modem rejimi sozlamalari mavjud emas"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Ushbu foydalanuvchi uchun Ulanish nuqtasi nomi (APN) sozlamalari mavjud emas"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB orqali nosozliklarni tuzatish"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"USB orqali kompyuterga ulanganda tuzatish rejimi yoqilsin"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"USB orqali nosozliklarni tuzatishni taqiqlash"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Xatoliklar hisoboti"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Menyuda xatoliklar hisobotini yuborish tugmasi ko‘rsatilsin"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Ekranning yoniq turishi"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Qurilmani quvvatlash vaqtida ekran doim yoniq turadi"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI amallari translatsiyasi jurnali"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Barcha Bluetooth HCI paketlarini bitta faylga saqlash"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Zavod qulfini yechish"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Operatsion tizimni yuklash dasturining qulfini yechishga ruxsat berish"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zavod qulfini yechishga ruxsat berilsinmi?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"OGOHLANTIRISH: Ushbu funksiya yoqilsa, qurilmani himoyalash funksiyasi ishlamay qoladi."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Soxta joylashuv ilovasini tanlash"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Soxta joylashuv ilovasi yo‘q"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Soxta joylashuv ilovasi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Tarmoqlar"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz monitor sertifikatlari"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Batafsil Wi-Fi jurnali"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Mobil internetga o‘tish"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Wi-Fi tarmoqlarini qidirishga doim ruxsat"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Eski DHCP mijoz-dasturidan foydalanish"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Mobil internet o‘chirilmasin"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Ma’lumotlarni uzatish vaqtida trafik hajmiga qarab Wi-Fi tarmoqlarni qidirish funksiyasini yoqish yoki o‘chirish"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Jurnal buferi hajmi"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Jurnal xotirasi hajmini tanlang"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"USB konfiguratsiyasini tanlang"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB konfiguratsiyasini tanlang"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Qo‘lbola joylashuvlarga ruxsat berish"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Joylashuv emulyatsiyasiga ruxsat berish"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Alomatlar tekshiruvini yoqish"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Yangi Android DHCP mijoz-dasturi o‘rniga Lollipop tizimi DHCP mijoz-dasturidan foydalanilsin."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Mobil internet har doim yoniq tursin, hatto Wi-Fi yoniq bo‘lsa ham (bir tarmoqdan ikkinchisiga tezroq o‘tish uchun)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"USB orqali nosozliklarni tuzatishga ruxsat berilsinmi?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB orqali nosozliklarni tuzatish faqat dasturlash maqsadlarida yoqiladi. Undan ma‘lumotlarni qurilmangiz va kompyuter o‘rtasida ko‘chirish, ilovalarni xabarnomasiz o‘rnatish va jurnal ma‘lumotlarini o‘qish uchun foydalaniladi."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"USB orqali nosozliklarni tuzatishga berilgan ruxsat siz hisobingizga kirgan barcha kompyuterlar uchun bekor qilinsinmi?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Dasturlash sozlamalariga ruxsat berilsinmi?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Bu sozlamalar faqat dasturlash maqsadlariga mo‘ljallangan. Shuning uchun, ular qurilmangizga va undagi ilovalariga shikast yetkazib, noto‘g‘ri ishlashiga sabab bo‘lishi mumkin."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"USB orqali o‘rnatish"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"ADB/ADT orqali o‘rnatilgan ilovalar xavfsizligini tekshiring"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Mahalliy terminal"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Mahalliy terminalga kirishga ruxsat beruvchi terminal ilovani faollashtirish"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP tekshiruvi"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"HDCPni tekshirish tartibi"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Nosozliklarni tuzatish"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Nosozliklarni tuzatuvchi ilovani tanlash"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Nosozliklarni tuzatish uchun hech qanday ilova ko‘rsatilmagan"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Nosozliklarni tuzatuvchi ilova: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Ilovani tanlang"</string>
+ <string name="no_application" msgid="2813387563129153880">"Yo‘q"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Tuzatuvchi dasturni kuting"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Ilova nosozliklarni tuzatuvchi dasturga ulanishni kutmoqda"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Matn kiritish"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Chizma"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Vizualizatsiyani apparatli tezlatish"</string>
+ <string name="media_category" msgid="4388305075496848353">"Multimedia"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Qat’iy rejim yoqilgan"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Uzun amallar vaqtida ekranni miltillatish"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Kursor joylashuvi"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Ekranda bosilgan va tegilgan joylarni vizuallashtirish"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Bosilgan joylarni ko‘rsatish"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Ekranda bosilgan joylardagi nuqtalarni ko‘rsatish"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Yuza yangilanishlarini ko‘rsatish"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Yangilangandan so‘ng to‘liq oyna sirtlarini miltillatish"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Ekran yangilanishlarini ko‘rsatish"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"GPU bilan chizishda ekran hududini miltillatish"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Apparatli yangilanishlarni ko‘rsatish"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Yangilanganda apparatli darajalarni yashil bilan belgilash"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU ortiqcha chiziqlarini o‘chirish"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Apparatli qatlamlarni o‘ch. qo‘yish"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Ekranda tasvirlarni biriktirish uchun doim GPU ishlatilsin"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Rang maydonini simulyatsiyalash"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"OpenGL trassasini yoqish"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Audio uzatishni o‘ch. qo‘yish (USB)"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Tashqi USB qurilmaga avto-yo‘naltirishni o‘ch. qo‘yish"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Elementlar chegarasini ko‘rsatish"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Klip, maydon va h.k. chegaralarini ko‘rsatish"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"O‘ngdan chapga qarab yozish"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Barcha tillarda o‘ngdan chapga qarab yozish"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"MP yuklanishini ko‘rsatish"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Joriy MP yuklanishini ko‘rsatuvchi ekran"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"GPU yordamida tezlatish"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Ikki o‘lchamli chizma uchun doim GPU ishlatilsin"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"4x MSAAni yoqish"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"OpenGL ES 2.0 ilovasidan 4x MSAAni yoqish"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"To‘g‘ri burchakli bo‘lmagan kesishma amallarini tuzatish"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU ish vaqtini yozib olish"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Oynalar animatsiyasi"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"O‘tish animatsiyasi"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animatsiya tezligi"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Qo‘shimcha ekran simulyatsiyasi"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Ilovalar"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Faollik ma’lumoti saqlanmasin"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Amal tugagach, uning tarixi tozalansin"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Fondagi jarayonlarni cheklash"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Hamma ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Ilova javob bermayotgani haqida xabar qilish"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Tashqi xotira qurilmasidagi ilova dasturlariga majburiy ruxsat berish"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Manifest qiymatidan qat’i nazar istalgan ilovani tashqi xotiraga saqlash imkonini beradi"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Harakatlarni moslashuvchan o‘lchamga keltirish"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Manifest qiymatidan qat’i nazar barcha harakatlarni ko‘p oynali rejimga moslashtiradi."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Zaxira nusxa uchun parol"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Kompyuterdagi zaxira nusxalar hozirgi vaqtda himoyalanmagan"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Ish stoli to\'liq zaxira nusxalari parolini o‘zgartirish yoki o‘chirish uchun bu yerni bosing."</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Yangi zaxira paroli o‘rnatildi"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Parollar bir-biriga mos kelmadi"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Zaxira parolini o‘rnatib bo‘lmadi"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Yorqin (birlamchi)"</item>
+ <item msgid="8446070607501413455">"Tabiiy"</item>
+ <item msgid="6553408765810699025">"Standart"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Ishlov berilgan ranglar"</item>
+ <item msgid="8280754435979370728">"Ko‘zga ko‘rinadigan tabiiy ranglar"</item>
+ <item msgid="5363960654009010371">"Raqamli kontentga moslashtirilgan ranglar"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Nofaol ilovalar"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Nofaol. O‘zgartirish uchun bu yerga bosing."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Faol. O‘zgartirish uchun bu yerga bosing."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Ishlab turgan ilovalar"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Ishlab turgan ilovalarni ko‘rish va boshqarish"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Tungi rejim"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"O‘chiq"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Har doim yoniq tursin"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Avtomatik"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Faylli shifrga o‘girish"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"O‘girish…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Fayl allaqachon shifrlangan"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Faylli shifrga o‘girilmoqda"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Ma’lumotlaringizni faylli shifrga o‘giring.\n !!Diqqat!! Barcha ma’lumotlaringizni o‘chirib tashlanadi.\n Ushbu funksiya hali alfa-versiya va to‘g‘ri ishlamasligi mumkin.\n Davom etish uchun “O‘chirib tashlash va o‘girish…” tugmasini bosing."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"O‘chirib tashlash va o‘girish…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Rang rejimi"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"sRGB ranglaridan foydalanish"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"O‘chiq"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monoxrom"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deyteranomaliya (qizil/yashil)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaliya (qizil/yashil)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaliya (ko‘k/sariq)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Rangni tuzatish"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Bu funksiya tajribaviy bo‘lib, u qurilma unumdorligiga ta’sir qilishi mumkin."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> bilan almashtirildi"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index 26d32a9..7c3181f 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Bị chặn"</item>
<item msgid="1805837518286731242">"Tạm thời tránh kết nối kém"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Không bao giờ kiểm tra"</item>
+ <item msgid="6042769699089883931">"Chỉ kiểm tra nội dung DRM"</item>
+ <item msgid="9174900380056846820">"Luôn kiểm tra"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Không bao giờ sử dụng kiểm tra HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K/lần tải nhật ký"</item>
+ <item msgid="2822309747675758628">"256K/lần tải nhật ký"</item>
+ <item msgid="6699306198357496731">"1M/lần tải nhật ký"</item>
+ <item msgid="5748528643937500349">"4M/lần tải nhật ký"</item>
+ <item msgid="1978629051085111592">"16M/lần tải nhật ký"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Tắt hình động"</item>
+ <item msgid="6624864048416710414">"Tỷ lệ hình động 0,5x"</item>
+ <item msgid="2219332261255416635">"Tỷ lệ hình động 1x"</item>
+ <item msgid="3544428804137048509">"Tỷ lệ hình động 1,5x"</item>
+ <item msgid="3110710404225974514">"Tỷ lệ hình động 2x"</item>
+ <item msgid="4402738611528318731">"Tỷ lệ hình động 5x"</item>
+ <item msgid="6189539267968330656">"Tỷ lệ hình động 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Tắt hình động"</item>
+ <item msgid="3375781541913316411">"Tỷ lệ hình động 0,5x"</item>
+ <item msgid="1991041427801869945">"Tỷ lệ hình động 1x"</item>
+ <item msgid="4012689927622382874">"Tỷ lệ hình động 1,5x"</item>
+ <item msgid="3289156759925947169">"Tỷ lệ hình động 2x"</item>
+ <item msgid="7705857441213621835">"Tỷ lệ hình động 5x"</item>
+ <item msgid="6660750935954853365">"Tỷ lệ hình động 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Tắt hình động"</item>
+ <item msgid="1138649021950863198">"Tỷ lệ hình động 0,5x"</item>
+ <item msgid="4394388961370833040">"Tỷ lệ hình động 1x"</item>
+ <item msgid="8125427921655194973">"Tỷ lệ hình động 1,5x"</item>
+ <item msgid="3334024790739189573">"Tỷ lệ hình động 2x"</item>
+ <item msgid="3170120558236848008">"Tỷ lệ hình động 5x"</item>
+ <item msgid="1069584980746680398">"Tỷ lệ hình động 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Không có"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (bảo mật)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (bảo mật)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (bảo mật)"</item>
+ <item msgid="1833612718524903568">"4k"</item>
+ <item msgid="238303513127879234">"4k (bảo mật)"</item>
+ <item msgid="3547211260846843098">"4k (đã nâng cấp)"</item>
+ <item msgid="5411365648951414254">"4K (đã nâng cấp, bảo mật)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (màn hình đôi)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Không có"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (Đồ họa)"</item>
+ <item msgid="1340692776955662664">"Chồng lệnh trên glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Tắt"</item>
+ <item msgid="675719912558941285">"Vẽ vùng clip khác hình chữ nhật bằng màu lam"</item>
+ <item msgid="1064373276095698656">"Đánh dấu lệnh vẽ đã kiểm tra bằng màu lục"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Tắt"</item>
+ <item msgid="2751513398307949636">"Trên màn hình dưới dạng thanh"</item>
+ <item msgid="1851438178120770973">"Trong adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Tắt"</item>
+ <item msgid="7688197031296835369">"Hiển thị các vùng vẽ quá"</item>
+ <item msgid="2290859360633824369">"Hiển thị các vùng mô phỏng mù màu lục"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Giới hạn tiêu chuẩn"</item>
+ <item msgid="4071574792028999443">"Không có quá trình nền"</item>
+ <item msgid="4810006996171705398">"Tối đa 1 quá trình"</item>
+ <item msgid="8586370216857360863">"Tối đa 2 quá trình"</item>
+ <item msgid="836593137872605381">"Tối đa 3 quá trình"</item>
+ <item msgid="7899496259191969307">"Tối đa 4 quá trình"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Đang sạc"</item>
+ <item msgid="5220695614993094977">"MTP (Giao thức truyền phương tiện)"</item>
+ <item msgid="2086000968159047375">"PTP (Giao thức truyền hình ảnh)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Nguồn âm thanh"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index c3db6c5..e73f925 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Chọn hồ sơ"</string>
<string name="category_personal" msgid="1299663247844969448">"Cá nhân"</string>
<string name="category_work" msgid="8699184680584175622">"Cơ quan"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Tùy chọn nhà phát triển"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Bật tùy chọn nhà phát triển"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Đặt tùy chọn cho phát triển ứng dụng"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Tùy chọn dành cho nhà phát triển không khả dụng cho người dùng này"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Cài đặt VPN không khả dụng cho người dùng này"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Cài đặt chia sẻ kết nối không khả dụng cho người dùng này"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Cài đặt tên điểm truy cập không khả dụng cho người dùng này"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Gỡ lỗi USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Chế độ gỡ lỗi khi USB được kết nối"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Thu hồi ủy quyền gỡ lỗi USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Phím tắt báo cáo lỗi"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Hiển thị nút trong menu nguồn để thêm báo cáo lỗi"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Không khóa màn hình"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Màn hình sẽ không bao giờ chuyển sang chế độ nghỉ khi sạc"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bật nhật ký theo dõi HCI Bluetooth"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Giữ tất cả các gói HCI bluetooth trong một tệp"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Mở khóa OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Cho phép mở khóa trình khởi động"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Cho phép mở khóa OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"CẢNH BÁO: Tính năng Bảo vệ thiết bị sẽ không hoạt động trên thiết bị này trong khi bạn bật cài đặt này."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Chọn ứng dụng vị trí mô phỏng"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Chưa đặt ứng dụng vị trí mô phỏng nào"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Ứng dụng vị trí mô phỏng: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Mạng"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Chứng nhận hiển thị không dây"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Bật ghi nhật ký chi tiết Wi‑Fi"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Chuyển vùng Wi‑Fi tích cực sang mạng DĐ"</string>
+ <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="legacy_dhcp_client" msgid="694426978909127287">"Sử dụng ứng dụng DHCP cũ"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Dữ liệu di động luôn hoạt động"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Cho phép/Không cho phép quét chuyển vùng Wi‑Fi dựa trên lưu lượng truy cập dữ liệu có tại giao diện"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Kích cỡ tải trình ghi"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Chọn kích thước Trình ghi/lần tải nhật ký"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Chọn cấu hình USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Chọn cấu hình USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Cho phép vị trí mô phỏng"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Cho phép vị trí mô phỏng"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Cho phép kiểm tra thuộc tính của chế độ xem"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Sử dụng ứng dụng DHCP từ Lollipop thay vì ứng dụng DHCP mới của Android."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Luôn giữ cho dữ liệu di động hoạt động, ngay cả khi Wi-Fi đang hoạt động (để chuyển đổi mạng nhanh)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Cho phép gỡ lỗi USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Gỡ lỗi USB chỉ dành cho mục đích phát triển. Hãy sử dụng tính năng này để sao chép dữ liệu giữa máy tính và thiết bị của bạn, cài đặt ứng dụng trên thiết bị của bạn mà không thông báo và đọc dữ liệu nhật ký."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Thu hồi quyền truy cập gỡ lỗi USB từ tất cả máy tính mà bạn đã ủy quyền trước đó?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Cho phép cài đặt phát triển?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Những cài đặt này chỉ dành cho mục đích phát triển. Chúng có thể làm cho thiết bị và ứng dụng trên thiết bị của bạn bị lỗi và hoạt động sai."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Xác minh ứng dụng qua USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Kiểm tra các ứng dụng được cài đặt qua ADB/ADT để xem có hoạt động gây hại hay không."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Dòng lệnh cục bộ"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Bật ứng dụng dòng lệnh cung cấp quyền truy cập vỏ cục bộ"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Kiểm tra HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Đặt hành vi kiểm tra HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Gỡ lỗi"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Chọn ứng dụng gỡ lỗi"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Không có ứng dụng gỡ lỗi nào được đặt"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Ứng dụng gỡ lỗi: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Chọn ứng dụng"</string>
+ <string name="no_application" msgid="2813387563129153880">"Không có ứng dụng"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Đợi trình gỡ lỗi"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Ứng dụng được gỡ lỗi chờ trình gỡ lỗi đính kèm trước khi thực hiện"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Nhập"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Vẽ"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Kết xuất có tăng tốc phần cứng"</string>
+ <string name="media_category" msgid="4388305075496848353">"Phương tiện"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Giám sát"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Đã bật chế độ nghiêm ngặt"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Màn hình flash khi ứng dụng thực hiện các hoạt động dài trên chuỗi chính"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Vị trí con trỏ"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Lớp phủ màn hình hiển thị dữ liệu chạm hiện tại"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Hiển thị số lần chạm"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Hiển thị phản hồi trực quan cho các lần chạm"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Hiển thị cập nhật bề mặt"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Chuyển nhanh toàn bộ các giao diện cửa sổ khi các giao diện này cập nhật"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Hiện cập nhật giao diện GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Chuyển nhanh chế độ xem trong cửa sổ khi được vẽ bằng GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Hiện c.nhật lớp phần cứng"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Lớp phần cứng flash có màu xanh khi chúng cập nhật"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Hiển thị mức vẽ quá GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Vô hiệu hóa các lớp phủ HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Luôn sử dụng GPU để tổng hợp màn hình"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Mô phỏng không gian màu"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Bật theo dõi OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Tắt định tuyến âm thanh USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Tắt định tuyến tự động tới thiết bị âm thanh ngoại vi USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Hiển thị ranh giới bố cục"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Hiển thị viền đoạn video, lề, v.v.."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Buộc hướng bố cục RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Buộc hướng bố cục màn hình RTL cho tất cả ngôn ngữ"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Hiển thị mức sử dụng CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Lớp phủ màn hình hiển thị mức sử dụng CPU hiện tại"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Bắt buộc kết xuất GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Bắt buộc sử dụng GPU cho bản vẽ 2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Bắt buộc 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Bật 4x MSAA trong ứng dụng OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Gỡ lỗi h.động của clip khác hình chữ nhật"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Kết xuất GPU cấu hình"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Tỷ lệ hình động của cửa sổ"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Tỷ lệ hình động chuyển tiếp"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Tỷ lệ thời lượng"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Mô phỏng màn hình phụ"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Ứng dụng"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Không lưu hoạt động"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Hủy mọi hoạt động ngay khi người dùng rời khỏi"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Giới hạn quá trình nền"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Hiển thị tất cả ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Hiện hộp thoại Ứng dụng ko đáp ứng cho ứng dụng nền"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Buộc cho phép các ứng dụng trên bộ nhớ ngoài"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Giúp ứng dụng bất kỳ đủ điều kiện được ghi vào bộ nhớ ngoài bất kể giá trị tệp kê khai là gì"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Buộc các hoạt động có thể thay đổi kích thước"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Giúp tất cả hoạt động có thể thay đổi kích thước cho nhiều cửa sổ bất kể giá trị tệp kê khai là gì."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Mật khẩu sao lưu của máy tính"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Sao lưu toàn bộ máy tính hiện không được bảo vệ"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Chạm để thay đổi hoặc xóa mật khẩu dành cho bộ sao lưu toàn bộ tới máy tính"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Đã đặt mật khẩu sao lưu mới"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Mật khẩu mới và xác nhận không khớp"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Đặt mật khẩu sao lưu không thành công"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Sống động (mặc định)"</item>
+ <item msgid="8446070607501413455">"Tự nhiên"</item>
+ <item msgid="6553408765810699025">"Tiêu chuẩn"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Màu tăng cường"</item>
+ <item msgid="8280754435979370728">"Màu tự nhiên giống như nhìn bằng mắt"</item>
+ <item msgid="5363960654009010371">"Màu được tối ưu hóa cho nội dung kỹ thuật số"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Ứng dụng không hoạt động"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Không hoạt động. Chạm để chuyển đổi."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Đang hoạt động. Chạm để chuyển đổi."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Các dịch vụ đang hoạt động"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Xem và kiểm soát các dịch vụ hiện đang hoạt động"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Chế độ ban đêm"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Đã tắt"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Luôn bật"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Tự động"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Chuyển đổi sang mã hóa tệp"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Chuyển đổi..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Đã mã hóa tệp"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Chuyển đổi sang chế độ mã hóa dựa trên tệp"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Chuyển đổi phân vùng dữ liệu sang chế độ mã hóa dựa trên tệp.\n !!Cảnh báo!! Tính năng này sẽ xóa tất cả dữ liệu của bạn.\n Tính năng này trong giai đoạn alpha và có thể không hoạt động đúng cách.\n Nhấn \'Xóa và chuyển đổi...\' để tiếp tục."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Xóa và chuyển đổi…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Chế độ màu của ảnh"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Sử dụng sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Đã tắt"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Mù màu toàn bộ"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Mù màu xanh lục nhẹ (đỏ-xanh lục)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Mù màu đỏ không hoàn toàn (đỏ-xanh lục)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Mù màu (xanh lam-vàng)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Sửa màu"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Tính năng này là tính năng thử nghiệm và có thể ảnh hưởng đến hoạt động."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Bị ghi đè bởi <xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index b7d99a1..1378aaa 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"已停用"</item>
<item msgid="1805837518286731242">"暂时关闭(网络状况不佳)"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"永不检查"</item>
+ <item msgid="6042769699089883931">"仅检查 DRM 内容"</item>
+ <item msgid="9174900380056846820">"总是检查"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"一律不使用 HDCP 检查"</item>
+ <item msgid="3878793616631049349">"仅使用 HDCP 检查 DRM 内容"</item>
+ <item msgid="45075631231212732">"始终使用 HDCP 检查"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"每个日志缓冲区64K"</item>
+ <item msgid="2822309747675758628">"每个日志缓冲区256K"</item>
+ <item msgid="6699306198357496731">"每个日志缓冲区1M"</item>
+ <item msgid="5748528643937500349">"每个日志缓冲区4M"</item>
+ <item msgid="1978629051085111592">"每个日志缓冲区16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"关闭动画"</item>
+ <item msgid="6624864048416710414">"动画缩放 0.5x"</item>
+ <item msgid="2219332261255416635">"动画缩放 1x"</item>
+ <item msgid="3544428804137048509">"动画缩放 1.5x"</item>
+ <item msgid="3110710404225974514">"动画缩放 2x"</item>
+ <item msgid="4402738611528318731">"动画缩放 5x"</item>
+ <item msgid="6189539267968330656">"动画缩放 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"关闭动画"</item>
+ <item msgid="3375781541913316411">"动画缩放 0.5x"</item>
+ <item msgid="1991041427801869945">"动画缩放 1x"</item>
+ <item msgid="4012689927622382874">"动画缩放 1.5x"</item>
+ <item msgid="3289156759925947169">"动画缩放 2x"</item>
+ <item msgid="7705857441213621835">"动画缩放 5x"</item>
+ <item msgid="6660750935954853365">"动画缩放 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"关闭动画"</item>
+ <item msgid="1138649021950863198">"动画缩放 0.5x"</item>
+ <item msgid="4394388961370833040">"动画缩放 1x"</item>
+ <item msgid="8125427921655194973">"动画缩放 1.5x"</item>
+ <item msgid="3334024790739189573">"动画缩放 2x"</item>
+ <item msgid="3170120558236848008">"动画缩放 5x"</item>
+ <item msgid="1069584980746680398">"动画缩放 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"无"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p(安全)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p(安全)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p(安全)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K(安全)"</item>
+ <item msgid="3547211260846843098">"4K(画质提升)"</item>
+ <item msgid="5411365648951414254">"4K(画质提升、安全)"</item>
+ <item msgid="1311305077526792901">"720p,1080p(双屏)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"无"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace(图形)"</item>
+ <item msgid="1340692776955662664">"glGetError 上的调用堆栈"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"关闭"</item>
+ <item msgid="675719912558941285">"以蓝色填充非矩形剪裁区域"</item>
+ <item msgid="1064373276095698656">"以绿色突出显示测试绘制命令"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"关闭"</item>
+ <item msgid="2751513398307949636">"在屏幕上显示为条形图"</item>
+ <item msgid="1851438178120770973">"在 adb shell dumpsys gfxinfo 中"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"关闭"</item>
+ <item msgid="7688197031296835369">"显示过度绘制区域"</item>
+ <item msgid="2290859360633824369">"显示适合绿色弱视患者查看的区域"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"标准限制"</item>
+ <item msgid="4071574792028999443">"不允许后台进程"</item>
+ <item msgid="4810006996171705398">"不得超过1个进程"</item>
+ <item msgid="8586370216857360863">"不得超过2个进程"</item>
+ <item msgid="836593137872605381">"不得超过3个进程"</item>
+ <item msgid="7899496259191969307">"不得超过4个进程"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"充电"</item>
+ <item msgid="5220695614993094977">"MTP(媒体传输协议)"</item>
+ <item msgid="2086000968159047375">"PTP(图片传输协议)"</item>
+ <item msgid="7398830860950841822">"RNDIS(USB 以太网)"</item>
+ <item msgid="1718924214939774352">"音频来源"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index e7c6d14..886a7ce 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"选择个人资料"</string>
<string name="category_personal" msgid="1299663247844969448">"个人"</string>
<string name="category_work" msgid="8699184680584175622">"工作"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"开发者选项"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"启用开发者选项"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"设置应用开发选项"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"此用户无法使用开发者选项"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"此用户无权修改VPN设置"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"此用户无权修改网络共享设置"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"此用户无权修改接入点名称设置"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB调试"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"连接USB后启用调试模式"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"撤消USB调试授权"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"错误报告快捷方式"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"在电源菜单中显示用于提交错误报告的按钮"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"不锁定屏幕"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"充电时屏幕不会休眠"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"启用蓝牙 HCI 信息收集日志"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"捕获单个文件中的所有蓝牙 HCI 包"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解锁"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允许解锁引导加载程序"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允许 OEM 解锁吗?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告:如果开启此设置,此设备上的设备保护功能将无法使用。"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"选择模拟位置信息应用"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"尚未设置模拟位置信息应用"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"模拟位置信息应用:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"网络"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"无线显示认证"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"启用WLAN详细日志记录功能"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"主动从WLAN网络切换到移动数据网络"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允许WLAN漫游扫描"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"使用旧版 DHCP 客户端"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"始终开启移动数据网络"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"根据接口中目前的数据流量允许/禁止WLAN漫游扫描"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"日志记录器缓冲区大小"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"选择每个日志缓冲区的日志记录器大小"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"选择USB配置"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"选择USB配置"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"允许模拟位置"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"允许模拟位置"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"启用视图属性检查功能"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"使用 Lollipop 的 DHCP 客户端,而不是新的 Android DHCP 客户端。"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"始终开启移动数据网络,即使 WLAN 网络已开启(便于快速切换网络)。"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"是否允许USB调试?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB调试仅适用于开发工作。该功能可用于在您的计算机和设备之间复制数据、在您的设备上安装应用而不发送通知以及读取日志数据。"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"是否针对您之前授权的所有计算机撤消USB调试的访问权限?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"允许开发设置?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"这些设置仅适用于开发工作。一旦启用,会导致您的设备以及设备上的应用崩溃或出现异常。"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"通过USB验证应用"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"通过 ADB/ADT 检查安装的应用是否存在有害行为。"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"本地终端"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"启用终端应用,以便在本地访问 Shell"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP 检查"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"设置 HDCP 检查行为"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"调试"</string>
+ <string name="debug_app" msgid="8349591734751384446">"选择调试应用"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"未设置任何调试应用"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"调试应用:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"选择应用"</string>
+ <string name="no_application" msgid="2813387563129153880">"无"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"等待调试器"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"调试应用会在执行前等待附加调试器"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"输入"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"绘图"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"硬件加速渲染"</string>
+ <string name="media_category" msgid="4388305075496848353">"媒体"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"监控"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"启用严格模式"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"应用在主线程上执行长时间操作时闪烁屏幕"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"指针位置"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"屏幕叠加层显示当前触摸数据"</string>
+ <string name="show_touches" msgid="1356420386500834339">"显示触摸操作"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"为触摸操作提供视觉提示"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"显示面 (surface) 更新"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"窗口中的面 (surface) 更新时全部闪烁"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"显示 GPU 视图更新"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"使用 GPU 进行绘图时闪烁显示窗口中的视图"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"显示硬件层更新"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash 硬件层在进行更新时会显示为绿色"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"调试 GPU 过度绘制"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"停用 HW 叠加层"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"始终使用 GPU 进行屏幕合成"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"模拟颜色空间"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"启用 OpenGL 跟踪"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"关闭USB音频转接"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"关闭自动转接至USB音频外围设备的功能"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"显示布局边界"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"显示剪辑边界、边距等。"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"强制使用从右到左的布局方向"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"强制将所有语言区域的屏幕布局方向改为从右到左"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"显示 CPU 使用情况"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"屏幕叠加层显示当前 CPU 使用情况"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"强制进行 GPU 渲染"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"强制使用 GPU 进行 2D 绘图"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"强制启用 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"在 OpenGL ES 2.0 应用中启用 4x MSAA"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"调试非矩形剪裁操作"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"GPU 呈现模式分析"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"窗口动画缩放"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"过渡动画缩放"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"动画程序时长缩放"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"模拟辅助显示设备"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"应用"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"不保留活动"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"用户离开后即销毁每个活动"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"后台进程限制"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"显示所有“应用无响应”(ANR)"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"为后台应用显示“应用无响应”对话框"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"强制允许将应用写入外部存储设备"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"允许将任何应用写入外部存储设备(无论清单值是什么)"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"强制将活动设为可调整大小"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"将所有活动设为可配合多窗口环境调整大小(无论清单值是什么)。"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"桌面备份密码"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"桌面完整备份当前未设置密码保护"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"触摸可更改或删除用于桌面完整备份的密码"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"已设置了新的备份密码"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"新密码和确认密码不一致"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"设置备份密码失败"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"鲜亮(默认)"</item>
+ <item msgid="8446070607501413455">"自然"</item>
+ <item msgid="6553408765810699025">"标准"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"增强的颜色"</item>
+ <item msgid="8280754435979370728">"肉眼所看到的自然颜色"</item>
+ <item msgid="5363960654009010371">"针对数字内容优化的颜色"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"未启用的应用"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"未启用。触摸即可切换。"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"已启用。触摸即可切换。"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"正在运行的服务"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"查看和控制当前正在运行的服务"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"夜间模式"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"始终开启"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"自动"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"转换为文件加密"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"转换…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"文件已加密"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"正在转换为文件加密"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"将数据分区转换为文件加密。\n!!警告!!此操作将会清除您所有的数据。\n此功能为 Alpha 版功能,可能无法正常运行。\n要继续操作,请按“清除并转换…”。"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"清除并转换…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"图片颜色模式"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"使用 sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"已停用"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"全色盲"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"绿色弱视(红绿色)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"红色弱视(红绿色)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"蓝色弱视(蓝黄色)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"色彩校正"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"此功能为实验性功能,可能会影响性能。"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"已被“<xliff:g id="TITLE">%1$s</xliff:g>”覆盖"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index b8a1ebb..f15caff 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"已封鎖"</item>
<item msgid="1805837518286731242">"目前正暫時避開欠佳的連線"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"不要檢查"</item>
+ <item msgid="6042769699089883931">"僅檢查 DRM 內容"</item>
+ <item msgid="9174900380056846820">"永遠檢查"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"不使用 HDCP 檢查"</item>
+ <item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
+ <item msgid="45075631231212732">"永遠使用 HDCP 檢查"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"每個記錄緩衝區 64K"</item>
+ <item msgid="2822309747675758628">"每個記錄緩衝區 256K"</item>
+ <item msgid="6699306198357496731">"每個記錄緩衝區 1M"</item>
+ <item msgid="5748528643937500349">"每個記錄緩衝區 4M"</item>
+ <item msgid="1978629051085111592">"每個記錄緩衝區 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"關閉動畫"</item>
+ <item msgid="6624864048416710414">"動畫比例 .5x"</item>
+ <item msgid="2219332261255416635">"動畫比例 1x"</item>
+ <item msgid="3544428804137048509">"動畫比例 1.5x"</item>
+ <item msgid="3110710404225974514">"動畫比例 2x"</item>
+ <item msgid="4402738611528318731">"動畫比例 5x"</item>
+ <item msgid="6189539267968330656">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"關閉動畫"</item>
+ <item msgid="3375781541913316411">"動畫比例 .5x"</item>
+ <item msgid="1991041427801869945">"動畫比例 1x"</item>
+ <item msgid="4012689927622382874">"動畫比例 1.5x"</item>
+ <item msgid="3289156759925947169">"動畫比例 2x"</item>
+ <item msgid="7705857441213621835">"動畫比例 5x"</item>
+ <item msgid="6660750935954853365">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"關閉動畫"</item>
+ <item msgid="1138649021950863198">"動畫比例 .5x"</item>
+ <item msgid="4394388961370833040">"動畫比例 1x"</item>
+ <item msgid="8125427921655194973">"動畫比例 1.5x"</item>
+ <item msgid="3334024790739189573">"動畫比例 2x"</item>
+ <item msgid="3170120558236848008">"動畫比例 5x"</item>
+ <item msgid="1069584980746680398">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"無"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480P (安全)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720P (安全)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080 (安全)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (安全)"</item>
+ <item msgid="3547211260846843098">"4K (放大)"</item>
+ <item msgid="5411365648951414254">"4K ( 放大,安全)"</item>
+ <item msgid="1311305077526792901">"720P,1080P (雙屏幕)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"無"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (圖片)"</item>
+ <item msgid="1340692776955662664">"調用 glGetError 堆疊"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"關閉"</item>
+ <item msgid="675719912558941285">"以藍色畫出非矩形裁剪區域"</item>
+ <item msgid="1064373276095698656">"以綠色顯示已測試的繪圖指令"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"關閉"</item>
+ <item msgid="2751513398307949636">"在螢幕上以列顯示"</item>
+ <item msgid="1851438178120770973">"在「adb shell dumpsys gfxinfo」指令中"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"關閉"</item>
+ <item msgid="7688197031296835369">"顯示過度繪製區域"</item>
+ <item msgid="2290859360633824369">"顯示綠色弱視區域"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"標準限制"</item>
+ <item msgid="4071574792028999443">"無背景處理程序"</item>
+ <item msgid="4810006996171705398">"最多 1 個處理程序"</item>
+ <item msgid="8586370216857360863">"最多 2 個處理程序"</item>
+ <item msgid="836593137872605381">"最多 3 個處理程序"</item>
+ <item msgid="7899496259191969307">"最多 4 個處理程序"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"充電"</item>
+ <item msgid="5220695614993094977">"MTP (媒體傳輸協定)"</item>
+ <item msgid="2086000968159047375">"PTP (圖片傳輸協定)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB 以太網)"</item>
+ <item msgid="1718924214939774352">"音效檔案來源"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 170bc0f..afbdb31 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"選擇設定檔"</string>
<string name="category_personal" msgid="1299663247844969448">"個人"</string>
<string name="category_work" msgid="8699184680584175622">"公司"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"開發人員選項"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"啟用開發人員選項"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"設定應用程式開發選項"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"這位使用者無法使用開發人員選項"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"這位使用者無法修改 VPN 設定"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"這位使用者無法修改網絡共享設定"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"這位使用者無法修改接入點名稱設定"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB 偵錯"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"連接 USB 時進入偵錯模式"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"撤銷 USB 偵錯授權"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"錯誤舉報捷徑"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"在電源選單中顯示提交錯誤舉報的按鈕"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"保持啟用"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕永不休眠"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探記錄"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"擷取單一檔案內的所有藍牙 HCI 封包"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"原始設備製造商 (OEM) 解鎖"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許 Bootloader 被解鎖"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"允許原始設備製造商 (OEM) 解鎖嗎?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告:這項設定開啟時,這部裝置上的裝置保護功能將無法運作。"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"選擇模擬位置應用程式"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"尚未設定模擬位置應用程式"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"模擬位置應用程式:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"網絡"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"加強 Wi-Fi 至流動數據轉換"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"永遠允許 Wi-Fi 漫遊掃瞄"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"使用舊的 DHCP 用戶端"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"經常啟用流動數據"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"根據介面中目前的數據流量允許/禁止 WiFi 漫遊掃瞄"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"選取每個記錄緩衝區的記錄器空間"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"選取 USB 設定"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"選取 USB 設定"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"允許模擬位置"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"允許模擬位置"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"啟用檢視屬性檢查"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"使用 Lollipop 的 DHCP 用戶端,而不是新的 Android DHCP 用戶端。"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"即使 Wi‑Fi 已啟用,仍永遠啟用流動數據 (可快速切換網絡)。"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"允許 USB 偵錯嗎?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB 偵錯是針對應用程式開發而設計的功能,可讓您在電腦與裝置間複製資料、不用通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"要針對先前授權的所有電腦撤銷 USB 偵錯存取權嗎?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"允許開發設定?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發用途,可能會導致您的裝置及應用程式損毀或運作不正常。"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"透過 USB 驗證應用程式"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"透過 ADB/ADT 檢查安裝的應用程式有否有害的行為。"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"本機終端機"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"啟用可提供本機命令介面存取權的終端機應用程式"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP 檢查"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"設定 HDCP 檢查行為"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"除錯"</string>
+ <string name="debug_app" msgid="8349591734751384446">"選取除錯應用程式"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"未設定除錯應用程式"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"正在為應用程式除錯:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"選取應用程式"</string>
+ <string name="no_application" msgid="2813387563129153880">"無"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"等待除錯程式"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"執行已除錯的應用程式前等待附加除錯程式"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"輸入"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"繪圖"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"硬件加速轉譯"</string>
+ <string name="media_category" msgid="4388305075496848353">"媒體"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"監控"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"嚴格模式已啟用"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"當應用程式在主執行緒中進行長時間作業時,讓螢幕閃爍"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"指標位置"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"在螢幕上重疊顯示目前的觸控資料"</string>
+ <string name="show_touches" msgid="1356420386500834339">"顯示觸控回應"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"顯示觸控位置的視覺回應"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"顯示表層更新"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"更新表層時閃動整個視窗表層"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"顯示 GPU 畫面更新"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"使用 GPU 繪圖時在視窗中閃動畫面"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"顯示硬件層更新"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"在硬件層更新時閃動綠燈"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"GPU 透支偵錯"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"停用 HW 重疊效果"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"永遠使用 GPU 進行畫面合成"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"模擬色彩空間"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"啟用 OpenGL 追蹤"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"停用 USB 音效檔案路由功能"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"停用 USB 音效檔案周邊設備的自動路由功能"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"顯示版面界限"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"顯示剪輯範圍、邊界等"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"強制使用從右至左的版面配置方向"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"強制將所有語言代碼的畫面配置方向改為從右至左"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"顯示 CPU 使用量"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"在螢幕上重疊顯示目前的 CPU 使用量"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"強制使用 GPU 轉譯"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"強制使用 GPU 進行 2D 繪圖"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"強制 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"在 OpenGL ES 2.0 應用程式中啟用 4x MSAA"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"對非矩形裁剪操作進行偵錯"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"分析 GPU 轉譯"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"視窗動畫比例"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"轉場動畫比例"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator 片長比例"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"模擬次要顯示器"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"應用程式"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"不要保留活動"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"使用者離開活動後隨即銷毀活動"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"背景處理程序限制"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"顯示所有 ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"顯示背景應用程式的「應用程式無回應」對話框"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"強制允許應用程式寫入到外部儲存空間"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"允許將所有應用程式寫入到外部儲存完間 (所有資訊清單值)"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"強制可變更活動尺寸"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"在任何資訊清單值下,允許為多個視窗變更所有活動的尺寸。"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"桌面電腦備份密碼"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"桌上電腦的完整備份目前未受保護"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"輕觸即可更改或移除桌上電腦完整備份的密碼"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"已設定新備份密碼"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"新密碼與確認密碼不符"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"無法設定備份密碼"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"生動 (預設)"</item>
+ <item msgid="8446070607501413455">"自然"</item>
+ <item msgid="6553408765810699025">"標準"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"顏色已強化"</item>
+ <item msgid="8280754435979370728">"如眼前所見的自然顏色"</item>
+ <item msgid="5363960654009010371">"優化作數碼內容使用的顏色"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"已暫停的應用程式"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"已暫停。輕觸即可切換。"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"運作中。輕觸即可切換。"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"執行中的服務"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"查看並控制目前正在執行中的服務"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"夜間模式"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"永遠開啟"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"轉換為檔案加密"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"轉換…"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"已加密檔案"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"正在轉換為檔案式加密"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"轉換資料分區至檔案式加密。\n!警告!這會清除您的所有資料。\n 這是測試功能,可能未能正常運作。\n如要繼續,請按 [清除並轉換…] 。"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"清除並轉換…"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"相片顏色模式"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"使用 sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"已停用"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"全色盲"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"綠色弱視 (紅綠)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"紅色弱視 (紅綠)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"藍色弱視 (藍黃)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"色彩校正"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"這是一項實驗性功能,可能會影響效能。"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"已由「<xliff:g id="TITLE">%1$s</xliff:g>」覆寫"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index ac1a5ad..50bde80 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"已封鎖"</item>
<item msgid="1805837518286731242">"目前正暫時避開品質不佳的連線"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"不要檢查"</item>
+ <item msgid="6042769699089883931">"僅檢查 DRM 內容"</item>
+ <item msgid="9174900380056846820">"一律檢查"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"不使用 HDCP 檢查"</item>
+ <item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
+ <item msgid="45075631231212732">"一律使用 HDCP 檢查"</item>
+ </string-array>
+ <string-array name="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"每個紀錄緩衝區 64K"</item>
+ <item msgid="2822309747675758628">"每個紀錄緩衝區 256K"</item>
+ <item msgid="6699306198357496731">"每個紀錄緩衝區 1M"</item>
+ <item msgid="5748528643937500349">"每個紀錄緩衝區 4M"</item>
+ <item msgid="1978629051085111592">"每個紀錄緩衝區 16M"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"關閉動畫"</item>
+ <item msgid="6624864048416710414">"動畫比例 0.5x"</item>
+ <item msgid="2219332261255416635">"動畫比例 1x"</item>
+ <item msgid="3544428804137048509">"動畫比例 1.5x"</item>
+ <item msgid="3110710404225974514">"動畫比例 2x"</item>
+ <item msgid="4402738611528318731">"動畫比例 5x"</item>
+ <item msgid="6189539267968330656">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"關閉動畫"</item>
+ <item msgid="3375781541913316411">"動畫比例 0.5x"</item>
+ <item msgid="1991041427801869945">"動畫比例 1x"</item>
+ <item msgid="4012689927622382874">"動畫比例 1.5x"</item>
+ <item msgid="3289156759925947169">"動畫比例 2x"</item>
+ <item msgid="7705857441213621835">"動畫比例 5x"</item>
+ <item msgid="6660750935954853365">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"關閉動畫"</item>
+ <item msgid="1138649021950863198">"動畫比例 0.5x"</item>
+ <item msgid="4394388961370833040">"動畫比例 1x"</item>
+ <item msgid="8125427921655194973">"動畫比例 1.5x"</item>
+ <item msgid="3334024790739189573">"動畫比例 2x"</item>
+ <item msgid="3170120558236848008">"動畫比例 5x"</item>
+ <item msgid="1069584980746680398">"動畫比例 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"無"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (安全)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (安全)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (安全)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (安全)"</item>
+ <item msgid="3547211260846843098">"4K (畫質提升)"</item>
+ <item msgid="5411365648951414254">"4K (畫質提升、安全)"</item>
+ <item msgid="1311305077526792901">"720p、1080p (雙螢幕)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"無"</item>
+ <item msgid="9089630089455370183">"Logcat"</item>
+ <item msgid="5397807424362304288">"Systrace (圖片)"</item>
+ <item msgid="1340692776955662664">"glGetError 的呼叫堆疊"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"關閉"</item>
+ <item msgid="675719912558941285">"將非矩形裁剪區域塗上藍色"</item>
+ <item msgid="1064373276095698656">"使用綠色標明測試繪圖指令"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"關閉"</item>
+ <item msgid="2751513398307949636">"在螢幕上以列顯示"</item>
+ <item msgid="1851438178120770973">"在「adb shell dumpsys gfxinfo」指令中"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"關閉"</item>
+ <item msgid="7688197031296835369">"顯示透支區域"</item>
+ <item msgid="2290859360633824369">"顯示綠色弱視區域"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"標準限制"</item>
+ <item msgid="4071574792028999443">"不執行背景處理程序"</item>
+ <item msgid="4810006996171705398">"最多 1 個處理程序"</item>
+ <item msgid="8586370216857360863">"最多 2 個處理程序"</item>
+ <item msgid="836593137872605381">"最多 3 個處理程序"</item>
+ <item msgid="7899496259191969307">"最多 4 個處理程序"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"充電"</item>
+ <item msgid="5220695614993094977">"MTP (媒體傳輸通訊協定)"</item>
+ <item msgid="2086000968159047375">"PTP (圖片傳輸通訊協定)"</item>
+ <item msgid="7398830860950841822">"RNDIS (USB 乙太網路)"</item>
+ <item msgid="1718924214939774352">"音訊來源"</item>
+ <item msgid="8126315616613006284">"MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index 8a00d8c..88109a2 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"選擇設定檔"</string>
<string name="category_personal" msgid="1299663247844969448">"個人"</string>
<string name="category_work" msgid="8699184680584175622">"公司"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"開發人員選項"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"啟用開發人員選項"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"設定應用程式開發選項"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"這位使用者無法使用開發人員選項"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"這位使用者無法修改 VPN 設定"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"這位使用者無法修改網路共用設定"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"這位使用者無法修改存取點名稱設定"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB 偵錯"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"連接 USB 時進入偵錯模式"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"撤銷 USB 偵錯授權"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"錯誤回報捷徑"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"在電源選單中顯示取得錯誤報告的按鈕"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"螢幕不休眠"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕不會進入休眠"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探紀錄"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"擷取單一檔案內的所有藍牙 HCI 封包"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解鎖"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許解除鎖定開機載入器"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允許 OEM 解鎖嗎?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"警告:開啟這項設定時,您將無法使用這個裝置的防盜功能。"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"選取模擬位置應用程式"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"未設定模擬位置應用程式"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"模擬位置應用程式:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"網路連線"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細紀錄設定"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Wi-Fi 至行動數據轉換強化"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"一律允許 Wi-Fi 漫遊掃描"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"使用舊版 DHCP 用戶端"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"行動數據連線一律保持啟用狀態"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"根據介面中目前的數據流量允許/禁止 Wi-Fi 漫遊掃描"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"紀錄器緩衝區空間"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"選取每個紀錄緩衝區的紀錄器空間"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"選取 USB 設定"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"選取 USB 設定"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"允許模擬位置"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"允許模擬位置"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"啟用檢視屬性檢查"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"使用 Lollipop 的 DHCP 用戶端,不使用新型 Android DHCP 用戶端。"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"即使 Wi‑Fi 連線已啟用,一律將行動數據連線保持啟用狀態 (以便快速切換網路)。"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"允許 USB 偵錯嗎?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB 偵錯是針對應用程式開發而設計的功能,可讓您複製電腦和裝置中的資料、不需經由通知即可在裝置上安裝應用程式,以及讀取記錄資料。"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"要針對先前授權的所有電腦撤銷 USB 偵錯權限嗎?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"允許開發設定?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"這些設定僅供開發之用,可能導致您的裝置及裝置中的應用程式毀損或運作異常。"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"透過 USB 驗證應用程式"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"透過 ADB/ADT 檢查安裝的應用程式是否出現有害的行為。"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"本機終端機"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"啟用可提供本機命令介面存取權的終端機應用程式"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP 檢查"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"設定 HDCP 檢查行為"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"偵錯"</string>
+ <string name="debug_app" msgid="8349591734751384446">"選取偵錯應用程式"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"未設定偵錯應用程式"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"偵錯應用程式:<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"選取應用程式"</string>
+ <string name="no_application" msgid="2813387563129153880">"無"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"等待偵錯程式"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"執行受偵錯的應用程式之前,先等待偵錯程序附加完成"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"輸入"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"繪圖"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"硬體加速轉譯"</string>
+ <string name="media_category" msgid="4388305075496848353">"媒體"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"監控"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"嚴格模式已啟用"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"當應用程式在主執行緒中進行長時間作業時,讓螢幕閃爍"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"指標位置"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"觸控時在螢幕上方顯示相關資料"</string>
+ <string name="show_touches" msgid="1356420386500834339">"顯示觸控回應"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"顯示觸控位置的視覺回應"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"顯示表層更新"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"更新表層時閃爍顯示整個視窗表層"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"顯示 GPU 畫面更新"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"使用 GPU 繪圖時在視窗中閃爍顯示畫面"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"顯示硬體層更新"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"在硬體層更新時閃綠燈"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"針對 GPU 重複繪圖進行偵錯"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"停用硬體重疊圖層"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"一律使用 GPU 進行畫面合成"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"模擬色彩空間"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"啟用 OpenGL 追蹤"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"停用 USB 音訊路由"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"停用 USB 音訊周邊設備的自動路由功能"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"顯示版面配置界限"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"顯示剪輯範圍、邊界等。"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"強制使用從右至左版面配置方向"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"強制將所有語言代碼的畫面配置方向改為從右至左"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"顯示 CPU 使用量"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"在螢幕上方顯示目前的 CPU 使用量"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"強制使用 GPU 轉譯"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"強制使用 GPU 進行 2D 繪圖"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"強制 4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"在 OpenGL ES 2.0 應用程式中啟用 4x MSAA"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"針對非矩形裁剪操作進行偵錯"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"剖析 GPU 轉譯"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"視窗動畫比例"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"轉場動畫比例"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"動畫影片長度比例"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"模擬次要顯示器"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"應用程式"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"不要保留活動"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"使用者離開活動後立刻刪除所有活動內容"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"背景處理程序限制"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"顯示所有無回應程式"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"為背景應用程式顯示「應用程式無回應」對話方塊"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"強制允許將應用程式寫入外部儲存空間"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"允許將任何應用程式寫入外部儲存空間 (無論資訊清單值為何)"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"將活動強制設為可調整大小"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"將所有活動設為可配合多重視窗環境調整大小 (無論資訊清單值為何)。"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"電腦備份密碼"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"電腦完整備份目前未受保護"</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"輕觸即可變更或移除電腦完整備份的密碼"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"已設定新備份密碼"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"新密碼與確認密碼不符。"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"無法設定備份密碼"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"鮮活 (預設)"</item>
+ <item msgid="8446070607501413455">"自然"</item>
+ <item msgid="6553408765810699025">"標準"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"增強的色彩"</item>
+ <item msgid="8280754435979370728">"眼睛所見的自然色彩"</item>
+ <item msgid="5363960654009010371">"針對數位內容最佳化的色彩"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"未啟用的應用程式"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"未啟用。輕觸即可切換。"</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"使用中。輕觸即可切換。"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"正在運作的服務"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"查看並管理目前正在執行的服務"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"夜間模式"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"一律開啟"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"轉換成檔案加密"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"轉換..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"已將檔案加密"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"正在轉換成個別加密檔案"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"將資料分割區轉換成個別加密檔案。\n警告!這項操作會清除您的所有資料。\n這是 Alpha 版功能,可能無法正確運作。\n按下 [清除並轉換...] 即可繼續。"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"清除並轉換..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"螢幕色彩模式"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"使用 sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"已停用"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"全色盲"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"綠色弱視 (紅-綠)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"紅色弱視 (紅-綠)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"藍色弱視 (藍-黃)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"色彩校正"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"這是一項實驗性功能,可能會對效能造成影響。"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"已改為<xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index 3404563..eaadce6 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -48,4 +48,111 @@
<item msgid="5660739516542454527">"Uvinjelwe"</item>
<item msgid="1805837518286731242">"Okwesikhashana ivikela ukuxhumana okungaqinile"</item>
</string-array>
+ <string-array name="hdcp_checking_titles">
+ <item msgid="441827799230089869">"Akusoze kuhlole"</item>
+ <item msgid="6042769699089883931">"Hlola okuqukethwe kwe-DRM kuphela"</item>
+ <item msgid="9174900380056846820">"Hlola njalo"</item>
+ </string-array>
+ <string-array name="hdcp_checking_summaries">
+ <item msgid="505558545611516707">"Ungasoze wasebenzisa ukuhlola kwe-HDCP"</item>
+ <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="select_logd_size_titles">
+ <item msgid="3100534874529240291">"64K"</item>
+ <item msgid="505611754508988476">"256K"</item>
+ <item msgid="6361286924268716397">"1M"</item>
+ <item msgid="6405203239560695266">"4M"</item>
+ <item msgid="3025431211013424097">"16M"</item>
+ </string-array>
+ <string-array name="select_logd_size_lowram_titles">
+ <item msgid="524799395770610154">"64K"</item>
+ <item msgid="3534782711045262344">"256K"</item>
+ <item msgid="8085867209202153403">"1M"</item>
+ </string-array>
+ <string-array name="select_logd_size_summaries">
+ <item msgid="7346595473588765019">"64K ngebhafa yelogu ngayinye"</item>
+ <item msgid="2822309747675758628">"256K ngebhafa yelogu ngayinye"</item>
+ <item msgid="6699306198357496731">"1M ngebhafa yelogu ngayinye"</item>
+ <item msgid="5748528643937500349">"4M ngebhafa yelogu ngayinye"</item>
+ <item msgid="1978629051085111592">"16M ngebhafa yelogu ngayinye"</item>
+ </string-array>
+ <string-array name="window_animation_scale_entries">
+ <item msgid="8134156599370824081">"Isithombe esinyakazayo sivliwe"</item>
+ <item msgid="6624864048416710414">"Isilinganiso sesithombe esinyakazayo ngu-05x"</item>
+ <item msgid="2219332261255416635">"Isilinganiso sesithombe esinyakazayo ngu-1x"</item>
+ <item msgid="3544428804137048509">"Isilinganiso sesithombe esinyakazayo"</item>
+ <item msgid="3110710404225974514">"Isilinganiso sesithombe esinyakazayo ngu-2x"</item>
+ <item msgid="4402738611528318731">"Isilinganiso sesithombe esinyakazayo"</item>
+ <item msgid="6189539267968330656">"Isilinganiso sesithombe esinyakazayo ngu-10x"</item>
+ </string-array>
+ <string-array name="transition_animation_scale_entries">
+ <item msgid="8464255836173039442">"Isithombe esinyakazayo sivaliwe"</item>
+ <item msgid="3375781541913316411">"Isilinganiso sesithombe esinyakazayo ngu-.5x"</item>
+ <item msgid="1991041427801869945">"Isilinganiso sesithombe ngu-1x"</item>
+ <item msgid="4012689927622382874">"Isilinganiso sesithombe esinyakazayo ngu-1.5x"</item>
+ <item msgid="3289156759925947169">"Isilinganiso sesithombe esinyakazayo ngu-2x"</item>
+ <item msgid="7705857441213621835">"Isilinganisi sesithombe esinyakazayo 5x"</item>
+ <item msgid="6660750935954853365">"Isilinganiso sesithombe esinyakazayo"</item>
+ </string-array>
+ <string-array name="animator_duration_scale_entries">
+ <item msgid="6039901060648228241">"Isithombe esinyakazayo sivaliwe"</item>
+ <item msgid="1138649021950863198">"Isilinganiso sesithombe esinyakazayo ngu-05x"</item>
+ <item msgid="4394388961370833040">"Isilinganiso sesithombe esinyakazayo ngu-1x"</item>
+ <item msgid="8125427921655194973">"Isilinganiso sesithombe esinyakazayo ngu-1.5x"</item>
+ <item msgid="3334024790739189573">"Isilinganiso sesithombe esinyakazayo ngu-2x"</item>
+ <item msgid="3170120558236848008">"Isilinganisi sesithombe esinyakazayo 5x"</item>
+ <item msgid="1069584980746680398">"Isilinganiso sesithombe esinyakazayo 10x"</item>
+ </string-array>
+ <string-array name="overlay_display_devices_entries">
+ <item msgid="1606809880904982133">"Akunalutho"</item>
+ <item msgid="9033194758688161545">"480p"</item>
+ <item msgid="1025306206556583600">"480p (kuphephile)"</item>
+ <item msgid="1853913333042744661">"720p"</item>
+ <item msgid="3414540279805870511">"720p (kuphephile)"</item>
+ <item msgid="9039818062847141551">"1080p"</item>
+ <item msgid="4939496949750174834">"1080p (kuphephile)"</item>
+ <item msgid="1833612718524903568">"4K"</item>
+ <item msgid="238303513127879234">"4K (kuphephile)"</item>
+ <item msgid="3547211260846843098">"4K (isikali esiphezulu)"</item>
+ <item msgid="5411365648951414254">"4K (isikali esiphezulu, kuphephile)"</item>
+ <item msgid="1311305077526792901">"720p, 1080p (isikrini esihamba ngokubili)"</item>
+ </string-array>
+ <string-array name="enable_opengl_traces_entries">
+ <item msgid="3191973083884253830">"Akunalutho"</item>
+ <item msgid="9089630089455370183">"i-Logcat"</item>
+ <item msgid="5397807424362304288">"i-Systrace (izithombe)"</item>
+ <item msgid="1340692776955662664">"Isitaki socingo ku-glGetError"</item>
+ </string-array>
+ <string-array name="show_non_rect_clip_entries">
+ <item msgid="993742912147090253">"Valiwe"</item>
+ <item msgid="675719912558941285">"Dweba indawo yesiqeshana engesiyena unxantathu ngokuphuzi okwesibhakabhaka"</item>
+ <item msgid="1064373276095698656">"Beka obala iziqondiso ezihloliwe zokudwebela ngokuphuzi"</item>
+ </string-array>
+ <string-array name="track_frame_time_entries">
+ <item msgid="2193584639058893150">"Valiwe"</item>
+ <item msgid="2751513398307949636">"Kusikrini njengamabha"</item>
+ <item msgid="1851438178120770973">"Ku-adb shell dumpsys gfxinfo"</item>
+ </string-array>
+ <string-array name="debug_hw_overdraw_entries">
+ <item msgid="8190572633763871652">"Valiwe"</item>
+ <item msgid="7688197031296835369">"Bonisa izindawo zokukhipha okungaphezulu"</item>
+ <item msgid="2290859360633824369">"Bonisa izindawo ze-Deuteranomaly"</item>
+ </string-array>
+ <string-array name="app_process_limit_entries">
+ <item msgid="3401625457385943795">"Isilanganiso esivamile"</item>
+ <item msgid="4071574792028999443">"Azikho izinqubo zesizinda"</item>
+ <item msgid="4810006996171705398">"Inqubo engezansi kweyodwa ngokwesilinganiso"</item>
+ <item msgid="8586370216857360863">"Izinqubo ezingaba ngu-2 ngokwesilinganiso esiphazulu"</item>
+ <item msgid="836593137872605381">"Izinqubo okungenani ezingu-3"</item>
+ <item msgid="7899496259191969307">"Izinguquko ezingingadluli ezingu-4"</item>
+ </string-array>
+ <string-array name="usb_configuration_titles">
+ <item msgid="488237561639712799">"Iyashaja"</item>
+ <item msgid="5220695614993094977">"I-MTP (Iphrothokholi Yokudlulisa Imidiya)"</item>
+ <item msgid="2086000968159047375">"I-PTP (Iphrothokholi Yokudlulisa Izithombe)"</item>
+ <item msgid="7398830860950841822">"I-RNDIS (USB Ethernet)"</item>
+ <item msgid="1718924214939774352">"Umthombo Womsindo"</item>
+ <item msgid="8126315616613006284">"I-MIDI"</item>
+ </string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index 4575ac1..69c3c21 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -135,4 +135,158 @@
<string name="choose_profile" msgid="8229363046053568878">"Khetha iphrofayela"</string>
<string name="category_personal" msgid="1299663247844969448">"Okomuntu siqu"</string>
<string name="category_work" msgid="8699184680584175622">"Umsebenzi"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"Izinketho Zonjiniyela"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"Nika amandla izinketho zonjiniyela"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"Setha okukhethwayo kwentuthuko yohlelo lokusebenza"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"Izinketho zonjiniyela azitholakali kulo msebenzisi"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"Izilungiselelo ze-VPN azitholakaleli lo msebenzisi"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"Izilungiselelo zokusebenzisa njengemodemu azitholakaleli lo msebenzisi"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"Izilungiselelo ze-Igama Lephoyinti Lokufinyelela azitholakaleli lo msebenzisi"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"Ukulungisa iphutha le-USB"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"Lungisa iphutha lemodi lapho i-USB ixhunyiwe"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Buyisa ukugunyaza kokususa iphutha le-USB"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"Isinqamuleli sombiko wesiphazamisi"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Bonisa inkinobho kwimenyu yamandla ngokuthatha umbiko wesiphazamiso"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"Hlala uphapheme"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"Isikrini asisoze salala ngenkathi sishaja"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Nika amandla i-Bluetooth HCI yelogu lokuhlola"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="730247028210113851">"Shutha wonke amaphakethe we-bluetooth HCI kufayela"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"Ukuvula i-OEM"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Vumela ukuthi i-bootloader ivulwe"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vumela ukuvula i-OEM?"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"ISEXWAYISO: Izici zokuvikela idivayisi ngeke zisebenze kule divayisi ngenkathi le sethingi ivuliwe."</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"Khetha uhlelo lokusebenza lwendawo mbumbulu"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"Alikho uhlelo lokusebenza lwendawo mbumbulu esethiwe"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"Uhlelo lokusebenza lwendawo mbumbulu: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"Ukunethiwekha"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"Ukunikezwa isitifiketi sokubukeka okungenantambo"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"Nika amandlaukungena kwe-Wi-Fi Verbose"</string>
+ <string name="wifi_aggressive_handover" msgid="9194078645887480917">"Ukunikezela kwe-Wi-Fi kuya kuselula okunamandla"</string>
+ <string name="wifi_allow_scan_with_traffic" msgid="3601853081178265786">"Vumela njalo ukuskena kokuzula kwe-Wi-Fi"</string>
+ <string name="legacy_dhcp_client" msgid="694426978909127287">"Sebenzisa iklayenti le-legacy le-DHCP"</string>
+ <string name="mobile_data_always_on" msgid="7745605759775320362">"Idatha yeselula ihlala isebenza"</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>
+ <string name="wifi_allow_scan_with_traffic_summary" msgid="2575101424972686310">"Vumela/Ungavumeli ukuskena kokuzula kwe-Wi-Fi okususelwa kunani ledatha yethrafikhi ekhona ekusebenzisaneni"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"Amasayizi weloga ngebhafa"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Khetha amasayizi weloga ngebhafa ngayinye yelogu"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"Khetha ukulungiselelwa kwe-USB"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Khetha ukulungiselelwa kwe-USB"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"Vumela izindawo mbumbulu"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"Vumela izindawo mbumbulu"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"Nika amandla ukubuka"</string>
+ <string name="legacy_dhcp_client_summary" msgid="163383566317652040">"Sebenzisa iklayenti le-DHCP kusukela ku-Lollipop esikhundleni seklayenti elisha le-Android DHCP."</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Hlala ugcine idatha yeselula isebenza, nanoma i-Wi-Fi isebenza (ngokushintshwa kwenethiwekhi okusheshayo)."</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Vumela ukulungisa iphutha le-USB?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"Ukulungisa iphutha le-USB kuhloselwe izinjongo zokuthuthukisa kuphela. Ingasebenziselwa ukukopisha idatha phakathi kwekhompyutha yakho nedivaysi yakho, faka izinhlelo zokusebenza kwidivaysi yakho ngaphandle kwesaziso, bese ufunda idatha yefayela lokungena."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Buyisa ukufinyelela ekususeni iphutha le-USB kusuka kuwo wonke amakhompyutha owagunyaze ngaphambilini?"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"Vumele izilungiselelo zokuthuthukisa?"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"Lezi zilungiselelo zenzelwe ukusetshenziswa ukuthuthukisa kuphela. Zingadala ukuthi idivayisi yakho kanye nensiza ekuyona ukuthi iphuke noma iziphathe kabi."</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Qiniseka izinhlelo zokusebenza nge-USB"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Hlola izinhlelo zokusebenza ezifakiwe nge-ADB/ADT ngokuziphatha okuyingozi."</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"Itheminali yasendaweni"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"Nika amandla uhlelo lokusebenza letheminali olunikeza ukufinyelela kwasendaweni kwe-shell"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"Ihlola i-HDCP"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Hlela ukuhlola ukuziphatha kwe-HDCP"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"Ilungisa inkinga"</string>
+ <string name="debug_app" msgid="8349591734751384446">"Khetha uhlelo lokusebenza lokulungisa inkinga"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"Alukho uhlelo lokusebenza lokulungisa inkinga olusethiwe"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"Uhlelo lokusebenza lokulungisa inkinga: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="select_application" msgid="5156029161289091703">"Khetha uhlelo lokusebenza"</string>
+ <string name="no_application" msgid="2813387563129153880">"Lutho"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"Linda isilungisi senkinga"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Uhlelo lokusebenza olulungiswe inkinga lulinda isilungisi senkinga ukuba sinamathisele ngaphambi kokuphuma"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"Okufakwayo"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"Umdwebo"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Ukunikezelwa okusheshisiwe kwezingxenyekazi zekhompyutha"</string>
+ <string name="media_category" msgid="4388305075496848353">"Imidiya"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"Ukwengamela"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"Imodi eqinile ivumelwe"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"Ukuphazimisa isikrini uma izinhlelo zokusebenza ziyenza umsebenzi ngesikhathi eside kuchungechunge olukhulu"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"Isikhombi sendawo"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"Imbondela yesikrini ibonisa idatha yokuthinta yamanje"</string>
+ <string name="show_touches" msgid="1356420386500834339">"Khombisa okuthintiwe"</string>
+ <string name="show_touches_summary" msgid="6684407913145150041">"Khombisa umbiko obonwayo wokuthintiwe"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"Buka izibuyekezo ezibonakalayo"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"Khanyisa ukubonakala kwalo lonke iwindi uma libuyekezwa"</string>
+ <string name="show_hw_screen_updates" msgid="5036904558145941590">"Buka izibuyekezo ze-GPU"</string>
+ <string name="show_hw_screen_updates_summary" msgid="1115593565980196197">"Ukubuka okukhanyayo phakathi kwamawindi uma kudwetshwe nge-GPU"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"Bonisa izibuyekezo zezendlalelo izingxenyekazi zekhompyutha"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Izendlalelo zengxenyekazi zekhompyutha eziluhlaza uma zibuyekeza"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"Susa iphutha lokukhipha okungaphezulu kwe-GPU"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"Khubaza izimbondela ze-HW"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"Njalo sebenzisa i-GPU ukwakha isikrini"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"Qoqa isikhala sombala"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Nika amandla ukulandelwa komkhondo kwe-OpenGL"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Khubaza umzila womsindo we-USB"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Khubaza ukwenza umzila ngokuzenzakalelayo kuma-pheripherals womsindo we-USB"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"Khombisa imingcele yokumiseka"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"Bonisa imikhawulo, imiphetho, njll, yesiqeshana."</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Phoqelela isikhombisi-ndlela sesakhiwo se-RTL"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Phoqelela isikhombisi-ndlela sesikrini ku-RTL kuzo zonke izifunda"</string>
+ <string name="show_cpu_usage" msgid="2389212910758076024">"Bonisa ukusebenzisa i-CPU"</string>
+ <string name="show_cpu_usage_summary" msgid="2113341923988958266">"Imbondela yesikrini ibonisa ukusetshenziswa kwe-CPU okwamanje"</string>
+ <string name="force_hw_ui" msgid="6426383462520888732">"Phoqa ukunikeza i-GPU"</string>
+ <string name="force_hw_ui_summary" msgid="5535991166074861515">"Phoqelela ukusetshenziswa kwe-GPU ngomdwebo we-2d"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"Phoqelela i-4x MSAA"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"Nika amandla i-4x MSAA ezinhlelweni zokusebenza ze-OpenGL ES 2.0"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"Susa iphutha ekusebenzeniokungekhona unxantathu kwesiqeshana"</string>
+ <string name="track_frame_time" msgid="6146354853663863443">"Iphrofayela ye-GPU iyasebenzeka"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"Iwindi yesilinganisi sesithombe esinyakazayo"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"Isilinganiso sesithombe soku"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"Isilinganiso sobude besikhathi somenzi womfanekiso onyakazayo"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"Hlalisa kahle ukubukwa kwesibili"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"Izinhlelo zokusebenza"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"Ungagcini imisibenzi"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Phihliza zonke izenzo ngokushesha ngemva kokuna umsebenzisi awuyeka"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"Isilinganiso senqubo yesithombe sanemuva"</string>
+ <string name="show_all_anrs" msgid="28462979638729082">"Bonisa wonke ama-ANR"</string>
+ <string name="show_all_anrs_summary" msgid="641908614413544127">"Boniso idayalogi Yohlelo Lokusebenza Olungasabeli kwizinhlelo zokusebenza zasemuva"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"Phoqelela ukuvumela izinhlelo zokusebenza ngaphandle"</string>
+ <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Yenza noma uluphi uhlelo lokusebenza lifaneleke ukuthi libhalwe kusitoreji sangaphandle, ngaphandle kwamavelu we-manifest"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"Imisebenzi yamandla izonikezwa usayizi omusha"</string>
+ <string name="force_resizable_activities_summary" msgid="4508217476997182216">"Yenza yonke imisebenzi ibe nosayizi abasha kuwindi lokuningi, ngokunganaki amanani we-manifest."</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"Iphasiwedi yokusekela ngokulondoloza ye-Desktop"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Ukusekela ngokulondoloza okugcwele kwe-Desktop akuvikelekile okwamanje."</string>
+ <string name="local_backup_password_summary_change" msgid="2731163425081172638">"Khetha ukushintsha noma ukususa iphasiwedi yokwenziwa kwezipele ngokugcwele kwideskithophu"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"Iphasiwedi entsha eyisipele isethiwe"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Iphasiwedi entsha nokuqinisekisa akufani"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Ukungaphumeleli kokusetha iphasiwedi eyisipele"</string>
+ <string-array name="color_mode_names">
+ <item msgid="2425514299220523812">"Dlidlizela (okuzenzakalelayo)"</item>
+ <item msgid="8446070607501413455">"Kwemvelo"</item>
+ <item msgid="6553408765810699025">"Okujwayelekile"</item>
+ </string-array>
+ <string-array name="color_mode_descriptions">
+ <item msgid="4979629397075120893">"Imibala ethuthukisiwe"</item>
+ <item msgid="8280754435979370728">"Imibala yemvelo njengoba ibonwa yilihlo"</item>
+ <item msgid="5363960654009010371">"Imibala elungiselelwe yokuqukethwe kwedijithali"</item>
+ </string-array>
+ <string name="inactive_apps_title" msgid="1317817863508274533">"Izinhlelo zokusebenza ezingasebenzi"</string>
+ <string name="inactive_app_inactive_summary" msgid="6768756967594202411">"Akusebenzi. Shintsha ukuze ushintshe."</string>
+ <string name="inactive_app_active_summary" msgid="4512911571954375968">"Kuyasebenza. Thinta ukuze ushintshe."</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"Amasevisi asebenzayo"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"Buka futhi ulawule amasevisi asebenzayo okwamanje"</string>
+ <string name="night_mode_title" msgid="2594133148531256513">"Imodi yasebusuku"</string>
+ <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string>
+ <string name="night_mode_no" msgid="9171772244775838901">"Kukhutshaziwe"</string>
+ <string name="night_mode_yes" msgid="2218157265997633432">"Njalo ivuliwe"</string>
+ <string name="night_mode_auto" msgid="7508348175804304327">"Okuzenzakalelayo"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"Phendulisela ekubethelweni kwefayela"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Iyaphendulela..."</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Sekuvele kubethelwe ngefayela"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"Ukuphendulela kuya ekubethelweni okususelwe kwifayela"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Phendulela kwehlukaniswa kwedatha kuya ekubethelweni okususelwe kufayela.\n !!Isexwayiso!! Lokhu kuzosula yonke idatha yakho.\n Lesi sici siyi-alpha, futhi singahle singasebenzi kahle.\n Cindezela okuthi \'Sula futhi uphendulele...\' ukuze uqhubeke."</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"Sula futhi uphendulele..."</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"Imodi yombala wesithombe"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"Sebenzisa i-sRGB"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Kukhutshaziwe"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"I-Monochromacy"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"I-Deuteranomaly (bomvu-luhlaza)"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"I-Protanomaly (bomvu-luhlaza)"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"I-Tritanomaly (luhlaza okwesibhakabhaka-phuzi)"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Ukulungiswa kombala"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Lesi sici esesilingo futhi singathinta ukusebenza."</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Igitshezwe ngaphezulu yi-<xliff:g id="TITLE">%1$s</xliff:g>"</string>
</resources>
diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml
index a52ed69..4e88c1c 100644
--- a/packages/SettingsLib/res/values/arrays.xml
+++ b/packages/SettingsLib/res/values/arrays.xml
@@ -78,4 +78,306 @@
<!-- Status message of Wi-Fi when connectiong is being verified. -->
<item>Temporarily avoiding poor connection</item>
</string-array>
+
+ <!-- Titles for HDCP checking preference. [CHAR LIMIT=35] -->
+ <string-array name="hdcp_checking_titles">
+ <item>Never check</item>
+ <item>Check for DRM content only</item>
+ <item>Always check</item>
+ </string-array>
+
+ <!-- Values for HDCP checking preference. -->
+ <string-array name="hdcp_checking_values" translatable="false" >
+ <item>never</item>
+ <item>drm-only</item>
+ <item>always</item>
+ </string-array>
+
+ <!-- Summaries for HDCP checking preference. [CHAR LIMIT=100]-->
+ <string-array name="hdcp_checking_summaries" >
+ <item>Never use HDCP checking</item>
+ <item>Use HDCP checking for DRM content only</item>
+ <item>Always use HDCP checking</item>
+ </string-array>
+
+ <!-- Titles for logd limit size selection preference. [CHAR LIMIT=14] -->
+ <string-array name="select_logd_size_titles">
+ <item>64K</item>
+ <item>256K</item>
+ <item>1M</item>
+ <item>4M</item>
+ <item>16M</item>
+ </string-array>
+
+ <!-- Titles for logd limit size lowram selection preference. [CHAR LIMIT=14] -->
+ <string-array name="select_logd_size_lowram_titles">
+ <item>64K</item>
+ <item>256K</item>
+ <item>1M</item>
+ </string-array>
+
+ <!-- Values for logd limit size selection preference. -->
+ <string-array name="select_logd_size_values" translatable="false" >
+ <item>65536</item>
+ <item>262144</item>
+ <item>1048576</item>
+ <item>4194304</item>
+ <item>16777216</item>
+ </string-array>
+
+ <!-- Summaries for logd limit size selection preference. [CHAR LIMIT=30]-->
+ <string-array name="select_logd_size_summaries" >
+ <item>64K per log buffer</item>
+ <item>256K per log buffer</item>
+ <item>1M per log buffer</item>
+ <item>4M per log buffer</item>
+ <item>16M per log buffer</item>
+ </string-array>
+
+ <!-- Titles for window animation scale preference. [CHAR LIMIT=35] -->
+ <string-array name="window_animation_scale_entries">
+ <item>Animation off</item>
+ <item>Animation scale .5x</item>
+ <item>Animation scale 1x</item>
+ <item>Animation scale 1.5x</item>
+ <item>Animation scale 2x</item>
+ <item>Animation scale 5x</item>
+ <item>Animation scale 10x</item>
+ </string-array>
+
+ <!-- Values for window animation scale preference. -->
+ <string-array name="window_animation_scale_values" translatable="false" >
+ <item>0</item>
+ <item>.5</item>
+ <item>1</item>
+ <item>1.5</item>
+ <item>2</item>
+ <item>5</item>
+ <item>10</item>
+ </string-array>
+
+ <!-- Titles for transition animation scale preference. [CHAR LIMIT=35] -->
+ <string-array name="transition_animation_scale_entries">
+ <item>Animation off</item>
+ <item>Animation scale .5x</item>
+ <item>Animation scale 1x</item>
+ <item>Animation scale 1.5x</item>
+ <item>Animation scale 2x</item>
+ <item>Animation scale 5x</item>
+ <item>Animation scale 10x</item>
+ </string-array>
+
+ <!-- Values for transition animation scale preference. -->
+ <string-array name="transition_animation_scale_values" translatable="false" >
+ <item>0</item>
+ <item>.5</item>
+ <item>1</item>
+ <item>1.5</item>
+ <item>2</item>
+ <item>5</item>
+ <item>10</item>
+ </string-array>
+
+ <!-- Titles for animator duration scale preference. [CHAR LIMIT=35] -->
+ <string-array name="animator_duration_scale_entries">
+ <item>Animation off</item>
+ <item>Animation scale .5x</item>
+ <item>Animation scale 1x</item>
+ <item>Animation scale 1.5x</item>
+ <item>Animation scale 2x</item>
+ <item>Animation scale 5x</item>
+ <item>Animation scale 10x</item>
+ </string-array>
+
+ <!-- Values for animator duration scale preference. -->
+ <string-array name="animator_duration_scale_values" translatable="false" >
+ <item>0</item>
+ <item>.5</item>
+ <item>1</item>
+ <item>1.5</item>
+ <item>2</item>
+ <item>5</item>
+ <item>10</item>
+ </string-array>
+
+ <!-- Titles for overlay display devices preference. [CHAR LIMIT=35] -->
+ <string-array name="overlay_display_devices_entries">
+ <item>None</item>
+ <item>480p</item>
+ <item>480p (secure)</item>
+ <item>720p</item>
+ <item>720p (secure)</item>
+ <item>1080p</item>
+ <item>1080p (secure)</item>
+ <item>4K</item>
+ <item>4K (secure)</item>
+ <item>4K (upscaled)</item>
+ <item>4K (upscaled, secure)</item>
+ <item>720p, 1080p (dual screen)</item>
+ </string-array>
+
+ <!-- Values for overlay display devices preference. -->
+ <string-array name="overlay_display_devices_values" translatable="false" >
+ <item></item>
+ <item>720x480/142</item>
+ <item>720x480/142,secure</item>
+ <item>1280x720/213</item>
+ <item>1280x720/213,secure</item>
+ <item>1920x1080/320</item>
+ <item>1920x1080/320,secure</item>
+ <item>3840x2160/320</item>
+ <item>3840x2160/320,secure</item>
+ <item>1920x1080/320|3840x2160/640</item>
+ <item>1920x1080/320|3840x2160/640,secure</item>
+ <item>1280x720/213;1920x1080/320</item>
+ </string-array>
+
+ <!-- Titles for OpenGL traces preference. [CHAR LIMIT=35] -->
+ <string-array name="enable_opengl_traces_entries">
+ <item>None</item>
+ <item>Logcat</item>
+ <item>Systrace (Graphics)</item>
+ <item>Call stack on glGetError</item>
+ </string-array>
+
+ <!-- Values for OpenGL traces preference. -->
+ <string-array name="enable_opengl_traces_values" translatable="false" >
+ <item>0</item>
+ <item>1</item>
+ <item>systrace</item>
+ <item>error</item>
+ </string-array>
+
+ <!-- Titles for non-rectangular clipping preference. [CHAR LIMIT=35] -->
+ <string-array name="show_non_rect_clip_entries">
+ <item>Off</item>
+ <item>Draw non-rectangular clip region in blue</item>
+ <item>Highlight tested drawing commands in green</item>
+ </string-array>
+
+ <!-- Values for non-rectangular clipping preference. -->
+ <string-array name="show_non_rect_clip_values" translatable="false" >
+ <item>hide</item>
+ <item>region</item>
+ <item>highlight</item>
+ </string-array>
+
+ <!-- Titles for frame time tracking preference. [CHAR LIMIT=35] -->
+ <string-array name="track_frame_time_entries">
+ <item>Off</item>
+ <item>On screen as bars</item>
+ <item>In adb shell dumpsys gfxinfo</item>
+ </string-array>
+
+ <!-- Values for frame time tracking preference. -->
+ <string-array name="track_frame_time_values" translatable="false" >
+ <item>false</item>
+ <item>visual_bars</item>
+ <item>true</item>
+ </string-array>
+
+ <!-- Titles for debug overdraw preference. [CHAR LIMIT=50] -->
+ <string-array name="debug_hw_overdraw_entries">
+ <item>Off</item>
+ <item>Show overdraw areas</item>
+ <item>Show areas for Deuteranomaly</item>
+ </string-array>
+
+ <!-- Values for debug overdraw preference. -->
+ <string-array name="debug_hw_overdraw_values" translatable="false" >
+ <item>false</item>
+ <item>show</item>
+ <item>show_deuteranomaly</item>
+ </string-array>
+
+ <!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
+ <string-array name="app_process_limit_entries">
+ <item>Standard limit</item>
+ <item>No background processes</item>
+ <item>At most 1 process</item>
+ <item>At most 2 processes</item>
+ <item>At most 3 processes</item>
+ <item>At most 4 processes</item>
+ </string-array>
+
+ <!-- Values for app process limit preference. -->
+ <string-array name="app_process_limit_values" translatable="false" >
+ <item>-1</item>
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ <item>4</item>
+ </string-array>
+
+ <!-- USB configuration names for Developer Settings.
+ This can be overridden by devices with additional USB configurations. -->
+ <string-array name="usb_configuration_titles">
+ <item>Charging</item>
+ <item>MTP (Media Transfer Protocol)</item>
+ <item>PTP (Picture Transfer Protocol)</item>
+ <item>RNDIS (USB Ethernet)</item>
+ <item>Audio Source</item>
+ <item>MIDI</item>
+ </string-array>
+
+ <!-- USB configuration values for Developer Settings.
+ These are lists of USB functions passed to the USB Manager to change USB configuraton.
+ This can be overridden by devices with additional USB configurations.
+ Do not translate. -->
+ <string-array name="usb_configuration_values" translatable="false">
+ <!-- Do not translate. -->
+ <item>none</item>
+ <!-- Do not translate. -->
+ <item>mtp</item>
+ <!-- Do not translate. -->
+ <item>ptp</item>
+ <!-- Do not translate. -->
+ <item>rndis</item>
+ <!-- Do not translate. -->
+ <item>audio_source</item>
+ <!-- Do not translate. -->
+ <item>midi</item>
+ </string-array>
+
+ <!-- Possible values for user theme in Display Settings.
+ Do not translate. -->
+ <string-array name="night_mode_entries" translatable="false">
+ <!-- Do not translate. -->
+ <item>@string/night_mode_no</item>
+ <!-- Do not translate. -->
+ <item>@string/night_mode_yes</item>
+ <!-- Do not translate. -->
+ <item>@string/night_mode_auto</item>
+ </string-array>
+
+ <!-- These values should match up with the MODE_NIGHT constants in UiModeManager.
+ Do not translate. -->
+ <string-array name="night_mode_values" translatable="false">
+ <!-- Do not translate. -->
+ <item>1</item>
+ <!-- Do not translate. -->
+ <item>2</item>
+ <!-- Do not translate. -->
+ <item>0</item>
+ </string-array>
+
+ <!-- Display color space adjustment modes for developers -->
+ <string-array name="simulate_color_space_entries" translatable="false">
+ <item>@string/daltonizer_mode_disabled</item>
+ <item>@string/daltonizer_mode_monochromacy</item>
+ <item>@string/daltonizer_mode_deuteranomaly</item>
+ <item>@string/daltonizer_mode_protanomaly</item>
+ <item>@string/daltonizer_mode_tritanomaly</item>
+ </string-array>
+
+ <!-- Values for display color space adjustment modes for developers -->
+ <string-array name="simulate_color_space_values" translatable="false">
+ <item>-1</item>
+ <item>0</item>
+ <item>2</item>
+ <item>1</item>
+ <item>3</item>
+ </string-array>
+
</resources>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index a37196e..55bd08a 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -351,4 +351,369 @@
<!-- Full package name of OEM preferred device feedback reporter. Leave this blank, overlaid in Settings/TvSettings [DO NOT TRANSLATE] -->
<string name="oem_preferred_feedback_reporter" translatable="false" />
+ <!-- Development settings -->
+ <skip/>
+ <!-- Development Settings. the title for the item to take the user to Development settings. Development settings are settings meant for application developers. -->
+ <string name="development_settings_title">Developer options</string>
+ <!-- Development settings enable title. -->
+ <string name="development_settings_enable">Enable developer options</string>
+ <!-- Development Settings summary. The summary of the item to take the user to Development settings. Development settings are settings meant for application developers. -->
+ <string name="development_settings_summary">Set options for app development</string>
+ <!-- Setting checkbox title for Whether to enable USB debugging support on the phone. -->
+ <!-- Error message for users that aren't allowed to modify developer options [CHAR LIMIT=none] -->
+ <string name="development_settings_not_available">Developer options are not available for this user</string>
+ <!-- Error message for users that aren't allowed to modify VPN settings [CHAR LIMIT=none] -->
+ <string name="vpn_settings_not_available">VPN settings are not available for this user</string>
+ <!-- Error message for users that aren't allowed to modify Tethering settings [CHAR LIMIT=none] -->
+ <string name="tethering_settings_not_available">Tethering settings are not available for this user</string>
+ <!-- Error message for users that aren't allowed to modify Access Point Names settings [CHAR LIMIT=none] -->
+ <string name="apn_settings_not_available">Access Point Name settings are not available for this user</string>
+ <string name="enable_adb">USB debugging</string>
+ <!-- Setting checkbox summary for Whether to enable USB debugging support on the phone -->
+ <string name="enable_adb_summary">Debug mode when USB is connected</string>
+ <!-- Setting title to revoke secure USB debugging authorizations -->
+ <string name="clear_adb_keys">Revoke USB debugging authorizations</string>
+ <!-- [CHAR LIMIT=NONE] Setting checkbox title for Whether to include bug report item in power menu. -->
+ <string name="bugreport_in_power">Bug report shortcut</string>
+ <!-- [CHAR LIMIT=NONE] Setting checkbox summary for Whether to include bug report item in power -->
+ <string name="bugreport_in_power_summary">Show a button in the power menu for taking a bug report</string>
+ <!-- Setting Checkbox title whether to keep the screen on when plugged in to a power source -->
+ <string name="keep_screen_on">Stay awake</string>
+ <!-- setting Checkbox summary whether to keep the screen on when plugged in -->
+ <string name="keep_screen_on_summary">Screen will never sleep while charging</string>
+ <!-- Setting Checkbox title whether to enable bluetooth HCI snoop log -->
+ <string name="bt_hci_snoop_log">Enable Bluetooth HCI snoop log</string>
+ <!-- setting Checkbox summary whether to capture all bluetooth HCI packets in a file -->
+ <string name="bt_hci_snoop_log_summary">Capture all bluetooth HCI packets in a file</string>
+ <!-- setting Checkbox title whether to enable OEM unlock [CHAR_LIMIT=35] -->
+ <string name="oem_unlock_enable">OEM unlocking</string>
+ <!-- setting Checkbox summary whether to enable OEM unlock [CHAR_LIMIT=50] -->
+ <string name="oem_unlock_enable_summary">Allow the bootloader to be unlocked</string>
+ <!-- Confirmation dialog title to ensure user wishes to enable OEM unlock and disable theft protection features -->
+ <string name="confirm_enable_oem_unlock_title">Allow OEM unlocking?</string>
+ <!-- Warning dialog message to confirm user wishes to enable OEM unlock and disable theft protection features -->
+ <string name="confirm_enable_oem_unlock_text">WARNING: Device protection features will not work on this device while this setting is turned on.</string>
+
+ <!-- UI debug setting: select current app to mock location [CHAR LIMIT=50] -->
+ <string name="mock_location_app">Select mock location app</string>
+ <!-- UI debug setting: no mock location app has been set [CHAR LIMIT=50] -->
+ <string name="mock_location_app_not_set">No mock location app set</string>
+ <!-- UI debug setting: mock location app has been set [CHAR LIMIT=50] -->
+ <string name="mock_location_app_set">Mock location app: <xliff:g id="app_name">%1$s</xliff:g></string>
+
+ <!-- Preference category for networking debugging development settings. [CHAR LIMIT=50] -->
+ <string name="debug_networking_category">Networking</string>
+
+ <!-- Setting Checkbox title whether to show options for wireless display certification -->
+ <string name="wifi_display_certification">Wireless display certification</string>
+ <!-- Setting Checkbox title whether to enable WiFi Verbose Logging. [CHAR LIMIT=40] -->
+ <string name="wifi_verbose_logging">Enable Wi\u2011Fi Verbose Logging</string>
+ <!-- Setting Checkbox title whether to enable WiFi Aggressive Handover. [CHAR LIMIT=40] -->
+ <string name="wifi_aggressive_handover">Aggressive Wi\u2011Fi to Cellular handover</string>
+ <!-- Setting Checkbox title whether to enable WiFi Scanning in the presence of traffic. [CHAR LIMIT=80] -->
+ <string name="wifi_allow_scan_with_traffic">Always allow Wi\u2011Fi Roam Scans</string>
+ <!-- Setting Checkbox title whether to enable WiFi Scanning in the presence of traffic. [CHAR LIMIT=80] -->
+ <string name="legacy_dhcp_client">Use legacy DHCP client</string>
+ <!-- Setting Checkbox title whether to always keep cellular data active. [CHAR LIMIT=80] -->
+ <string name="mobile_data_always_on">Cellular data always active</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] -->
+ <string name="wifi_verbose_logging_summary">Increase Wi\u2011Fi logging level, show per SSID RSSI in Wi\u2011Fi Picker</string>
+ <!-- Setting Checkbox summary whether to enable Wifi aggressive handover [CHAR LIMIT=130] -->
+ <string name="wifi_aggressive_handover_summary">When enabled, Wi\u2011Fi will be more aggressive in handing over the data connection to Cellular, when Wi\u2011Fi signal is low</string>
+ <!-- Setting Checkbox summary whether to always allow WiFi Roam Scans [CHAR LIMIT=130] -->
+ <string name="wifi_allow_scan_with_traffic_summary">Allow/Disallow Wi\u2011Fi Roam Scans based on the amount of data traffic present at the interface</string>
+ <!-- UI debug setting: limit size of Android logger buffers -->
+ <string name="select_logd_size_title">Logger buffer sizes</string>
+ <!-- UI debug setting: limit size of Android logger buffers [CHAR LIMIT=59] -->
+ <string name="select_logd_size_dialog_title">Select Logger sizes per log buffer</string>
+ <!-- UI debug setting: select USB configuration -->
+ <string name="select_usb_configuration_title">Select USB Configuration</string>
+ <!-- UI debug setting: limit size of Android logger buffers [CHAR LIMIT=59] -->
+ <string name="select_usb_configuration_dialog_title">Select USB Configuration</string>
+ <!-- Setting Checkbox title whether to allow mock locations -->
+ <string name="allow_mock_location">Allow mock locations</string>
+ <!-- setting Checkbox summary whether to allow mock locations -->
+ <string name="allow_mock_location_summary">Allow mock locations</string>
+ <!-- Setting Checkbox title whether to enable view attribute inspection -->
+ <string name="debug_view_attributes">Enable view attribute inspection</string>
+ <!-- Setting Checkbox summary whether to use DHCP client from Lollipop (Android 5.0) [CHAR LIMIT=130] -->
+ <string name="legacy_dhcp_client_summary">Use the DHCP client from Lollipop instead of the new Android DHCP client.</string>
+ <string name="mobile_data_always_on_summary">Always keep mobile data active, even when Wi\u2011Fi is active (for fast network switching).</string>
+ <!-- Title of warning dialog about the implications of enabling USB debugging -->
+ <string name="adb_warning_title">Allow USB debugging?</string>
+ <!-- Warning text to user about the implications of enabling USB debugging -->
+ <string name="adb_warning_message">USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.</string>
+ <!-- Message of dialog confirming that user wants to revoke access to adb from all computers they have authorized -->
+ <string name="adb_keys_warning_message">Revoke access to USB debugging from all computers you\u2019ve previously authorized?</string>
+ <!-- Title of warning dialog about the implications of enabling developer settings -->
+ <string name="dev_settings_warning_title">Allow development settings?</string>
+ <!-- Warning text to user about the implications of enabling USB debugging -->
+ <string name="dev_settings_warning_message">These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave.</string>
+ <!-- Title of checkbox setting to perform package verification on apps installed over USB/ADT/ADB [CHAR LIMIT=32] -->
+ <string name="verify_apps_over_usb_title">Verify apps over USB</string>
+ <!-- Summary of checkbox setting to perform package verification on apps installed over USB/ADT/ADB [CHAR LIMIT=NONE] -->
+ <string name="verify_apps_over_usb_summary">Check apps installed via ADB/ADT for harmful behavior.</string>
+
+ <!-- Title of checkbox setting that enables the terminal app. [CHAR LIMIT=32] -->
+ <string name="enable_terminal_title">Local terminal</string>
+ <!-- Summary of checkbox setting that enables the terminal app. [CHAR LIMIT=64] -->
+ <string name="enable_terminal_summary">Enable terminal app that offers local shell access</string>
+
+ <!-- HDCP checking title, used for debug purposes only. [CHAR LIMIT=25] -->
+ <string name="hdcp_checking_title">HDCP checking</string>
+ <!-- HDCP checking dialog title, used for debug purposes only. [CHAR LIMIT=25] -->
+ <string name="hdcp_checking_dialog_title">Set HDCP checking behavior</string>
+
+ <!-- Preference category for app debugging development settings. [CHAR LIMIT=50] -->
+ <string name="debug_debugging_category">Debugging</string>
+
+ <!-- UI debug setting: select current app to debug [CHAR LIMIT=50] -->
+ <string name="debug_app">Select debug app</string>
+ <!-- UI debug setting: no debug app has been set [CHAR LIMIT=50] -->
+ <string name="debug_app_not_set">No debug application set</string>
+ <!-- UI debug setting: debug app has been set [CHAR LIMIT=50] -->
+ <string name="debug_app_set">Debugging application: <xliff:g id="app_name">%1$s</xliff:g></string>
+
+ <!-- UI debug setting: title for app picker dialog [CHAR LIMIT=50] -->
+ <string name="select_application">Select application</string>
+ <!-- UI debug setting: label for app picker to select no applicatiojn [CHAR LIMIT=50] -->
+ <string name="no_application">Nothing</string>
+
+ <!-- UI debug setting: wait for debugger to attach to debugging process? [CHAR LIMIT=50] -->
+ <string name="wait_for_debugger">Wait for debugger</string>
+ <!-- UI debug setting: wait for debugger to attach to debugging process summary [CHAR LIMIT=500] -->
+ <string name="wait_for_debugger_summary">Debugged application waits for debugger to
+ attach before executing</string>
+
+ <!-- Preference category for input debugging development settings. [CHAR LIMIT=25] -->
+ <string name="debug_input_category">Input</string>
+
+ <!-- Preference category for drawing debugging development settings. [CHAR LIMIT=25] -->
+ <string name="debug_drawing_category">Drawing</string>
+
+ <!-- Preference category for hardware accelerated drawing debugging development settings. [CHAR LIMIT=50] -->
+ <string name="debug_hw_drawing_category">Hardware accelerated rendering</string>
+
+ <!-- Preference category for media development settings. [CHAR LIMIT=50] -->
+ <string name="media_category">Media</string>
+
+ <!-- Preference category for monitoring debugging development settings. [CHAR LIMIT=25] -->
+ <string name="debug_monitoring_category">Monitoring</string>
+
+ <!-- UI debug setting: always enable strict mode? [CHAR LIMIT=25] -->
+ <string name="strict_mode">Strict mode enabled</string>
+ <!-- UI debug setting: show strict mode summary [CHAR LIMIT=50] -->
+ <string name="strict_mode_summary">Flash screen when apps do long operations
+ on main thread</string>
+
+ <!-- UI debug setting: show pointer location? [CHAR LIMIT=25] -->
+ <string name="pointer_location">Pointer location</string>
+ <!-- UI debug setting: show pointer location summary [CHAR LIMIT=50] -->
+ <string name="pointer_location_summary">Screen overlay showing current touch data</string>
+
+ <!-- UI debug setting: show touches? [CHAR LIMIT=25] -->
+ <string name="show_touches">Show touches</string>
+ <!-- UI debug setting: show touches location summary [CHAR LIMIT=50] -->
+ <string name="show_touches_summary">Show visual feedback for touches</string>
+
+ <!-- UI debug setting: show where surface updates happen? [CHAR LIMIT=25] -->
+ <string name="show_screen_updates">Show surface updates</string>
+ <!-- UI debug setting: show surface updates summary [CHAR LIMIT=50] -->
+ <string name="show_screen_updates_summary">Flash entire window surfaces when they update</string>
+
+ <!-- UI debug setting: show where window updates happen with GPU rendering? [CHAR LIMIT=25] -->
+ <string name="show_hw_screen_updates">Show GPU view updates</string>
+ <!-- UI debug setting: show GPU rendering screen updates summary [CHAR LIMIT=50] -->
+ <string name="show_hw_screen_updates_summary">Flash views inside windows when drawn with the GPU</string>
+
+ <!-- UI debug setting: show when hardware layers get updated [CHAR LIMIT=25] -->
+ <string name="show_hw_layers_updates">Show hardware layers updates</string>
+ <!-- UI debug setting: show hardware layers updates summary [CHAR LIMIT=50] -->
+ <string name="show_hw_layers_updates_summary">Flash hardware layers green when they update</string>
+
+ <!-- UI debug setting: show the amount of overdraw in apps using the GPU [CHAR LIMIT=25] -->
+ <string name="debug_hw_overdraw">Debug GPU overdraw</string>
+
+ <!-- UI debug setting: disable use of overlays? [CHAR LIMIT=25] -->
+ <string name="disable_overlays">Disable HW overlays</string>
+ <!-- UI debug setting: disable use of overlays summary [CHAR LIMIT=50] -->
+ <string name="disable_overlays_summary">Always use GPU for screen compositing</string>
+
+ <!-- UI debug setting: simulate color space anomalies. [CHAR LIMIT=25] -->
+ <string name="simulate_color_space">Simulate color space</string>
+
+ <!-- UI debug setting: enable various types of OpenGL traces [CHAR LIMIT=25] -->
+ <string name="enable_opengl_traces_title">Enable OpenGL traces</string>
+
+ <!-- UI debug setting: disable USB audio routing title [CHAR LIMIT=32] -->
+ <string name="usb_audio_disable_routing">Disable USB audio routing</string>
+ <!-- UI debug setting: disable USB audio routing summary [CHAR LIMIT=50] -->
+ <string name="usb_audio_disable_routing_summary">Disable automatic routing to USB audio peripherals</string>
+
+ <!-- UI debug setting: show layout bounds information [CHAR LIMIT=25] -->
+ <string name="debug_layout">Show layout bounds</string>
+ <!-- UI debug setting: show layout bounds information summary [CHAR LIMIT=50] -->
+ <string name="debug_layout_summary">Show clip bounds, margins, etc.</string>
+
+ <!-- UI debug setting: force right to left layout [CHAR LIMIT=37] -->
+ <string name="force_rtl_layout_all_locales">Force RTL layout direction</string>
+ <!-- UI debug setting: force right to left layout summary [CHAR LIMIT=100] -->
+ <string name="force_rtl_layout_all_locales_summary">Force screen layout direction to RTL for all locales</string>
+
+ <!-- UI debug setting: show how CPU is being used? [CHAR LIMIT=25] -->
+ <string name="show_cpu_usage">Show CPU usage</string>
+ <!-- UI debug setting: show cpu usage summary [CHAR LIMIT=50] -->
+ <string name="show_cpu_usage_summary">Screen overlay showing current CPU usage</string>
+
+ <!-- UI debug setting: force hardware acceleration to render apps [CHAR LIMIT=25] -->
+ <string name="force_hw_ui">Force GPU rendering</string>
+ <!-- UI debug setting: force hardware acceleration summary [CHAR LIMIT=50] -->
+ <string name="force_hw_ui_summary">Force use of GPU for 2d drawing</string>
+
+ <!-- UI debug setting: force anti-aliasing to render apps [CHAR LIMIT=25] -->
+ <string name="force_msaa">Force 4x MSAA</string>
+ <!-- UI debug setting: force anti-aliasing summary [CHAR LIMIT=50] -->
+ <string name="force_msaa_summary">Enable 4x MSAA in OpenGL ES 2.0 apps</string>
+
+ <!-- UI debug setting: show when non-rectangular clip operations are used [CHAR LIMIT=100] -->
+ <string name="show_non_rect_clip">Debug non-rectangular clip operations</string>
+
+ <!-- UI debug setting: profile time taken by hardware acceleration to render apps [CHAR LIMIT=25] -->
+ <string name="track_frame_time">Profile GPU rendering</string>
+
+ <!-- UI debug setting: scaling factor for window animations [CHAR LIMIT=25] -->
+ <string name="window_animation_scale_title">Window animation scale</string>
+
+ <!-- UI debug setting: scaling factor for transition animations [CHAR LIMIT=25] -->
+ <string name="transition_animation_scale_title">Transition animation scale</string>
+
+ <!-- UI debug setting: scaling factor for all Animator-based animations [CHAR LIMIT=25] -->
+ <string name="animator_duration_scale_title">Animator duration scale</string>
+
+ <!-- UI debug setting: simulate secondary display devices using overlays [CHAR LIMIT=25] -->
+ <string name="overlay_display_devices_title">Simulate secondary displays</string>
+
+ <!-- Preference category for application debugging development settings. [CHAR LIMIT=25] -->
+ <string name="debug_applications_category">Apps</string>
+
+ <!-- UI debug setting: immediately destroy activities? [CHAR LIMIT=25] -->
+ <string name="immediately_destroy_activities">Don\u2019t keep activities</string>
+ <!-- UI debug setting: immediately destroy activities summary [CHAR LIMIT=50] -->
+ <string name="immediately_destroy_activities_summary">Destroy every activity as soon as
+ the user leaves it</string>
+
+ <!-- UI debug setting: limit number of running background processes [CHAR LIMIT=25] -->
+ <string name="app_process_limit_title">Background process limit</string>
+
+ <!-- UI debug setting: show all ANRs? [CHAR LIMIT=25] -->
+ <string name="show_all_anrs">Show all ANRs</string>
+ <!-- UI debug setting: show all ANRs summary [CHAR LIMIT=50] -->
+ <string name="show_all_anrs_summary">Show App Not Responding dialog
+ for background apps</string>
+
+ <!-- UI debug setting: force allow apps on external storage [CHAR LIMIT=50] -->
+ <string name="force_allow_on_external">Force allow apps on external</string>
+ <!-- UI debug setting: force allow on external summary [CHAR LIMIT=150] -->
+ <string name="force_allow_on_external_summary">Makes any app elligible to be written to external storage, regardless of manifest values</string>
+
+ <!-- UI debug setting: force all activites to be resizable for multiwindow [CHAR LIMIT=50] -->
+ <string name="force_resizable_activities">Force activities to be resizable</string>
+ <!-- UI debug setting: force allow on external summary [CHAR LIMIT=150] -->
+ <string name="force_resizable_activities_summary">Makes all activities resizable for multi-window, regardless of manifest values.</string>
+
+ <!-- Local (desktop) backup password menu title [CHAR LIMIT=25] -->
+ <string name="local_backup_password_title">Desktop backup password</string>
+ <!-- Summary text of the "local backup password" setting when the user has not supplied a password -->
+ <string name="local_backup_password_summary_none">Desktop full backups aren\u2019t currently protected</string>
+ <!-- Summary text of the "local backup password" setting when the user has already supplied a password -->
+ <string name="local_backup_password_summary_change">Touch to change or remove the password for desktop full backups</string>
+
+ <!-- Toast message shown when the user successfully sets a new local backup password [CHAR LIMIT=80] -->
+ <string name="local_backup_password_toast_success">New backup password set</string>
+ <!-- Toast message shown when setting a new local backup password fails due to the user not correctly typing the password again for confirmation [CHAR LIMIT=80] -->
+ <string name="local_backup_password_toast_confirmation_mismatch">New password and confirmation don\u2019t match</string>
+ <!-- Toast message shown when setting a new local backup password fails due to the user not supplying the correct existing password. The phrasing here is deliberately quite general. [CHAR LIMIT=80] -->
+ <string name="local_backup_password_toast_validation_failure">Failure setting backup password</string>
+
+ <!-- Name of each color mode for the display. [CHAR LIMIT=40] -->
+ <string-array name="color_mode_names">
+ <item>Vibrant (default)</item>
+ <item>Natural</item>
+ <item>Standard</item>
+ </string-array>
+
+ <!-- Description of each color mode for the display. [CHAR LIMIT=NONE] -->
+ <string-array name="color_mode_descriptions">
+ <item>Enhanced colors</item>
+ <item>Natural colors as seen by the eye</item>
+ <item>Colors optimized for digital content</item>
+ </string-array>
+
+ <!-- Settings item title for inactive apps [CHAR LIMIT=35] -->
+ <string name="inactive_apps_title">Inactive apps</string>
+ <!-- Settings item summary for inactive app [CHAR LIMIT=100] -->
+ <string name="inactive_app_inactive_summary">Inactive. Touch to toggle.</string>
+ <!-- Settings item summary for active app [CHAR LIMIT=100] -->
+ <string name="inactive_app_active_summary">Active. Touch to toggle.</string>
+
+ <!-- Services settings screen, setting option name for the user to go to the screen to view running services -->
+ <string name="runningservices_settings_title">Running services</string>
+ <!-- Services settings screen, setting option summary for the user to go to the screen to view running services -->
+ <string name="runningservices_settings_summary">View and control currently running services</string>
+
+ <!-- Sound & display settings screen, setting option name to change the user interface theme [CHAR LIMIT=30] -->
+ <string name="night_mode_title">Night mode</string>
+ <!-- Sound & display settings screen, setting option summary to change the user interface theme [CHAR LIMIT=100] -->
+ <string name="night_mode_summary">%s</string>
+ <!-- Sound & display settings screen, theme setting value to prefer a light-colored user interface [CHAR LIMIT=30] -->
+ <string name="night_mode_no">Disabled</string>
+ <!-- Sound & display settings screen, theme setting value to prefer a dark-colored user interface [CHAR LIMIT=30] -->
+ <string name="night_mode_yes">Always on</string>
+ <!-- Sound & display settings screen, theme setting value to automatically switch between a light- or dark-colored user interface [CHAR LIMIT=30] -->
+ <string name="night_mode_auto">Automatic</string>
+
+ <!-- Developer settings screen, convert userdata to file encryption option name -->
+ <string name="convert_to_file_encryption">Convert to file encryption</string>
+ <!-- Developer settings screen, convert userdata to file encryption summary when option is available -->
+ <string name="convert_to_file_encryption_enabled">Convert\u2026</string>
+ <!-- Developer settings screen, convert userdata to file encryption summary when option is already done -->
+ <string name="convert_to_file_encryption_done">Already file encrypted</string>
+ <!-- Title used on dialog with final prompt for converting to file encryption -->
+ <string name="title_convert_fbe">Converting to file based encryption</string>
+ <!-- Warning displayed on dialog with final prompt for converting to file encryption -->
+ <string name="convert_to_fbe_warning">
+ Convert data partition to file based encryption.\n
+ !!Warning!! This will erase all your data.\n
+ This feature is alpha, and may not work correctly.\n
+ Press \'Wipe and convert\u2026\' to continue.</string>
+ <!-- Button on dialog that triggers convertion to file encryption -->
+ <string name="button_convert_fbe">Wipe and convert\u2026</string>
+
+ <!-- Name of feature to change color setting for the display [CHAR LIMIT=60] -->
+ <string name="picture_color_mode">Picture color mode</string>
+
+ <!-- Description of feature to change color setting for the display [CHAR LIMIT=NONE] -->
+ <string name="picture_color_mode_desc">Use sRGB</string>
+
+ <!-- Label for disabling color space adjustment [CHAR LIMIT=45] -->
+ <string name="daltonizer_mode_disabled">Disabled</string>
+ <!-- Label for converting display colors to grayscale, which simulates monochromacy (complete color blindness). [CHAR LIMIT=45] -->
+ <string name="daltonizer_mode_monochromacy">Monochromacy</string>
+ <!-- Label for deuteranomaly (red-green color blindness) [CHAR LIMIT=45] -->
+ <string name="daltonizer_mode_deuteranomaly">Deuteranomaly (red-green)</string>
+ <!-- Label for protanomaly (red-green color blindness) [CHAR LIMIT=45] -->
+ <string name="daltonizer_mode_protanomaly">Protanomaly (red-green)</string>
+ <!-- Label for tritanomaly (blue-yellow color blindness) [CHAR LIMIT=45] -->
+ <string name="daltonizer_mode_tritanomaly">Tritanomaly (blue-yellow)</string>
+
+ <!-- Title for the accessibility preference to configure display color space correction. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_display_daltonizer_preference_title">Color correction</string>
+ <!-- Subtitle for the accessibility preference to configure display color space correction. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_display_daltonizer_preference_subtitle">This feature is experimental and may affect performance.</string>
+ <!-- Summary shown for color space correction preference when its value is overridden by another preference [CHAR LIMIT=35] -->
+ <string name="daltonizer_type_overridden">Overridden by <xliff:g id="title" example="Simulate color space">%1$s</xliff:g></string>
+
</resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
index c9a5f8f..e6fe447 100644
--- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
+++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java
@@ -116,7 +116,7 @@
final HandlerThread mThread;
final BackgroundHandler mBackgroundHandler;
- final MainHandler mMainHandler = new MainHandler();
+ final MainHandler mMainHandler = new MainHandler(Looper.getMainLooper());
private ApplicationsState(Application app) {
mContext = app;
@@ -687,6 +687,10 @@
static final int MSG_LAUNCHER_INFO_CHANGED = 7;
static final int MSG_LOAD_ENTRIES_COMPLETE = 8;
+ public MainHandler(Looper looper) {
+ super(looper);
+ }
+
@Override
public void handleMessage(Message msg) {
rebuildActiveSessions();
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java
index 6fef134..347e9f7 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/DashboardTile.java
@@ -74,6 +74,11 @@
*/
public int priority;
+ /**
+ * The metaData from the activity that defines this tile.
+ */
+ public Bundle metaData;
+
public DashboardTile() {
// Empty
}
@@ -107,6 +112,7 @@
dest.writeBundle(extras);
dest.writeString(category);
dest.writeInt(priority);
+ dest.writeBundle(metaData);
}
public void readFromParcel(Parcel in) {
@@ -125,6 +131,7 @@
extras = in.readBundle();
category = in.readString();
priority = in.readInt();
+ metaData = in.readBundle();
}
DashboardTile(Parcel in) {
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index 00dadb8..102e47a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -18,9 +18,15 @@
import android.annotation.LayoutRes;
import android.annotation.Nullable;
import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.res.TypedArray;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
+import android.util.Log;
import android.util.Pair;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -33,21 +39,30 @@
import android.widget.Toolbar;
import com.android.settingslib.R;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SettingsDrawerActivity extends Activity {
+ protected static final boolean DEBUG_TIMING = false;
+ private static final String TAG = "SettingsDrawerActivity";
+
+ private static List<DashboardCategory> sDashboardCategories;
+ private static HashMap<Pair<String, String>, DashboardTile> sTileCache;
+
+ private final PackageReceiver mPackageReceiver = new PackageReceiver();
+ private final List<CategoryListener> mCategoryListeners = new ArrayList<>();
+
private SettingsDrawerAdapter mDrawerAdapter;
- // Hold on to a cache of tiles to avoid loading the info multiple times.
- private final HashMap<Pair<String, String>, DashboardTile> mTileCache = new HashMap<>();
- private List<DashboardCategory> mDashboardCategories;
private DrawerLayout mDrawerLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ long startTime = System.currentTimeMillis();
+
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.setContentView(R.layout.settings_with_drawer);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
@@ -62,6 +77,7 @@
mDrawerLayout = null;
return;
}
+ getDashboardCategories();
setActionBar(toolbar);
mDrawerAdapter = new SettingsDrawerAdapter(this);
ListView listView = (ListView) findViewById(R.id.left_drawer);
@@ -72,6 +88,8 @@
onTileClicked(mDrawerAdapter.getTile(position));
};
});
+ if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ + " ms");
}
@Override
@@ -88,7 +106,33 @@
protected void onResume() {
super.onResume();
- updateDrawer();
+ if (mDrawerLayout != null) {
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+ filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+ filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+ filter.addDataScheme("package");
+ registerReceiver(mPackageReceiver, filter);
+
+ new CategoriesUpdater().execute();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ if (mDrawerLayout != null) {
+ unregisterReceiver(mPackageReceiver);
+ }
+
+ super.onPause();
+ }
+
+ public void addCategoryListener(CategoryListener listener) {
+ mCategoryListeners.add(listener);
+ }
+
+ public void remCategoryListener(CategoryListener listener) {
+ mCategoryListeners.remove(listener);
}
public void openDrawer() {
@@ -134,11 +178,20 @@
}
}
- public List<DashboardCategory> getDashboardCategories(boolean force) {
- if (force) {
- mDashboardCategories = TileUtils.getCategories(this, mTileCache);
+ public List<DashboardCategory> getDashboardCategories() {
+ if (sDashboardCategories == null) {
+ sTileCache = new HashMap<>();
+ sDashboardCategories = TileUtils.getCategories(this, sTileCache);
}
- return mDashboardCategories;
+ return sDashboardCategories;
+ }
+
+ protected void onCategoriesChanged() {
+ updateDrawer();
+ final int N = mCategoryListeners.size();
+ for (int i = 0; i < N; i++) {
+ mCategoryListeners.get(i).onCategoriesChanged();
+ }
}
public boolean openTile(DashboardTile tile) {
@@ -167,4 +220,28 @@
public void onProfileTileOpen() {
finish();
}
+
+ public interface CategoryListener {
+ void onCategoriesChanged();
+ }
+
+ private class CategoriesUpdater extends AsyncTask<Void, Void, List<DashboardCategory>> {
+ @Override
+ protected List<DashboardCategory> doInBackground(Void... params) {
+ return TileUtils.getCategories(SettingsDrawerActivity.this, sTileCache);
+ }
+
+ @Override
+ protected void onPostExecute(List<DashboardCategory> dashboardCategories) {
+ sDashboardCategories = dashboardCategories;
+ onCategoriesChanged();
+ }
+ }
+
+ private class PackageReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ new CategoriesUpdater().execute();
+ }
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java
index fef716c..24c6ae8 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerAdapter.java
@@ -38,7 +38,7 @@
}
void updateCategories() {
- List<DashboardCategory> categories = mActivity.getDashboardCategories(true);
+ List<DashboardCategory> categories = mActivity.getDashboardCategories();
mItems.clear();
for (int i = 0; i < categories.size(); i++) {
Item category = new Item();
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
index 18e8d31..6b36680 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/TileUtils.java
@@ -14,6 +14,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
@@ -35,6 +36,7 @@
public class TileUtils {
private static final boolean DEBUG = false;
+ private static final boolean DEBUG_TIMING = true;
private static final String LOG_TAG = "TileUtils";
@@ -105,12 +107,9 @@
private static final String SETTING_PKG = "com.android.settings";
- public static List<DashboardCategory> getCategories(Context context) {
- return getCategories(context, new HashMap<Pair<String, String>, DashboardTile>());
- }
-
public static List<DashboardCategory> getCategories(Context context,
HashMap<Pair<String, String>, DashboardTile> cache) {
+ final long startTime = System.currentTimeMillis();
ArrayList<DashboardTile> tiles = new ArrayList<>();
UserManager userManager = UserManager.get(context);
for (UserHandle user : userManager.getUserProfiles()) {
@@ -143,6 +142,8 @@
Collections.sort(category.tiles, TILE_COMPARATOR);
}
Collections.sort(categories, CATEGORY_COMPARATOR);
+ if (DEBUG_TIMING) Log.d(LOG_TAG, "getCategories took "
+ + (System.currentTimeMillis() - startTime) + " ms");
return categories;
}
@@ -207,7 +208,9 @@
activityInfo.packageName, activityInfo.name);
tile.category = categoryKey;
tile.priority = requireSettings ? resolved.priority : 0;
- updateTileData(context, tile);
+ tile.metaData = activityInfo.metaData;
+ updateTileData(context, tile, activityInfo, activityInfo.applicationInfo,
+ pm);
if (DEBUG) Log.d(LOG_TAG, "Adding tile " + tile.title);
addedCache.put(key, tile);
@@ -231,64 +234,52 @@
return null;
}
- private static boolean updateTileData(Context context, DashboardTile tile) {
- Intent intent = tile.intent;
- if (intent != null) {
- // Find the activity that is in the system image
- PackageManager pm = context.getPackageManager();
- List<ResolveInfo> list = tile.userHandle.size() != 0
- ? pm.queryIntentActivitiesAsUser(intent, PackageManager.GET_META_DATA,
- tile.userHandle.get(0).getIdentifier())
- : pm.queryIntentActivities(intent, PackageManager.GET_META_DATA);
- int listSize = list.size();
- for (int i = 0; i < listSize; i++) {
- ResolveInfo resolveInfo = list.get(i);
- if (resolveInfo.activityInfo.applicationInfo.isSystemApp()) {
- int icon = 0;
- CharSequence title = null;
- String summary = null;
+ private static boolean updateTileData(Context context, DashboardTile tile,
+ ActivityInfo activityInfo, ApplicationInfo applicationInfo, PackageManager pm) {
+ if (applicationInfo.isSystemApp()) {
+ int icon = 0;
+ CharSequence title = null;
+ String summary = null;
- // Get the activity's meta-data
- try {
- Resources res = pm.getResourcesForApplication(
- resolveInfo.activityInfo.packageName);
- Bundle metaData = resolveInfo.activityInfo.metaData;
+ // Get the activity's meta-data
+ try {
+ Resources res = pm.getResourcesForApplication(
+ applicationInfo.packageName);
+ Bundle metaData = activityInfo.metaData;
- if (res != null && metaData != null) {
- if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
- icon = metaData.getInt(META_DATA_PREFERENCE_ICON);
- }
- if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
- title = metaData.getString(META_DATA_PREFERENCE_TITLE);
- }
- if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
- summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY);
- }
- }
- } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
- if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e);
+ if (res != null && metaData != null) {
+ if (metaData.containsKey(META_DATA_PREFERENCE_ICON)) {
+ icon = metaData.getInt(META_DATA_PREFERENCE_ICON);
}
-
- // Set the preference title to the activity's label if no
- // meta-data is found
- if (TextUtils.isEmpty(title)) {
- title = resolveInfo.loadLabel(pm).toString();
+ if (metaData.containsKey(META_DATA_PREFERENCE_TITLE)) {
+ title = metaData.getString(META_DATA_PREFERENCE_TITLE);
}
- if (icon == 0) {
- icon = resolveInfo.activityInfo.icon;
+ if (metaData.containsKey(META_DATA_PREFERENCE_SUMMARY)) {
+ summary = metaData.getString(META_DATA_PREFERENCE_SUMMARY);
}
-
- // Set icon, title and summary for the preference
- tile.icon = Icon.createWithResource(resolveInfo.activityInfo.packageName, icon);
- tile.title = title;
- tile.summary = summary;
- // Replace the intent with this specific activity
- tile.intent = new Intent().setClassName(resolveInfo.activityInfo.packageName,
- resolveInfo.activityInfo.name);
-
- return true;
}
+ } catch (PackageManager.NameNotFoundException | Resources.NotFoundException e) {
+ if (DEBUG) Log.d(LOG_TAG, "Couldn't find info", e);
}
+
+ // Set the preference title to the activity's label if no
+ // meta-data is found
+ if (TextUtils.isEmpty(title)) {
+ title = activityInfo.loadLabel(pm).toString();
+ }
+ if (icon == 0) {
+ icon = activityInfo.icon;
+ }
+
+ // Set icon, title and summary for the preference
+ tile.icon = Icon.createWithResource(activityInfo.packageName, icon);
+ tile.title = title;
+ tile.summary = summary;
+ // Replace the intent with this specific activity
+ tile.intent = new Intent().setClassName(activityInfo.packageName,
+ activityInfo.name);
+
+ return true;
}
return false;
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index c324abd..6680d88 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -209,4 +209,7 @@
<!-- Default for Settings.Secure.NFC_PAYMENT_COMPONENT -->
<string name="def_nfc_payment_component"></string>
+
+ <!-- Default setting for ability to add users from the lock screen -->
+ <bool name="def_add_users_from_lockscreen">false</bool>
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index fbf8a2b..7365e66 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -61,6 +61,7 @@
import com.android.internal.annotations.GuardedBy;
import com.android.internal.content.PackageMonitor;
import com.android.internal.os.BackgroundThread;
+import com.android.providers.settings.SettingsState.Setting;
import java.io.File;
import java.io.FileDescriptor;
@@ -72,8 +73,6 @@
import java.util.Set;
import java.util.regex.Pattern;
-import com.android.providers.settings.SettingsState.Setting;
-
/**
* <p>
* This class is a content provider that publishes the system settings.
@@ -1891,7 +1890,7 @@
}
private final class UpgradeController {
- private static final int SETTINGS_VERSION = 122;
+ private static final int SETTINGS_VERSION = 123;
private final int mUserId;
@@ -2043,6 +2042,24 @@
}
currentVersion = 122;
}
+
+ if (currentVersion == 122) {
+ // Version 123: Adding a default value for the ability to add a user from
+ // the lock screen.
+ if (userId == UserHandle.USER_SYSTEM) {
+ final SettingsState globalSettings = getGlobalSettingsLocked();
+ Setting currentSetting = globalSettings.getSettingLocked(
+ Settings.Global.ADD_USERS_WHEN_LOCKED);
+ if (currentSetting == null) {
+ globalSettings.insertSettingLocked(
+ Settings.Global.ADD_USERS_WHEN_LOCKED,
+ getContext().getResources().getBoolean(
+ R.bool.def_add_users_from_lockscreen) ? "1" : "0",
+ SettingsState.SYSTEM_PACKAGE_NAME);
+ }
+ }
+ currentVersion = 123;
+ }
// vXXX: Add new settings above this point.
// Return the current version.
diff --git a/packages/Shell/res/values-af/strings.xml b/packages/Shell/res/values-af/strings.xml
index 8430bf0..8c4de4e 100644
--- a/packages/Shell/res/values-af/strings.xml
+++ b/packages/Shell/res/values-af/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Tuisskerm"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Besig met foutverslag"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Foutverslag word tans gegenereer"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Foutverslag vasgevang"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swiep na links om jou foutverslag te deel"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Raak om jou foutverslag te deel"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Wys hierdie boodskap volgende keer"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Foutverslae"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Foutverslaglêer kon nie gelees word nie"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"naamloos"</string>
</resources>
diff --git a/packages/Shell/res/values-am/strings.xml b/packages/Shell/res/values-am/strings.xml
index 9400f37..415f3ec 100644
--- a/packages/Shell/res/values-am/strings.xml
+++ b/packages/Shell/res/values-am/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ቀፎ"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"የሳንካ ሪፓርት በሂደት ላይ"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"የሳንካ ሪፓርት እየመነጨ ነው"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"የሳንካ ሪፖርት ተይዟል"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"የሳንካ ሪፖርትዎን ለማጋራት ወደ ግራ ያንሸራትቱ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"የሳንካ ሪፖርትዎን ለማጋራት ይንክኩ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ይህን መልዕክት በሚቀጥለው ጊዜ አሳይ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"የሳንካ ሪፖርቶች"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"የሳንካ ሪፖርት ፋይል ሊነበብ አልተቻለም"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ያልተሰየመ"</string>
</resources>
diff --git a/packages/Shell/res/values-ar/strings.xml b/packages/Shell/res/values-ar/strings.xml
index 2161a76..79d615e 100644
--- a/packages/Shell/res/values-ar/strings.xml
+++ b/packages/Shell/res/values-ar/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"تقرير الخطأ قيد التقدم"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"جارٍ إنشاء تقرير الخطأ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"تم الحصول على تقرير الأخطاء"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"مرر بسرعة لليمين لمشاركة تقرير الخطأ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"المس لمشاركة تقرير الأخطاء"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"إظهار هذه الرسالة في المرة القادمة"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"تقارير الأخطاء"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"تعذرت قراءة ملف تقرير الخطأ."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"بدون اسم"</string>
</resources>
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az-rAZ/strings.xml
index 76ee4bf..176b009 100644
--- a/packages/Shell/res/values-az-rAZ/strings.xml
+++ b/packages/Shell/res/values-az-rAZ/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Baq hesabatı davam edir"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug hesabat yaradıldı"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Baq raport alındı"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Baq raportunu paylaşmaq üçün sola sürüşdürün"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Xətanı şikayətini paylaşmaq üçün toxunun"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bu mesajı növbəti dəfə göstər"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Baq hesabatları"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Baq hesabat faylı oxunmur"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"adsız"</string>
</resources>
diff --git a/packages/Shell/res/values-bg/strings.xml b/packages/Shell/res/values-bg/strings.xml
index bbfae69..a470998 100644
--- a/packages/Shell/res/values-bg/strings.xml
+++ b/packages/Shell/res/values-bg/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Команден ред"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Сигналът за програмна грешка се генерира"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Отчетът за програмни грешки е записан"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Прекарайте пръст наляво, за да споделите сигнала си за програмна грешка"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Докоснете, за да споделите отчета си за програмни грешки"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Това съобщение да се показва следващия път"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Отчети за прогр. грешки"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Файлът със сигнал за програмна грешка не можа да бъде прочетен"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"без име"</string>
</resources>
diff --git a/packages/Shell/res/values-bn-rBD/strings.xml b/packages/Shell/res/values-bn-rBD/strings.xml
index 5ca5835..afa3a46 100644
--- a/packages/Shell/res/values-bn-rBD/strings.xml
+++ b/packages/Shell/res/values-bn-rBD/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"শেল"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ত্রুটির প্রতিবেদন করা হচ্ছে"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ত্রুটির প্রতিবেদন তৈরি করা হচ্ছে"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ত্রুটির প্রতিবেদন নেওয়া হয়েছে"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"আপনার বাগ রিপোর্ট শেয়ার করতে বামে সোয়াইপ করুন"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"আপনার ত্রুটির প্রতিবেদন ভাগ করতে স্পর্শ করুন"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"এই বার্তাটি পরের বার দেখান"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ত্রুটির প্রতিবেদনগুলি"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ত্রুটির প্রতিবেদনের ফাইলটি পড়া যায়নি"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"নামবিহীন"</string>
</resources>
diff --git a/packages/Shell/res/values-ca/strings.xml b/packages/Shell/res/values-ca/strings.xml
index 1e6ec53..188da67 100644
--- a/packages/Shell/res/values-ca/strings.xml
+++ b/packages/Shell/res/values-ca/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Protecció"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Informe d\'errors en curs"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"S\'està generant l\'informe d\'errors"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"S\'ha registrat l\'informe d\'error"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Llisca cap a l\'esquerra per compartir l\'informe d\'errors."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca aquí per compartir el teu informe d\'error."</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostra aquest missatge la propera vegada"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Informes d\'error"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No s\'ha pogut llegir el fitxer de l\'informe d\'errors"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sense nom"</string>
</resources>
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index 336c21f..fdc8023 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Probíhá zpracování zprávy o chybě"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Vytváří se zpráva o chybě"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bylo vytvořeno chybové hlášení"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Chcete-li hlášení chyby sdílet, přejeďte doleva."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Chybové hlášení můžete sdílet klepnutím."</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobrazit tuto zprávu příště"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Zprávy o chybách"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Soubor chybové zprávy nelze načíst"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"bez názvu"</string>
</resources>
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index 6f65894..0502655 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Fejlrapporten er under udførelse"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Fejlrapport genereres"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Fejlrapporten er registreret"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Stryg til venstre for at dele din fejlrapport"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tryk for at dele din fejlrapport"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne underretning næste gang"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Fejlrapporter"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fejlrapportfilen kunne ikke læses"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ikke navngivet"</string>
</resources>
diff --git a/packages/Shell/res/values-de/strings.xml b/packages/Shell/res/values-de/strings.xml
index 03c6166..13c1c96 100644
--- a/packages/Shell/res/values-de/strings.xml
+++ b/packages/Shell/res/values-de/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Fehlerbericht in Bearbeitung"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Fehlerbericht wird generiert"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Fehlerbericht erfasst"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Wischen Sie nach links, um Ihren Fehlerbericht zu teilen."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tippen, um Fehlerbericht zu teilen"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Diese Nachricht nächstes Mal zeigen"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Fehlerberichte"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fehlerberichtdatei konnte nicht gelesen werden."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"Unbenannt"</string>
</resources>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index ceec189..aa03bec 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Κέλυφος"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Αναφορά σφάλματος σε εξέλιξη"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Δημιουργείται αναφορά σφάλματος"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Η λήψη της αναφοράς ήταν επιτυχής"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Σύρετε προς τα αριστερά για κοινή χρήση της αναφοράς σφαλμάτων"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Αγγίξτε για να μοιραστείτε τη αναφορά σφαλμάτων"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Εμφάνιση αυτού του μηνύματος την επόμενη φορά"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Αναφορές σφαλμάτων"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Δεν ήταν δυνατή η ανάγνωση του αρχείου της αναφοράς σφαλμάτων"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ανώνυμη"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rAU/strings.xml b/packages/Shell/res/values-en-rAU/strings.xml
index 99c9f4f..a9247d2 100644
--- a/packages/Shell/res/values-en-rAU/strings.xml
+++ b/packages/Shell/res/values-en-rAU/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Bug report in progress"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rGB/strings.xml b/packages/Shell/res/values-en-rGB/strings.xml
index 99c9f4f..a9247d2 100644
--- a/packages/Shell/res/values-en-rGB/strings.xml
+++ b/packages/Shell/res/values-en-rGB/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Bug report in progress"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
</resources>
diff --git a/packages/Shell/res/values-en-rIN/strings.xml b/packages/Shell/res/values-en-rIN/strings.xml
index 99c9f4f..a9247d2 100644
--- a/packages/Shell/res/values-en-rIN/strings.xml
+++ b/packages/Shell/res/values-en-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Bug report in progress"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bug report is being generated"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swipe left to share your bug report"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Touch to share your bug report"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Bug reports"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bug report file could not be read"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"unnamed"</string>
</resources>
diff --git a/packages/Shell/res/values-es-rUS/strings.xml b/packages/Shell/res/values-es-rUS/strings.xml
index 263459e..ab2dd63 100644
--- a/packages/Shell/res/values-es-rUS/strings.xml
+++ b/packages/Shell/res/values-es-rUS/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Informe de errores en progreso"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"El informe de errores se está generando"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de errores capturado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Desliza el dedo hacia la izquierda para compartir el informe de errores."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca para compartir tu informe de errores."</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar este mensaje la próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de errores"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No se pudo leer el archivo de informe de errores"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sin nombre"</string>
</resources>
diff --git a/packages/Shell/res/values-es/strings.xml b/packages/Shell/res/values-es/strings.xml
index 3b37d40..d32f012 100644
--- a/packages/Shell/res/values-es/strings.xml
+++ b/packages/Shell/res/values-es/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Informe de errores en curso"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Se está generando el informe de errores"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de error registrado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Desliza el dedo hacia la izquierda para compartir el informe de error"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca para compartir tu informe de error"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar este mensaje la próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de error"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"No se ha podido leer el archivo del informe de errores"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sin nombre"</string>
</resources>
diff --git a/packages/Shell/res/values-et-rEE/strings.xml b/packages/Shell/res/values-et-rEE/strings.xml
index 652de64..3edefa4 100644
--- a/packages/Shell/res/values-et-rEE/strings.xml
+++ b/packages/Shell/res/values-et-rEE/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Kest"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Veaaruande töötlemine on pooleli"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Veaaruande loomine"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Veaaruanne jäädvustati"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Veaaruande jagamiseks pühkige vasakule"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Veaaruande jagamiseks puudutage"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Kuva see sõnum järgmisel korral"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Veaaruanded"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Veaaruande faili ei õnnestunud lugeda"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"nimeta"</string>
</resources>
diff --git a/packages/Shell/res/values-eu-rES/strings.xml b/packages/Shell/res/values-eu-rES/strings.xml
index 3234786..c592f50 100644
--- a/packages/Shell/res/values-eu-rES/strings.xml
+++ b/packages/Shell/res/values-eu-rES/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell-interfazea"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Abian da akatsen txostena egiteko prozesua"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Sortzen ari gara akatsen txostena"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Akatsen txostena jaso da"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Programa-akatsen txostena partekatzeko, pasatu hatza ezkerrera"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Akatsen txostena partekatzeko, ukitu"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Erakutsi mezu hau hurrengoan"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Akatsen txostenak"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ezin izan da irakurri akatsen txostena"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"izengabea"</string>
</resources>
diff --git a/packages/Shell/res/values-fa/strings.xml b/packages/Shell/res/values-fa/strings.xml
index ff58c25..409fd53 100644
--- a/packages/Shell/res/values-fa/strings.xml
+++ b/packages/Shell/res/values-fa/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"گزارش اشکال در حال انجام است"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"گزارش اشکال در حال ایجاد شدن است"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"گزارش اشکال دریافت شد"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"برای اشتراکگذاری گزارش اشکال، به تندی آن را به چپ بکشید"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"جهت اشتراکگذاری گزارش اشکال خود لمس کنید"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"دفعه بعد این پیام نشان داده شود"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"گزارش اشکال"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"فایل گزارش اشکال خوانده نشد"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"بینام"</string>
</resources>
diff --git a/packages/Shell/res/values-fi/strings.xml b/packages/Shell/res/values-fi/strings.xml
index df6851c..bfa920a 100644
--- a/packages/Shell/res/values-fi/strings.xml
+++ b/packages/Shell/res/values-fi/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Komentotulkki"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Virheraportti käynnissä"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Luodaan virheraporttia"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Virheraportti tallennettu"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Jaa virheraportti pyyhkäisemällä vasemmalle"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Jaa virheraportti koskettamalla tätä"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Näytä tämä viesti seuraavalla kerralla"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Virheraportit"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Virheraporttitiedostoa ei voi lukea."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"nimetön"</string>
</resources>
diff --git a/packages/Shell/res/values-fr-rCA/strings.xml b/packages/Shell/res/values-fr-rCA/strings.xml
index 5f58164..4dc4482 100644
--- a/packages/Shell/res/values-fr-rCA/strings.xml
+++ b/packages/Shell/res/values-fr-rCA/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Création du rapport de bogue en cours..."</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Le rapport de bogue est en cours de création"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Rapport de bogue enregistré"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Faites glisser le doigt vers la gauche pour partager votre rapport de bogue."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Appuyer ici pour partager votre rapport de bogue"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afficher ce message la prochaine fois"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Rapports de bogues"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier du rapport de bogue"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sans nom"</string>
</resources>
diff --git a/packages/Shell/res/values-fr/strings.xml b/packages/Shell/res/values-fr/strings.xml
index 9562c6c..a3e4f7d 100644
--- a/packages/Shell/res/values-fr/strings.xml
+++ b/packages/Shell/res/values-fr/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Rapport de bug en cours"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Le rapport de bug est en cours de création."</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Rapport de bug enregistré"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Faites glisser le doigt vers la gauche pour partager votre rapport d\'erreur."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Appuyez ici pour partager le rapport de bug"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afficher ce message la prochaine fois"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Rapports d\'erreur"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossible de lire le fichier de rapport de bug."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sans nom"</string>
</resources>
diff --git a/packages/Shell/res/values-gl-rES/strings.xml b/packages/Shell/res/values-gl-rES/strings.xml
index 1f8da5d..8b28caa 100644
--- a/packages/Shell/res/values-gl-rES/strings.xml
+++ b/packages/Shell/res/values-gl-rES/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Informe de erro en curso"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Estase xerando o informe de erro"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Informe de erros rexistrado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Pasa o dedo á esquerda para compartir o teu informe de erros"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toca aquí para compartir o teu informe de erros"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensaxe a próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Informes de erros"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Non se puido ler o ficheiro de informe de erros"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sen nome"</string>
</resources>
diff --git a/packages/Shell/res/values-gu-rIN/strings.xml b/packages/Shell/res/values-gu-rIN/strings.xml
index 7a94dd7..91b1362 100644
--- a/packages/Shell/res/values-gu-rIN/strings.xml
+++ b/packages/Shell/res/values-gu-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"શેલ"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"બગ રિપોર્ટ ચાલુ છે"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"બગ રિપોર્ટ જનરેટ કરવામાં આવી રહી છે"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"બગ રિપોર્ટ કેપ્ચર કરી"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"તમારી બગ રિપોર્ટ શેર કરવા માટે ડાબે સ્વાઇપ કરો"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"તમારી બગ રિપોર્ટ શેર કરવા માટે ટચ કરો"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"આગલી વખતે આ સંદેશ બતાવો"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"બગ રિપોર્ટ્સ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"બગ રીપોર્ટ ફાઇલ વાંચી શકાઇ નથી"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"અનામાંકિત"</string>
</resources>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index 273b484..595ec7f 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"शेल"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"बग रिपोर्ट प्रगति में है"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"बग रिपोर्ट जेनरेट हो रही है"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"बग रिपोर्ट कैप्चर कर ली गई"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"अपनी बग रिपोर्ट साझा करने के लिए बाएं स्वाइप करें"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"अपनी बग रिपोर्ट साझा करने के लिए स्पर्श करें"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यह संदेश अगली बार दिखाएं"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"बग रिपोर्ट"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फ़ाइल नहीं पढ़ी जा सकी"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"अनामांकित"</string>
</resources>
diff --git a/packages/Shell/res/values-hr/strings.xml b/packages/Shell/res/values-hr/strings.xml
index 3836edb..1957bdb 100644
--- a/packages/Shell/res/values-hr/strings.xml
+++ b/packages/Shell/res/values-hr/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Ljuska"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Izvješće o programskoj pogrešci u tijeku"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generira se izvješće o programskoj pogrešci"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Prijava programske pogreške snimljena je"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Prijeđite prstom ulijevo da biste poslali izvješće o programskim pogreškama"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dodirnite za dijeljenje prijave programske pogreške"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Prikaži tu poruku sljedeći put"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Izvj. o prog. pogreš."</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Izvješće o programskoj pogrešci nije pročitano"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"bez naziva"</string>
</resources>
diff --git a/packages/Shell/res/values-hu/strings.xml b/packages/Shell/res/values-hu/strings.xml
index 9191e02..74b4aba 100644
--- a/packages/Shell/res/values-hu/strings.xml
+++ b/packages/Shell/res/values-hu/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Héj"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Hibajelentés folyamatban"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Hibajelentés létrehozása folyamatban"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Programhiba-jelentés rögzítve"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Húzza ujját balra a hibajelentés megosztásához"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Érintse meg a programhiba-jelentés megosztásához"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Üzenet mutatása legközelebb"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Hibajelentések"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"A hibajelentési fájlt nem sikerült beolvasni"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"névtelen"</string>
</resources>
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy-rAM/strings.xml
index bfa9b04..317cb0b 100644
--- a/packages/Shell/res/values-hy-rAM/strings.xml
+++ b/packages/Shell/res/values-hy-rAM/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Խեցի"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Վրիպակի զեկույցը ստեղծվում է"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Վրիպակի զեկույց է ստացվել"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Սահեցրեք ձախ՝ սխալի հաշվետվությունը համօգտագործելու համար"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Հպեք` ձեր վրիպակի մասին զեկույցը տարածելու համար"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Այս հաղորդագրությունը ցույց տալ հաջորդ անգամ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Վրիպակների հաշվետվություններ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Հնարավոր չէ կարդալ վրիպակների զեկույցի ֆայլը"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"անանուն"</string>
</resources>
diff --git a/packages/Shell/res/values-in/strings.xml b/packages/Shell/res/values-in/strings.xml
index 9a13d8b..57d4c73 100644
--- a/packages/Shell/res/values-in/strings.xml
+++ b/packages/Shell/res/values-in/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Kerangka"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Laporan bug sedang berlangsung"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Laporan bug sedang dibuat"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Laporan bug tercatat"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Gesek ke kiri untuk membagikan laporan bug Anda"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Sentuh untuk membagikan laporan bug Anda"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tampilkan pesan ini lain kali"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Laporan bug"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"File laporan bug tidak dapat dibaca"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"tanpa nama"</string>
</resources>
diff --git a/packages/Shell/res/values-is-rIS/strings.xml b/packages/Shell/res/values-is-rIS/strings.xml
index 4304c8e..39605db 100644
--- a/packages/Shell/res/values-is-rIS/strings.xml
+++ b/packages/Shell/res/values-is-rIS/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Skipanalína"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Verið er að útbúa villutilkynningu"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Verið er að búa til villutilkynningu"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Villutilkynning útbúin"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Strjúktu til vinstri til að deila villuskýrslunni"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Snertu til að deila villutilkynningunni"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Sýna þessi skilaboð næst"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Villutilkynningar"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ekki var hægt að lesa úr villuskýrslunni"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"án heitis"</string>
</resources>
diff --git a/packages/Shell/res/values-it/strings.xml b/packages/Shell/res/values-it/strings.xml
index 63d39d0..10ba7dd 100644
--- a/packages/Shell/res/values-it/strings.xml
+++ b/packages/Shell/res/values-it/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Segnalazione di bug in corso"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generazione segnalazione di bug in corso"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Segnalazione di bug acquisita"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Scorri verso sinistra per condividere il rapporto sui bug"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tocca per condividere la segnalazione di bug"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostra questo messaggio la prossima volta"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Rapporti sui bug"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Impossibile leggere il file relativo alla segnalazione di bug"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"senza nome"</string>
</resources>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index 94a167f..5b0cb26 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"מעטפת"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"הדוח על הבאג מתבצע כעת"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"מופק דוח על באג"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"דוח הבאגים צולם"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"החלק שמאלה כדי לשתף את דוח הבאגים"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"גע כדי לשתף את דוח הבאגים שלך"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"הצג את ההודעה הזו בפעם הבאה"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"דוחות באגים"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"לא ניתן היה לקרוא את קובץ הדוח על הבאג"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ללא שם"</string>
</resources>
diff --git a/packages/Shell/res/values-ja/strings.xml b/packages/Shell/res/values-ja/strings.xml
index 77adb37..fd4a150 100644
--- a/packages/Shell/res/values-ja/strings.xml
+++ b/packages/Shell/res/values-ja/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"シェル"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"バグレポートを処理しています"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"バグレポートを生成しています"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"バグレポートが記録されました"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"バグレポートを共有するには左にスワイプ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"バグレポートを共有するにはタップします"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"このメッセージを次回も表示する"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"バグレポート"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"バグレポート ファイルを読み取ることができませんでした"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"名前なし"</string>
</resources>
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka-rGE/strings.xml
index 2521d3e..802f944 100644
--- a/packages/Shell/res/values-ka-rGE/strings.xml
+++ b/packages/Shell/res/values-ka-rGE/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"გარეკანი"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"მიმდინარეობს ხარვეზის შესახებ ანგარიშის გენერირება"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ანგარიში ხარვეზების შესახებ შექმნილია"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"გაასრიალეთ მარცხნივ თქვენი ხარვეზის შეტყობინების გასაზიარებლად"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"შეეხეთ თქვენი ხარვეზების ანგარიშის გასაზიარებლად"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"შემდგომში აჩვენე ეს შეტყობინება"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"შეცდომების ანგარიშები"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ხარვეზების შესახებ ანგარიშის წაკითხვა ვერ მოხერხდა"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"უსახელო"</string>
</resources>
diff --git a/packages/Shell/res/values-kk-rKZ/strings.xml b/packages/Shell/res/values-kk-rKZ/strings.xml
index 5ce7815a..2825342 100644
--- a/packages/Shell/res/values-kk-rKZ/strings.xml
+++ b/packages/Shell/res/values-kk-rKZ/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Қабыршық"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Қате туралы есеп жасалып жатыр"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Вирус туралы баянат қабылданды"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Қате туралы есепті бөлісу үшін солға жанаңыз"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Бөліс үшін, вирус туралы баянатты түртіңіз."</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Бұл хабарды келесі жолы көрсетіңіз"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Қате туралы баяндамалар"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Қате туралы есеп файлын оқу мүмкін болмады"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"атаусыз"</string>
</resources>
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km-rKH/strings.xml
index 2814a73..966cec0 100644
--- a/packages/Shell/res/values-km-rKH/strings.xml
+++ b/packages/Shell/res/values-km-rKH/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"សែល"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"កំពុងដំណើរការរបាយការណ៍កំហុស"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"របាយការណ៍កំហុសកំពុងត្រូវបានបង្កើត"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"បានចាប់យករបាយការណ៍កំហុស"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"អូសទៅឆ្វេង ដើម្បីចែករំលែករបាយការណ៍កំហុសរបស់អ្នក"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ប៉ះ ដើម្បីចែករំលែករបាយការណ៍កំហុសរបស់អ្នក"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"បង្ហាញសារនេះពេលក្រោយ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"រាយការណ៍ពីកំហុស"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"មិនអាចអានឯកសាររបាយកាណ៍កំហុសបានទេ"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"គ្មានឈ្មោះ"</string>
</resources>
diff --git a/packages/Shell/res/values-kn-rIN/strings.xml b/packages/Shell/res/values-kn-rIN/strings.xml
index be34c85..6da5319 100644
--- a/packages/Shell/res/values-kn-rIN/strings.xml
+++ b/packages/Shell/res/values-kn-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ಶೆಲ್"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ದೋಷ ವರದಿ ಪ್ರಗತಿಯಲ್ಲಿದೆ"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ದೋಷ ವರದಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ದೋಷದ ವರದಿಯನ್ನು ಸೆರೆಹಿಡಿಯಲಾಗಿದೆ"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ನಿಮ್ಮ ದೋಷ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಎಡಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ನಿಮ್ಮ ದೋಷದ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸ್ಪರ್ಶಿಸಿ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ಈ ಸಂದೇಶವನ್ನು ಮುಂದಿನ ಬಾರಿ ತೋರಿಸಿ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ದೋಷ ವರದಿಗಳು"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ಬಗ್ ವರದಿ ಫೈಲ್ ಅನ್ನು ಓದಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ಹೆಸರಿಸದಿರುವುದು"</string>
</resources>
diff --git a/packages/Shell/res/values-ko/strings.xml b/packages/Shell/res/values-ko/strings.xml
index 46c0daa..5e96e6d 100644
--- a/packages/Shell/res/values-ko/strings.xml
+++ b/packages/Shell/res/values-ko/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"셸"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"버그 신고 생성 중"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"버그 신고서 캡처됨"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"왼쪽으로 스와이프하여 버그 신고서를 공유하세요."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"버그 신고서를 공유하려면 터치하세요."</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"다음에 이 메시지 표시"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"버그 신고"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"버그 신고 파일을 읽을 수 없습니다."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"이름 없음"</string>
</resources>
diff --git a/packages/Shell/res/values-ky-rKG/strings.xml b/packages/Shell/res/values-ky-rKG/strings.xml
index aa8c538..aafeb24 100644
--- a/packages/Shell/res/values-ky-rKG/strings.xml
+++ b/packages/Shell/res/values-ky-rKG/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Командалык кабык"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Мүчүлүштүктөр тууралуу билдирүү өндүрүлүүдө"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Ката тууралуу билдирүү түзүлдү"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Ката жөнүндө кабар менен бөлүшүү үчүн солго серпип коюңуз"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Ката тууралуу билдирүүңүздү жөнөтүш үчүн, тийиңиз"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Бул билдирүү кийин көрсөтүлсүн"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Мүчүлүштүктөрдү кабарлоолор"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Мүчүлүштүк тууралуу кабарлаган файл окулбай койду"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"аты жок"</string>
</resources>
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo-rLA/strings.xml
index caf11c4..0346688 100644
--- a/packages/Shell/res/values-lo-rLA/strings.xml
+++ b/packages/Shell/res/values-lo-rLA/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ລາຍງານບັນຫາພວມດຳເນີນຢູ່"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ກຳລັງສ້າງລາຍງານບັນຫາ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ລາຍງານຈຸດບົກພ່ອງຖືກເກັບກຳແລ້ວ"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ປັດໄປຊ້າຍເພື່ອສົ່ງລາຍງານຂໍ້ຜິດພາດຂອງທ່ານ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ແຕະເພື່ອສົ່ງການລາຍງານປັນຫາຂອງທ່ານ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ສະແດງຂໍ້ຄວາມນີ້ອີກໃນເທື່ອຕໍ່ໄປ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ລາຍງານບັນຫາ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ບໍ່ສາມາດອ່ານໄຟລ໌ລາຍງານຂໍ້ຜິດພາດໄດ້"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ບໍ່ມີຊື່"</string>
</resources>
diff --git a/packages/Shell/res/values-lt/strings.xml b/packages/Shell/res/values-lt/strings.xml
index e70cf9f..84066c0 100644
--- a/packages/Shell/res/values-lt/strings.xml
+++ b/packages/Shell/res/values-lt/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Apvalkalas"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Pranešimas apie riktą generuojamas"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Riktų ataskaita užfiksuota"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Perbraukite kairėn, kad bendrintumėte rikto ataskaitą"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Palieskite, kad bendrintumėte riktų ataskaitą"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Rodyti šį pranešimą kitą kartą"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Riktų ataskaitos"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nepavyko sukurti pranešimo apie riktą failo"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"be pavadinimo"</string>
</resources>
diff --git a/packages/Shell/res/values-lv/strings.xml b/packages/Shell/res/values-lv/strings.xml
index c5d10bb..95d168c 100644
--- a/packages/Shell/res/values-lv/strings.xml
+++ b/packages/Shell/res/values-lv/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Aizsargs"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Notiek kļūdas pārskata izveide"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Izveidots kļūdu pārskats"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Velciet pa kreisi, lai kopīgotu savu kļūdu ziņojumu."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Pieskarieties, lai kopīgotu kļūdu pārskatu."</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Rādīt šo ziņojumu nākamajā reizē"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Kļūdu ziņojumi"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nevarēja nolasīt kļūdas pārskata failu."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"bez nosaukuma"</string>
</resources>
diff --git a/packages/Shell/res/values-mk-rMK/strings.xml b/packages/Shell/res/values-mk-rMK/strings.xml
index 4baa86a..0f3ed5a 100644
--- a/packages/Shell/res/values-mk-rMK/strings.xml
+++ b/packages/Shell/res/values-mk-rMK/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Обвивка"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Извештајот за грешка е во тек"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Се генерира извештајот за грешки"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Извештајот за грешка е снимен"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Повлечете налево за да споделите пријава за грешка"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Допри да се сподели твојот извештај за грешка"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Прикажи ја поракава следниот пат"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Извештаи за грешки"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотеката со извештај за грешка не можеше да се прочита"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"неименувани"</string>
</resources>
diff --git a/packages/Shell/res/values-ml-rIN/strings.xml b/packages/Shell/res/values-ml-rIN/strings.xml
index 5dd7763..290c10b 100644
--- a/packages/Shell/res/values-ml-rIN/strings.xml
+++ b/packages/Shell/res/values-ml-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ഷെൽ"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ബഗ് റിപ്പോർട്ട് പുരോഗതിയിലാണ്"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ബഗ് റിപ്പോർട്ട് സൃഷ്ടിച്ചുകൊണ്ടിരിക്കുന്നു"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ബഗ് റിപ്പോർട്ട് ക്യാപ്ചർ ചെയ്തു"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"നിങ്ങളുടെ ബഗ് റിപ്പോർട്ട് പങ്കിടുന്നതിന് ഇടത്തേയ്ക്ക് സ്വൈപ്പുചെയ്യുക"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"നിങ്ങളുടെ ബഗ് റിപ്പോർട്ട് പങ്കിടാൻ സ്പർശിക്കുക"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ഈ സന്ദേശം അടുത്ത തവണ ദൃശ്യമാക്കുക"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ബഗ് റിപ്പോർട്ടുകൾ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ബഗ് റിപ്പോർട്ട് ഫയൽ വായിക്കാനായില്ല"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"പേരില്ലാത്തവർ"</string>
</resources>
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn-rMN/strings.xml
index f7a9688..8f6a2b0 100644
--- a/packages/Shell/res/values-mn-rMN/strings.xml
+++ b/packages/Shell/res/values-mn-rMN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Шел"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Алдааны тайлан үргэлжилж байна"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Алдааны тайланг үүсгэсэн"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Алдааны мэдээлэл хүлээн авав"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Өөрийн согог репортыг хуваалцахын тулд зүүн шудрана уу"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Та алдааны мэдэгдлийг хуваалцах бол хүрнэ үү"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Энэ мессежийг дараагийн удаа харуулах"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Гэмтлийн тухай тайлан"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Алдааны тайлангийн файлыг уншиж чадахгүй байна"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"нэр байхгүй"</string>
</resources>
diff --git a/packages/Shell/res/values-mr-rIN/strings.xml b/packages/Shell/res/values-mr-rIN/strings.xml
index e0db42b..40d7a9c 100644
--- a/packages/Shell/res/values-mr-rIN/strings.xml
+++ b/packages/Shell/res/values-mr-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"शेल"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"दोष अहवाल प्रगतीपथावर आहे"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"दोष अहवाल तयार केला जात आहे"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"दोष अहवाल कॅप्चर केला"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"आपला दोष अहवाल सामायिक करण्यासाठी डावीकडे स्वाइप करा"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"आपला दोष अहवाल सामायिक करण्यासाठी स्पर्श करा"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"पुढील वेळी हा संदेश दर्शवा"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"दोष अहवाल"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"दोष अहवाल फाईल वाचणे शक्य झाले नाही"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"अनामित"</string>
</resources>
diff --git a/packages/Shell/res/values-ms-rMY/strings.xml b/packages/Shell/res/values-ms-rMY/strings.xml
index bbbb42a..4491add 100644
--- a/packages/Shell/res/values-ms-rMY/strings.xml
+++ b/packages/Shell/res/values-ms-rMY/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Laporan pepijat sedang dijanakan"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Laporan pepijat telah ditangkap"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Leret ke kiri untuk berkongsi laporan pepijat anda"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Sentuh untuk berkongsi laporan pepijat anda"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tunjukkan mesej ini pada masa akan datang"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Laporan pepijat"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fail laporan pepijat tidak dapat dibaca"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"tidak bernama"</string>
</resources>
diff --git a/packages/Shell/res/values-my-rMM/strings.xml b/packages/Shell/res/values-my-rMM/strings.xml
index d49dc15..77ca5bf 100644
--- a/packages/Shell/res/values-my-rMM/strings.xml
+++ b/packages/Shell/res/values-my-rMM/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"အခွံ"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ချွတ်ယွင်းချက် အစီရင်ခံစာ ပြုလုပ်ဆဲ"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ချွတ်ယွင်းမှု အစီရင်ခံစာကို ထုတ်ပေးနေသည်"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"အမှားအယွင်းမှတ်တမ်းကို အောင်မြင်စွာ သိမ်းဆည်းပြီး"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"သင်၏ ဘာဂ် အစီရင်ခံစာကို မျှပေးရန် ဘယ်ဘက်သို့ ပွတ်ဆွဲရန်"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"အမှားအယွင်း မှတ်တမ်းကို မျှဝေရန် ထိလိုက်ပါ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ဤစာတန်းကို နောက်တစ်ခါတွင် ပြရန်"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ချို့ယွင်းမှု အစီရင်ခံစာများ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ချွတ်ယွင်းချက် အစီရင်ခံစာကို ဖတ်၍မရပါ"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"အမည်မဲ့"</string>
</resources>
diff --git a/packages/Shell/res/values-nb/strings.xml b/packages/Shell/res/values-nb/strings.xml
index d3aafdd..14a873c 100644
--- a/packages/Shell/res/values-nb/strings.xml
+++ b/packages/Shell/res/values-nb/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Kommandoliste"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Feilrapport pågår"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Feilrapporten blir generert"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Feilrapporten er lagret"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Sveip til venstre for å dele feilrapporten din"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Trykk for å dele feilrapporten din"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne meldingen neste gang"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Feilrapporter"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Feilrapportfilen kunne ikke leses"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"uten navn"</string>
</resources>
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne-rNP/strings.xml
index fb81e55..1decb98 100644
--- a/packages/Shell/res/values-ne-rNP/strings.xml
+++ b/packages/Shell/res/values-ne-rNP/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"सेल"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"बग रिपोर्ट उत्पन्न भइरहेको छ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"बग प्रतिवेदन समातियो"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"तपाईँको बग रिपोर्ट साझेदारी गर्न बायाँ स्वाइप गर्नुहोस्"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"तपाईंको बग रिपोर्ट साझेदारी गर्न छुनुहोस्"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यो सन्देश अर्को पटक देखाउनुहोस्"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"बग रिपोर्टहरू"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"बग रिपोर्ट फाइल पढ्न सकिएन"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"(बेनामी)"</string>
</resources>
diff --git a/packages/Shell/res/values-nl/strings.xml b/packages/Shell/res/values-nl/strings.xml
index a097fea..9bfce94 100644
--- a/packages/Shell/res/values-nl/strings.xml
+++ b/packages/Shell/res/values-nl/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Bugrapport wordt uitgevoerd"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Bugrapport wordt gegenereerd"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Foutenrapport vastgelegd"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Veeg naar links om je bugmelding te delen"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Raak aan om je foutenrapport te delen"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Dit bericht de volgende keer weergeven"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Foutenrapporten"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Bestand met bugrapport kan niet worden gelezen"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"naamloos"</string>
</resources>
diff --git a/packages/Shell/res/values-pa-rIN/strings.xml b/packages/Shell/res/values-pa-rIN/strings.xml
index 54e30d6..cf6df17 100644
--- a/packages/Shell/res/values-pa-rIN/strings.xml
+++ b/packages/Shell/res/values-pa-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ਸ਼ੈਲ"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"ਬੱਗ ਰਿਪੋਰਟ \'ਤੇ ਕਾਰਵਾਈ ਹੋ ਰਹੀ ਹੈ"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"ਬੱਗ ਰਿਪੋਰਟ ਸਿਰਜੀ ਜਾ ਰਹੀ ਹੈ"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"ਬਗ ਰਿਪੋਰਟ ਕੈਪਚਰ ਕੀਤੀ"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ਤੁਹਾਡੀ ਬਗ ਰਿਪੋਰਟ ਸ਼ੇਅਰ ਕਰਨ ਲਈ ਖੱਬੇ ਪਾਸੇ ਸਵਾਈਪ ਕਰੋ"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ਆਪਣੀ ਬਗ ਰਿਪੋਰਟ ਸ਼ੇਅਰ ਕਰਨ ਲਈ ਛੋਹਵੋ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ਅਗਲੀ ਵਾਰ ਇਹ ਸੁਨੇਹਾ ਦਿਖਾਓ"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"ਬਗ ਰਿਪੋਰਟਾਂ"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ਬਗ ਰਿਪੋਰਟ ਫ਼ਾਈਲ ਪੜ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕੀ"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ਬਿਨਾਂ-ਨਾਮ"</string>
</resources>
diff --git a/packages/Shell/res/values-pl/strings.xml b/packages/Shell/res/values-pl/strings.xml
index 599f8c1..0c8a6b4 100644
--- a/packages/Shell/res/values-pl/strings.xml
+++ b/packages/Shell/res/values-pl/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Powłoka"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Trwa zgłaszanie błędu"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Trwa generowanie raportu o błędzie"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raport o błędach został zapisany"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Przesuń palcem w lewo, by udostępnić swoje zgłoszenie błędu"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Kliknij, by udostępnić raport o błędach"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Pokaż ten komunikat następnym razem"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Raporty o błędach"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Nie można odczytać raportu o błędzie"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"bez nazwy"</string>
</resources>
diff --git a/packages/Shell/res/values-pt-rBR/strings.xml b/packages/Shell/res/values-pt-rBR/strings.xml
index a1a9ad1..b194ecc 100644
--- a/packages/Shell/res/values-pt-rBR/strings.xml
+++ b/packages/Shell/res/values-pt-rBR/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Relatório de bugs em andamento"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Um relatório do bug está sendo gerado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de bugs capturado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslize para a esquerda para compartilhar seu relatório de bugs"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para compartilhar seu relatório de bugs"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de bugs"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
</resources>
diff --git a/packages/Shell/res/values-pt-rPT/strings.xml b/packages/Shell/res/values-pt-rPT/strings.xml
index 2e25f8c..417c444 100644
--- a/packages/Shell/res/values-pt-rPT/strings.xml
+++ b/packages/Shell/res/values-pt-rPT/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Relatório de erro em curso"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"O relatório de erro está a ser gerado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de erros capturado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslizar rapidamente para a esquerda para partilhar o seu relatório de erros"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para partilhar o relatório de erros"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de erros"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o ficheiro de relatório de erro"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
</resources>
diff --git a/packages/Shell/res/values-pt/strings.xml b/packages/Shell/res/values-pt/strings.xml
index a1a9ad1..b194ecc 100644
--- a/packages/Shell/res/values-pt/strings.xml
+++ b/packages/Shell/res/values-pt/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Relatório de bugs em andamento"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Um relatório do bug está sendo gerado"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Relatório de bugs capturado"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Deslize para a esquerda para compartilhar seu relatório de bugs"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Toque para compartilhar seu relatório de bugs"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Mostrar esta mensagem da próxima vez"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Relatórios de bugs"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Não foi possível ler o arquivo de relatório de bug"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"sem nome"</string>
</resources>
diff --git a/packages/Shell/res/values-ro/strings.xml b/packages/Shell/res/values-ro/strings.xml
index d8a3b92..132f21f 100644
--- a/packages/Shell/res/values-ro/strings.xml
+++ b/packages/Shell/res/values-ro/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Raportul de eroare se creează"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Se generează raportul de eroare"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raportul despre erori a fost creat"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Glisați la stânga pentru a trimite raportul de erori"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Atingeți pentru a permite accesul la raportul despre erori"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afișați acest mesaj data viitoare"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Rapoarte de erori"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Fișierul cu raportul de eroare nu a putut fi citit"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"fără nume"</string>
</resources>
diff --git a/packages/Shell/res/values-ru/strings.xml b/packages/Shell/res/values-ru/strings.xml
index 436a590..2ae832b 100644
--- a/packages/Shell/res/values-ru/strings.xml
+++ b/packages/Shell/res/values-ru/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Оболочка"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Отправка сообщения об ошибке..."</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Создание отчета об ошибке"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Отчет об ошибке сохранен"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Проведите влево, чтобы отправить отчет"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Нажмите, чтобы отправить отчет об ошибках"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Показать это сообщение в следующий раз"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Отчеты об ошибках"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Не удалось открыть отчет об ошибке"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"без названия"</string>
</resources>
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si-rLK/strings.xml
index a0bc5f6..c846f87 100644
--- a/packages/Shell/res/values-si-rLK/strings.xml
+++ b/packages/Shell/res/values-si-rLK/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ෂෙල්"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"දෝෂය වාර්තා කිරීම සිදු කරමින් පවතී"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"දෝෂ වාර්තාවක් ජනනය කරමින් පවතී"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"දෝෂ වාර්තාව ලබාගන්නා ලදි"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"ඔබගේ දෝෂ වාර්තාව බෙදාගැනීමට වමට ස්වයිප් කරන්න"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"ඔබගේ දෝෂ වාර්තාව බෙදා ගැනීමට ස්පර්ශ කරන්න"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ඊළඟ වෙලාවේ මෙම පණිවිඩය පෙන්වන්න"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"දෝෂ වාර්තා"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"දෝෂ වාර්තා ගොනුව කියවීමට නොහැකි විය"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"නම් නොකළ"</string>
</resources>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index e568946..b395d1a 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Prostredie"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Prebieha hlásenie chyby"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Generuje sa hlásenie chyby"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Hlásenie o chybách bolo vytvorené"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Ak chcete hlásenie o chybe zdieľať, prejdite prstom doľava."</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Hlásenie o chybách môžete zdielať klepnutím"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobraziť túto správu nabudúce"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Hlásenia chýb"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Súbor s hlásením chyby sa nepodarilo prečítať"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"bez názvu"</string>
</resources>
diff --git a/packages/Shell/res/values-sl/strings.xml b/packages/Shell/res/values-sl/strings.xml
index 6ac5ac8c..91041e1 100644
--- a/packages/Shell/res/values-sl/strings.xml
+++ b/packages/Shell/res/values-sl/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Lupina"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Poročanje o napakah poteka"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Poročilo o napakah se pripravlja"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Poročilo o napaki je posneto"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Povlecite v levo, če želite poslati sporočilo o napaki"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Dotaknite se, če želite deliti sporočilo o napaki z drugimi"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Pokaži to sporočilo naslednjič"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Poročila o napakah"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Datoteke s poročilom o napakah ni bilo mogoče prebrati"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"neimenovano"</string>
</resources>
diff --git a/packages/Shell/res/values-sq-rAL/strings.xml b/packages/Shell/res/values-sq-rAL/strings.xml
index 54f2aad..e91aa09 100644
--- a/packages/Shell/res/values-sq-rAL/strings.xml
+++ b/packages/Shell/res/values-sq-rAL/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Guaska"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Raporti i gabimeve në kod është në progres"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Po krijohet raporti i defekteve në kod"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Raporti i defektit në kod u regjistrua"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Rrëshqit majtas për të ndarë raportin e defektit në kod"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Prek për të ndarë raportin e defektit në kod"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Tregoje këtë mesazh herën tjetër"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Raportet e gabimeve"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Skedari i raportimit të defektit në kod nuk mund të lexohej."</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"e paemërtuar"</string>
</resources>
diff --git a/packages/Shell/res/values-sr/strings.xml b/packages/Shell/res/values-sr/strings.xml
index 81cde00..1be47da 100644
--- a/packages/Shell/res/values-sr/strings.xml
+++ b/packages/Shell/res/values-sr/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Прављење извештаја о грешци је у току"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Извештај о грешци се генерише"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Извештај о грешци је снимљен"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Превуците улево да бисте делили извештај о грешкама"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Додирните да бисте делили извештај о грешци"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Прикажи ову поруку следећи пут"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Извештаји о грешкама"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Датотека извештаја о грешци не може да се прочита"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"неименовано"</string>
</resources>
diff --git a/packages/Shell/res/values-sv/strings.xml b/packages/Shell/res/values-sv/strings.xml
index 2287319..9f5b5f0 100644
--- a/packages/Shell/res/values-sv/strings.xml
+++ b/packages/Shell/res/values-sv/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Skal"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Felrapportering pågår"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Felrapporten genereras"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Felrapporten har skapats"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Svep åt vänster om du vill dela felrapporten"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Tryck om du vill dela felrapporten"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Visa det här meddelandet nästa gång"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Felrapporter"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Det gick inte att läsa felrapporten"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"namnlös"</string>
</resources>
diff --git a/packages/Shell/res/values-sw/strings.xml b/packages/Shell/res/values-sw/strings.xml
index adb97dd..422ca81 100644
--- a/packages/Shell/res/values-sw/strings.xml
+++ b/packages/Shell/res/values-sw/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Ganda"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Mchakato wa kuripoti hitilafu unaendelea"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Inatayarisha ripoti ya hitilafu"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Ripoti ya hitilafu imenaswa"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Telezesha kidole kushoto ili ushiriki ripoti yako ya hitilafu"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Gusa ili ushiriki ripoti yako ya hitilafu"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Onyesha ujumbe huu wakati mwingine"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Ripoti za hitilafu"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Faili ya ripoti ya hitilafu haikusomwa"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"Isiyo na jina"</string>
</resources>
diff --git a/packages/Shell/res/values-ta-rIN/strings.xml b/packages/Shell/res/values-ta-rIN/strings.xml
index 15a6242..31daf54 100644
--- a/packages/Shell/res/values-ta-rIN/strings.xml
+++ b/packages/Shell/res/values-ta-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"ஷெல்"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"பிழை அறிக்கை செயலிலுள்ளது"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"பிழை அறிக்கை உருவாக்கப்படுகிறது"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"பிழை அறிக்கைகள் படமெடுக்கப்பட்டன"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"பிழை அறிக்கையைப் பகிர இடது புறமாகத் தேய்க்கவும்"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"உங்கள் பிழை அறிக்கையைப் பகிர, தொடவும்"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"இந்தச் செய்தியை அடுத்த முறைக் காட்டு"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"பிழை அறிக்கைகள்"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"பிழை அறிக்கையைப் படிக்க முடியவில்லை"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"பெயரிடப்படாதது"</string>
</resources>
diff --git a/packages/Shell/res/values-te-rIN/strings.xml b/packages/Shell/res/values-te-rIN/strings.xml
index cd951a2..34ab6f2 100644
--- a/packages/Shell/res/values-te-rIN/strings.xml
+++ b/packages/Shell/res/values-te-rIN/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"షెల్"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"బగ్ నివేదిక ప్రోగ్రెస్లో ఉంది"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"బగ్ నివేదిక ఉత్పాదించబడుతోంది"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"బగ్ నివేదిక క్యాప్చర్ చేయబడింది"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి ఎడమవైపుకు స్వైప్ చేయండి"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"మీ బగ్ నివేదికను భాగస్వామ్యం చేయడానికి తాకండి"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"తదుపరిసారి ఈ సందేశాన్ని చూపు"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"బగ్ నివేదికలు"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"బగ్ నివేదిక ఫైల్ను చదవడం సాధ్యపడలేదు"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"పేరు లేనివి"</string>
</resources>
diff --git a/packages/Shell/res/values-th/strings.xml b/packages/Shell/res/values-th/strings.xml
index c61ffeb..2d9a65e 100644
--- a/packages/Shell/res/values-th/strings.xml
+++ b/packages/Shell/res/values-th/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"รายงานข้อบกพร่องอยู่ระหว่างดำเนินการ"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"กำลังสร้างรายงานข้อบกพร่อง"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"จับภาพรายงานข้อบกพร่องแล้ว"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"กวาดไปทางซ้ายเพื่อแชร์รายงานข้อบกพร่อง"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"แตะเพื่อแชร์รายงานข้อบกพร่องของคุณ"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"แสดงข้อความนี้ในครั้งต่อไป"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"รายงานข้อบกพร่อง"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"ไม่สามารถอ่านไฟล์รายงานข้อบกพร่อง"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"ไม่มีชื่อ"</string>
</resources>
diff --git a/packages/Shell/res/values-tl/strings.xml b/packages/Shell/res/values-tl/strings.xml
index 3e9a68d..8fead8f 100644
--- a/packages/Shell/res/values-tl/strings.xml
+++ b/packages/Shell/res/values-tl/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Kasalukuyang ginagawa ang ulat ng bug"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Binubuo na ang ulat ng bug"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Na-capture ang ulat ng bug"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Mag-swipe pakaliwa upang ibahagi ang iyong ulat ng bug"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Pindutin upang ibahagi ang iyong ulat ng bug"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Ipakita ang mensaheng ito sa susunod"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Mga ulat sa bug"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Hindi mabasa ang file ng pag-uulat ng bug"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"walang pangalan"</string>
</resources>
diff --git a/packages/Shell/res/values-tr/strings.xml b/packages/Shell/res/values-tr/strings.xml
index f90dae0..e1d30cc 100644
--- a/packages/Shell/res/values-tr/strings.xml
+++ b/packages/Shell/res/values-tr/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Kabuk"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Hata raporu hazırlanıyor"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Hata raporu oluşturuluyor"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Hata raporu kaydedildi"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Hata raporunuzu paylaşmak için hızlıca sola kaydırın"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Hata raporunuzu paylaşmak için dokunun"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bir dahaki sefere bu iletiyi göster"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Hata raporları"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Hata raporu dosyası okunamadı"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"adsız"</string>
</resources>
diff --git a/packages/Shell/res/values-uk/strings.xml b/packages/Shell/res/values-uk/strings.xml
index dac4fe0..f1396cb 100644
--- a/packages/Shell/res/values-uk/strings.xml
+++ b/packages/Shell/res/values-uk/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Оболонка"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Генерується повідомлення про помилку"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Генерується повідомлення про помилку"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Звіт про помилки створено"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Проведіть пальцем ліворуч, щоб надіслати звіт про помилки"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Торкніться, щоб надіслати звіт про помилки"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Показати це повідомлення наступного разу"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Звіти про помилки"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Не вдалося прочитати звіт про помилки"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"без назви"</string>
</resources>
diff --git a/packages/Shell/res/values-ur-rPK/strings.xml b/packages/Shell/res/values-ur-rPK/strings.xml
index 206f02a..412d230 100644
--- a/packages/Shell/res/values-ur-rPK/strings.xml
+++ b/packages/Shell/res/values-ur-rPK/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"شیل"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"بگ رپورٹ پر پیشرفت جاری ہے"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"بگ رپورٹ تخلیق ہو رہی ہے"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"بَگ رپورٹ کیپچر کر لی گئی"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"اپنی بگ رپورٹ کا اشتراک کرنے کیلئے بائیں سوائپ کریں"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"اپنی بَگ رپورٹ کا اشتراک کرنے کیلئے ٹچ کریں"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"یہ پیغام اگلی بار دکھائیں"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"بگ رپورٹس"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"بگ رپورٹ فائل پڑھی نہیں جا سکی"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"بغیر نام"</string>
</resources>
diff --git a/packages/Shell/res/values-uz-rUZ/strings.xml b/packages/Shell/res/values-uz-rUZ/strings.xml
index 0b8c1fb..ca46d2a 100644
--- a/packages/Shell/res/values-uz-rUZ/strings.xml
+++ b/packages/Shell/res/values-uz-rUZ/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Terminal"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Xatoliklar hisoboti yuborilmoqda…"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Xatoliklar hisoboti tayyorlanmoqda"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Xatolik hisobotini yozib olindi"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Xatolik hisobotini yuborish uchun barmog‘ingiz bilan chapga suring"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Xatolik hisobotini bo‘lishish uchun barmog‘ingizni tegizing."</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Ushbu xabar keyingi safar ko‘rsatilsin"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Xatoliklar hisoboti"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Xatoliklar hisoboti faylini o‘qib bo‘lmadi"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"nomsiz"</string>
</resources>
diff --git a/packages/Shell/res/values-vi/strings.xml b/packages/Shell/res/values-vi/strings.xml
index 9ef7cf9..ec4364e 100644
--- a/packages/Shell/res/values-vi/strings.xml
+++ b/packages/Shell/res/values-vi/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Đang tiến hành báo cáo lỗi"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Báo cáo lỗi đang được tạo"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Báo cáo lỗi đã được chụp"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Vuốt sang trái để chia sẻ báo cáo lỗi của bạn"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Chạm để chia sẻ báo cáo lỗi của bạn"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Hiển thị thông báo này vào lần tới"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Báo cáo lỗi"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Không thể đọc tệp báo cáo lỗi"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"chưa được đặt tên"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rCN/strings.xml b/packages/Shell/res/values-zh-rCN/strings.xml
index 0928bb3..5a8e5f7 100644
--- a/packages/Shell/res/values-zh-rCN/strings.xml
+++ b/packages/Shell/res/values-zh-rCN/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"Shell"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在生成错误报告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已抓取错误报告"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑动即可分享错误报告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"触摸即可分享您的错误报告"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次再显示这条讯息"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"错误报告"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"无法读取错误报告文件"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
index 26a84c3..7e57cc4 100644
--- a/packages/Shell/res/values-zh-rHK/strings.xml
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"命令介面"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在產生錯誤報告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已擷取錯誤報告"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑動即可分享錯誤報告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"輕觸即可分享您的錯誤報告"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次再顯示這則訊息"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"錯誤報告"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
</resources>
diff --git a/packages/Shell/res/values-zh-rTW/strings.xml b/packages/Shell/res/values-zh-rTW/strings.xml
index f79e58e..e495d4a 100644
--- a/packages/Shell/res/values-zh-rTW/strings.xml
+++ b/packages/Shell/res/values-zh-rTW/strings.xml
@@ -17,8 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"殼層"</string>
- <!-- no translation found for bugreport_in_progress_title (6125357428413919520) -->
- <skip />
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"正在產生錯誤報告"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"已擷取錯誤報告"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"向左滑動即可分享錯誤報告"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"輕觸即可分享您的錯誤報告"</string>
@@ -26,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次仍顯示這則訊息"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"錯誤報告"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"無法讀取錯誤報告檔案"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"未命名"</string>
</resources>
diff --git a/packages/Shell/res/values-zu/strings.xml b/packages/Shell/res/values-zu/strings.xml
index 2e209e1..91f2951 100644
--- a/packages/Shell/res/values-zu/strings.xml
+++ b/packages/Shell/res/values-zu/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="3701846017049540910">"I-Shell"</string>
- <string name="bugreport_in_progress_title" msgid="6125357428413919520">"Umbiko wesiphazamisi uyaqhubeka"</string>
+ <string name="bugreport_in_progress_title" msgid="7409917338223386637">"Kukhiqizwa umbiko wesiphazamisi"</string>
<string name="bugreport_finished_title" msgid="2293711546892863898">"Umbiko wesiphazamisi uthwetshuliwe"</string>
<string name="bugreport_finished_text" product="watch" msgid="8389172248433597683">"Swayiphela kwesokunxele ukuze wabelane umbiko wesiphazamiso sakho"</string>
<string name="bugreport_finished_text" product="default" msgid="3559904746859400732">"Thinta ukuze wabelane ngombiko wakho wesiphazamisi"</string>
@@ -25,4 +25,5 @@
<string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bonisa lo mlayezo ngesikhathi esilandelayo"</string>
<string name="bugreport_storage_title" msgid="5332488144740527109">"Imibiko yeziphazamiso"</string>
<string name="bugreport_unreadable_text" msgid="586517851044535486">"Ifayela lombiko wesiphazamso alikwazanga ukufundwa"</string>
+ <string name="bugreport_unnamed" msgid="2800582406842092709">"awunikiwe igama"</string>
</resources>
diff --git a/packages/Shell/res/values/strings.xml b/packages/Shell/res/values/strings.xml
index cff36f7..5c25576 100644
--- a/packages/Shell/res/values/strings.xml
+++ b/packages/Shell/res/values/strings.xml
@@ -17,8 +17,8 @@
<resources>
<string name="app_label">Shell</string>
- <!-- Title of notification indicating a bugreport process is in progress. [CHAR LIMIT=50] -->
- <string name="bugreport_in_progress_title">Bug report in progress</string>
+ <!-- Title of notification indicating a bugreport is being generated. [CHAR LIMIT=50] -->
+ <string name="bugreport_in_progress_title">Bug report is being generated</string>
<!-- Title of notification indicating a bugreport has been successfully captured. [CHAR LIMIT=50] -->
<string name="bugreport_finished_title">Bug report captured</string>
@@ -39,4 +39,7 @@
<!-- Toast message sent when the bugreport file could be read. -->
<string name="bugreport_unreadable_text">Bug report file could not be read</string>
+ <!-- Title for bug reports received from dumpstate without a name. [CHAR LIMIT=30]-->
+ <string name="bugreport_unnamed">unnamed</string>
+
</resources>
diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java
index d0e91d2..78e373b 100644
--- a/packages/Shell/src/com/android/shell/BugreportProgressService.java
+++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java
@@ -28,7 +28,6 @@
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.NumberFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.zip.ZipEntry;
@@ -41,6 +40,7 @@
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Notification;
+import android.app.Notification.Action;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
@@ -98,6 +98,7 @@
static final String INTENT_BUGREPORT_STARTED = "android.intent.action.BUGREPORT_STARTED";
static final String INTENT_BUGREPORT_FINISHED = "android.intent.action.BUGREPORT_FINISHED";
+ static final String INTENT_BUGREPORT_CANCEL = "android.intent.action.BUGREPORT_CANCEL";
static final String EXTRA_BUGREPORT = "android.intent.extra.BUGREPORT";
static final String EXTRA_SCREENSHOT = "android.intent.extra.SCREENSHOT";
@@ -115,8 +116,14 @@
/** How long (in ms) a dumpstate process will be monitored if it didn't show progress. */
private static final long INACTIVITY_TIMEOUT = 3 * DateUtils.MINUTE_IN_MILLIS;
- /** System property used for monitoring progress. */
- private static final String PROGRESS_PROPERTY_TEMPLATE = "dumpstate.%d.progress";
+ /** System properties used for monitoring progress. */
+ private static final String DUMPSTATE_PREFIX = "dumpstate.";
+ private static final String PROGRESS_SUFFIX = ".progress";
+ private static final String MAX_SUFFIX = ".max";
+
+ /** System property (and value) used for stop dumpstate. */
+ private static final String CTL_STOP = "ctl.stop";
+ private static final String BUGREPORT_SERVICE = "bugreportplus";
/** Managed dumpstate processes (keyed by pid) */
private final SparseArray<BugreportInfo> mProcesses = new SparseArray<>();
@@ -173,13 +180,13 @@
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
- pollProgress();
+ poll();
}
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_POLL) {
- pollProgress();
+ poll();
return;
}
@@ -226,6 +233,9 @@
}
stopProgress(pid, intent);
break;
+ case INTENT_BUGREPORT_CANCEL:
+ cancel(pid);
+ break;
default:
Log.w(TAG, "Unsupported intent: " + action);
}
@@ -233,160 +243,191 @@
}
- /**
- * Creates the {@link BugreportInfo} for a process and issue a system notification to
- * indicate its progress.
- *
- * @return whether it succeeded or not.
- */
- private boolean startProgress(String name, int pid, int max) {
- if (name == null) {
- Log.w(TAG, "Missing " + EXTRA_NAME + " on start intent");
- name = "N/A";
- }
- if (pid == -1) {
- Log.e(TAG, "Missing " + EXTRA_PID + " on start intent");
- return false;
- }
- if (max <= 0) {
- Log.e(TAG, "Invalid value for extra " + EXTRA_MAX + ": " + max);
- return false;
- }
-
- final BugreportInfo info = new BugreportInfo(pid, name, max);
- synchronized (mProcesses) {
- if (mProcesses.indexOfKey(pid) >= 0) {
- Log.w(TAG, "PID " + pid + " already watched");
- } else {
- mProcesses.put(info.pid, info);
- }
- }
- updateProgress(info);
- return true;
- }
-
- /**
- * Updates the system notification for a given bug report.
- */
- private void updateProgress(BugreportInfo info) {
- if (info.max <= 0 || info.progress < 0 || info.name == null) {
- Log.e(TAG, "Invalid progress values for " + info);
- return;
- }
-
- final Context context = getApplicationContext();
- final NumberFormat nf = NumberFormat.getPercentInstance();
- nf.setMinimumFractionDigits(2);
- nf.setMaximumFractionDigits(2);
- final String percentText = nf.format((double) info.progress / info.max);
-
- final String title = context.getString(R.string.bugreport_in_progress_title);
- final Notification notification = new Notification.Builder(context)
- .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
- .setContentTitle(title)
- .setTicker(title)
- .setContentText(info.name)
- .setContentInfo(percentText)
- .setProgress(info.max, info.progress, false)
- // TODO: .setOngoing(true) once it has a CANCEL action
- .setLocalOnly(true)
- .setColor(context.getColor(
- com.android.internal.R.color.system_notification_accent_color))
- .build();
-
- NotificationManager.from(context).notify(TAG, info.pid, notification);
- }
-
- /**
- * Finalizes the progress on a given process and sends the finished intent.
- */
- private void stopProgress(int pid, Intent intent) {
- synchronized (mProcesses) {
- if (mProcesses.indexOfKey(pid) < 0) {
- Log.w(TAG, "PID not watched: " + pid);
- } else {
- mProcesses.remove(pid);
- }
- stopSelfWhenDone();
- }
- if (DEBUG) Log.v(TAG, "stopProgress(" + pid + "): cancel notification");
- NotificationManager.from(getApplicationContext()).cancel(TAG, pid);
- if (intent != null) {
- // Bug report finished fine: send a new, different notification.
- if (DEBUG) Log.v(TAG, "stopProgress(" + pid + "): finish bug report");
- onBugreportFinished(pid, intent);
- }
- }
-
- /**
- * Poll {@link SystemProperties} to get the progress on each monitored process.
- */
- private void pollProgress() {
- synchronized (mProcesses) {
- if (mProcesses.size() == 0) {
- Log.d(TAG, "No process to poll progress.");
- }
- for (int i = 0; i < mProcesses.size(); i++) {
- int pid = mProcesses.keyAt(i);
- String property = String.format(PROGRESS_PROPERTY_TEMPLATE, pid);
- int progress;
- try {
- progress = SystemProperties.getInt(property, 0);
- } catch (IllegalArgumentException e) {
- Log.v(TAG, "Could not read system property " + property, e);
- continue;
- }
- if (progress == 0) {
- Log.v(TAG, "System property " + property + " is not set yet");
- continue;
- }
-
- BugreportInfo info = mProcesses.valueAt(i);
-
- if (progress != info.progress) {
- if (DEBUG) Log.v(TAG, "Updating progress for PID " + pid + " from "
- + info.progress + " to " + progress);
- info.progress = progress;
- info.lastUpdate = System.currentTimeMillis();
- updateProgress(info);
- } else {
- long inactiveTime = System.currentTimeMillis() - info.lastUpdate;
- if (inactiveTime >= INACTIVITY_TIMEOUT) {
- Log.w(TAG, "No progress update for process " + pid + " since "
- + info.getFormattedLastUpdate());
- stopProgress(info.pid, null);
- }
- }
- }
+ private void poll() {
+ if (pollProgress()) {
// Keep polling...
sendEmptyMessageDelayed(MSG_POLL, POLLING_FREQUENCY);
}
}
+ }
- /**
- * Finishes the service when it's not monitoring any more processes.
- */
- private void stopSelfWhenDone() {
- synchronized (mProcesses) {
- if (mProcesses.size() > 0) {
- if (DEBUG) Log.v(TAG, "Staying alive, waiting for pids " + mProcesses);
- return;
- }
- Log.v(TAG, "No more pids to handle, shutting down");
- stopSelf();
- }
+ /**
+ * Creates the {@link BugreportInfo} for a process and issue a system notification to
+ * indicate its progress.
+ *
+ * @return whether it succeeded or not.
+ */
+ private boolean startProgress(String name, int pid, int max) {
+ if (name == null) {
+ Log.w(TAG, "Missing " + EXTRA_NAME + " on start intent");
+ }
+ if (pid == -1) {
+ Log.e(TAG, "Missing " + EXTRA_PID + " on start intent");
+ return false;
+ }
+ if (max <= 0) {
+ Log.e(TAG, "Invalid value for extra " + EXTRA_MAX + ": " + max);
+ return false;
}
- private void onBugreportFinished(int pid, Intent intent) {
- final Context context = getApplicationContext();
- final Configuration conf = context.getResources().getConfiguration();
- final File bugreportFile = getFileExtra(intent, EXTRA_BUGREPORT);
- final File screenshotFile = getFileExtra(intent, EXTRA_SCREENSHOT);
-
- if ((conf.uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_WATCH) {
- triggerLocalNotification(context, pid, bugreportFile, screenshotFile);
+ final BugreportInfo info = new BugreportInfo(getApplicationContext(), pid, name, max);
+ synchronized (mProcesses) {
+ if (mProcesses.indexOfKey(pid) >= 0) {
+ Log.w(TAG, "PID " + pid + " already watched");
+ } else {
+ mProcesses.put(info.pid, info);
}
}
+ updateProgress(info);
+ return true;
+ }
+
+ /**
+ * Updates the system notification for a given bug report.
+ */
+ private void updateProgress(BugreportInfo info) {
+ if (info.max <= 0 || info.progress < 0) {
+ Log.e(TAG, "Invalid progress values for " + info);
+ return;
+ }
+
+ final Context context = getApplicationContext();
+ final NumberFormat nf = NumberFormat.getPercentInstance();
+ nf.setMinimumFractionDigits(2);
+ nf.setMaximumFractionDigits(2);
+ final String percentText = nf.format((double) info.progress / info.max);
+
+ final Intent cancelIntent = new Intent(context, BugreportReceiver.class);
+ cancelIntent.setAction(INTENT_BUGREPORT_CANCEL);
+ cancelIntent.putExtra(EXTRA_PID, info.pid);
+ final Action cancelAction = new Action.Builder(null,
+ context.getString(com.android.internal.R.string.cancel),
+ PendingIntent.getBroadcast(context, info.pid, cancelIntent,
+ PendingIntent.FLAG_CANCEL_CURRENT)).build();
+
+ final String title = context.getString(R.string.bugreport_in_progress_title);
+ final String name =
+ info.name != null ? info.name : context.getString(R.string.bugreport_unnamed);
+
+ final Notification notification = new Notification.Builder(context)
+ .setSmallIcon(com.android.internal.R.drawable.stat_sys_adb)
+ .setContentTitle(title)
+ .setTicker(title)
+ .setContentText(name)
+ .setContentInfo(percentText)
+ .setProgress(info.max, info.progress, false)
+ .setOngoing(true)
+ .setLocalOnly(true)
+ .setColor(context.getColor(
+ com.android.internal.R.color.system_notification_accent_color))
+ .addAction(cancelAction)
+ .build();
+
+ NotificationManager.from(context).notify(TAG, info.pid, notification);
+ }
+
+ /**
+ * Finalizes the progress on a given process and sends the finished intent.
+ */
+ private void stopProgress(int pid, Intent intent) {
+ synchronized (mProcesses) {
+ if (mProcesses.indexOfKey(pid) < 0) {
+ Log.w(TAG, "PID not watched: " + pid);
+ } else {
+ mProcesses.remove(pid);
+ }
+ stopSelfWhenDone();
+ }
+ if (DEBUG) Log.v(TAG, "stopProgress(" + pid + "): cancel notification");
+ NotificationManager.from(getApplicationContext()).cancel(TAG, pid);
+ if (intent != null) {
+ // Bug report finished fine: send a new, different notification.
+ if (DEBUG) Log.v(TAG, "stopProgress(" + pid + "): finish bug report");
+ onBugreportFinished(pid, intent);
+ }
+ }
+
+ /**
+ * Cancels a bugreport upon user's request.
+ */
+ private void cancel(int pid) {
+ Log.i(TAG, "Cancelling PID " + pid + " on user's request");
+ SystemProperties.set(CTL_STOP, BUGREPORT_SERVICE);
+ stopProgress(pid, null);
+ }
+
+ /**
+ * Poll {@link SystemProperties} to get the progress on each monitored process.
+ *
+ * @return whether it should keep polling.
+ */
+ private boolean pollProgress() {
+ synchronized (mProcesses) {
+ if (mProcesses.size() == 0) {
+ Log.d(TAG, "No process to poll progress.");
+ }
+ for (int i = 0; i < mProcesses.size(); i++) {
+ final int pid = mProcesses.keyAt(i);
+ final String progressKey = DUMPSTATE_PREFIX + pid + PROGRESS_SUFFIX;
+ final int progress = SystemProperties.getInt(progressKey, 0);
+ if (progress == 0) {
+ Log.v(TAG, "System property " + progressKey + " is not set yet");
+ continue;
+ }
+ final int max = SystemProperties.getInt(DUMPSTATE_PREFIX + pid + MAX_SUFFIX, 0);
+ final BugreportInfo info = mProcesses.valueAt(i);
+ final boolean maxChanged = max > 0 && max != info.max;
+ final boolean progressChanged = progress > 0 && progress != info.progress;
+
+ if (progressChanged || maxChanged) {
+ if (progressChanged) {
+ if (DEBUG) Log.v(TAG, "Updating progress for PID " + pid + " from "
+ + info.progress + " to " + progress);
+ info.progress = progress;
+ }
+ if (maxChanged) {
+ Log.i(TAG, "Updating max progress for PID " + pid + " from " + info.max
+ + " to " + max);
+ info.max = max;
+ }
+ info.lastUpdate = System.currentTimeMillis();
+ updateProgress(info);
+ } else {
+ long inactiveTime = System.currentTimeMillis() - info.lastUpdate;
+ if (inactiveTime >= INACTIVITY_TIMEOUT) {
+ Log.w(TAG, "No progress update for process " + pid + " since "
+ + info.getFormattedLastUpdate());
+ stopProgress(info.pid, null);
+ }
+ }
+ }
+ return true;
+ }
+ }
+
+ /**
+ * Finishes the service when it's not monitoring any more processes.
+ */
+ private void stopSelfWhenDone() {
+ synchronized (mProcesses) {
+ if (mProcesses.size() > 0) {
+ if (DEBUG) Log.v(TAG, "Staying alive, waiting for pids " + mProcesses);
+ return;
+ }
+ Log.v(TAG, "No more pids to handle, shutting down");
+ stopSelf();
+ }
+ }
+
+ private void onBugreportFinished(int pid, Intent intent) {
+ final Context context = getApplicationContext();
+ final Configuration conf = context.getResources().getConfiguration();
+ final File bugreportFile = getFileExtra(intent, EXTRA_BUGREPORT);
+ final File screenshotFile = getFileExtra(intent, EXTRA_SCREENSHOT);
+
+ if ((conf.uiMode & Configuration.UI_MODE_TYPE_MASK) != Configuration.UI_MODE_TYPE_WATCH) {
+ triggerLocalNotification(context, pid, bugreportFile, screenshotFile);
+ }
}
/**
@@ -591,6 +632,8 @@
* Information about a bug report process while its in progress.
*/
private static final class BugreportInfo {
+ private final Context context;
+
/**
* {@code pid} of the {@code dumpstate} process generating the bug report.
*/
@@ -602,12 +645,12 @@
* Initial value is the bug report filename reported by {@code dumpstate}, but user can
* change it later to a more meaningful name.
*/
- final String name;
+ String name;
/**
* Maximum progress of the bug report generation.
*/
- final int max;
+ int max;
/**
* Current progress of the bug report generation.
@@ -619,22 +662,23 @@
*/
long lastUpdate = System.currentTimeMillis();
- BugreportInfo(int pid, String name, int max) {
+ BugreportInfo(Context context, int pid, String name, int max) {
+ this.context = context;
this.pid = pid;
this.name = name;
this.max = max;
}
String getFormattedLastUpdate() {
- return SimpleDateFormat.getDateTimeInstance().format(new Date(lastUpdate));
+ return DateUtils.formatDateTime(context, lastUpdate,
+ DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_TIME);
}
@Override
public String toString() {
final float percent = ((float) progress * 100 / max);
- return String.format("Progress for %s (pid=%d): %d/%d (%2.2f%%) Last update: %s", name,
- pid, progress, max, percent,
- getFormattedLastUpdate());
+ return "Progress for " + name + " (pid=" + pid + "): " + progress + "/" + max
+ + " (" + percent + "%) Last update: " + getFormattedLastUpdate();
}
}
}
diff --git a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
index 33c4ef1..44018a0 100644
--- a/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
+++ b/packages/Shell/tests/src/com/android/shell/BugreportReceiverTest.java
@@ -40,6 +40,8 @@
import java.util.zip.ZipOutputStream;
import libcore.io.Streams;
+import android.app.ActivityManager;
+import android.app.ActivityManager.RunningServiceInfo;
import android.app.Instrumentation;
import android.app.NotificationManager;
import android.content.Context;
@@ -49,6 +51,7 @@
import android.os.SystemProperties;
import android.service.notification.StatusBarNotification;
import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject;
import android.test.InstrumentationTestCase;
import android.util.Log;
@@ -68,8 +71,7 @@
* <li>asserts the extras received by the custom activity
* </ul>
* <p>
- * TODO: currently, these tests only work if the bug report sharing warning is disabled and the
- * device screen is unlocked.
+ * <strong>NOTE</strong>: these tests only work if the device is unlocked.
*/
public class BugreportReceiverTest extends InstrumentationTestCase {
@@ -99,12 +101,14 @@
mUiBot = new UiBot(UiDevice.getInstance(instrumentation), TIMEOUT);
mListener = ActionSendMultipleConsumerActivity.getListener(mContext);
cancelExistingNotifications();
+ BugreportPrefs.setWarningState(mContext, BugreportPrefs.STATE_HIDE);
}
public void testFullWorkflow() throws Exception {
final String name = "BUG, Y U NO REPORT?";
// TODO: call method to remove property instead
- SystemProperties.set("dumpstate.42.progress", "-1");
+ SystemProperties.set("dumpstate.42.progress", "0");
+ SystemProperties.set("dumpstate.42.max", "0");
Intent intent = new Intent(INTENT_BUGREPORT_STARTED);
intent.putExtra(EXTRA_PID, 42);
@@ -120,12 +124,46 @@
SystemProperties.set("dumpstate.42.progress", "500");
assertProgressNotification(name, "50.00%");
+ SystemProperties.set("dumpstate.42.max", "2000");
+ assertProgressNotification(name, "25.00%");
+
createTextFile(PLAIN_TEXT_PATH, BUGREPORT_CONTENT);
createTextFile(SCREENSHOT_PATH, SCREENSHOT_CONTENT);
Bundle extras = sendBugreportFinishedIntent(42, PLAIN_TEXT_PATH, SCREENSHOT_PATH);
assertActionSendMultiple(extras, BUGREPORT_CONTENT, SCREENSHOT_CONTENT);
- // TODO: assert service is down
+ String service = BugreportProgressService.class.getName();
+ assertFalse("Service '" + service + "' is still running", isServiceRunning(service));
+ }
+
+ public void testBugreportFinished_withWarning() throws Exception {
+ // Explicitly shows the warning.
+ BugreportPrefs.setWarningState(mContext, BugreportPrefs.STATE_SHOW);
+
+ // Send notification and click on share.
+ createTextFile(PLAIN_TEXT_PATH, BUGREPORT_CONTENT);
+ Intent intent = new Intent(INTENT_BUGREPORT_FINISHED);
+ intent.putExtra(EXTRA_BUGREPORT, PLAIN_TEXT_PATH);
+ mContext.sendBroadcast(intent);
+ mUiBot.clickOnNotification(mContext.getString(R.string.bugreport_finished_title));
+
+ // Handle the warning
+ mUiBot.getVisibleObject(mContext.getString(R.string.bugreport_confirm));
+ // TODO: get ok and showMessageAgain from the dialog reference above
+ UiObject showMessageAgain =
+ mUiBot.getVisibleObject(mContext.getString(R.string.bugreport_confirm_repeat));
+ mUiBot.click(showMessageAgain, "show-message-again");
+ UiObject ok = mUiBot.getVisibleObject(mContext.getString(com.android.internal.R.string.ok));
+ mUiBot.click(ok, "ok");
+
+ // Share the bugreport.
+ mUiBot.chooseActivity(UI_NAME);
+ Bundle extras = mListener.getExtras();
+ assertActionSendMultiple(extras, BUGREPORT_CONTENT, null);
+
+ // Make sure it's hidden now.
+ int newState = BugreportPrefs.getWarningState(mContext, BugreportPrefs.STATE_UNKNOWN);
+ assertEquals("Didn't change state", BugreportPrefs.STATE_HIDE, newState);
}
public void testBugreportFinished_plainBugreportAndScreenshot() throws Exception {
@@ -271,6 +309,17 @@
fail("Did not find entry '" + entryName + "' on file '" + uri + "'");
}
+ private boolean isServiceRunning(String name) {
+ ActivityManager manager = (ActivityManager) mContext
+ .getSystemService(Context.ACTIVITY_SERVICE);
+ for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
+ if (service.service.getClassName().equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private static void createTextFile(String path, String content) throws IOException {
Log.v(TAG, "createFile(" + path + ")");
try (Writer writer = new BufferedWriter(new OutputStreamWriter(
diff --git a/packages/Shell/tests/src/com/android/shell/UiBot.java b/packages/Shell/tests/src/com/android/shell/UiBot.java
index fa1714e..7d37137 100644
--- a/packages/Shell/tests/src/com/android/shell/UiBot.java
+++ b/packages/Shell/tests/src/com/android/shell/UiBot.java
@@ -20,6 +20,7 @@
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObjectNotFoundException;
+import android.support.test.uiautomator.UiScrollable;
import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.util.Log;
@@ -116,21 +117,28 @@
*/
// TODO: UI Automator should provide such logic.
public void chooseActivity(String name) {
- // First select activity if it's not the default option.
- boolean gotIt = mDevice.wait(Until.hasObject(By.text(name)), mTimeout);
- // TODO: if the activity is indeed the default option, call above will timeout, which will
- // make the tests run slower. It might be better to change the logic to assume the default
- // first.
+ // First check if the activity is the default option.
+ String shareText = "Share with " + name;
+ Log.v(TAG, "Waiting for ActivityChooser text: '" + shareText + "'");
+ boolean gotIt = mDevice.wait(Until.hasObject(By.text(shareText)), mTimeout);
+
if (gotIt) {
- Log.v(TAG, "Found activity " + name + ", it's not default action");
- UiObject activityChooser = getVisibleObject(name);
- click(activityChooser, "activity chooser");
+ Log.v(TAG, "Found activity " + name + ", it's the default action");
} else {
- String text = String.format("Share with %s", name);
- Log.v(TAG, "Didn't find activity " + name
- + ", assuming it's the default action and search for '" + text + "'");
- gotIt = mDevice.wait(Until.hasObject(By.text(text)), mTimeout);
- assertTrue("did not find text '" + text + "'", gotIt);
+ // Since it's not, need to find it in the scrollable list...
+ Log.v(TAG, "Activity " + name + " is not default action");
+ UiScrollable activitiesList = new UiScrollable(new UiSelector().scrollable(true));
+
+ UiObject activity;
+ try {
+ activitiesList.scrollForward();
+ activity = getVisibleObject(name);
+ } catch (UiObjectNotFoundException e) {
+ throw new IllegalStateException("didn't find activity '" + name
+ + "' on activities chooser", e);
+ }
+ // ... then select it.
+ click(activity, name);
}
// Then clicks the "Just Once" button.
diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk
index ece34fb..eb63e5d 100644
--- a/packages/SystemUI/Android.mk
+++ b/packages/SystemUI/Android.mk
@@ -21,8 +21,11 @@
LOCAL_RESOURCE_DIR := \
frameworks/base/packages/Keyguard/res \
- $(LOCAL_PATH)/res
-LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguard
+ $(LOCAL_PATH)/res \
+ frameworks/support/v7/recyclerview/res
+
+LOCAL_AAPT_FLAGS := --auto-add-overlay \
+ --extra-packages com.android.keyguard:android.support.v7.recyclerview
ifneq ($(SYSTEM_UI_INCREMENTAL_BUILDS),)
LOCAL_PROGUARD_ENABLED := disabled
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 2f79adf..2e65656 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -180,13 +180,6 @@
</intent-filter>
</receiver>
- <receiver android:name=".qs.tiles.HotspotTile$APChangedReceiver"
- androidprv:systemUserOnly="true">
- <intent-filter>
- <action android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
- </intent-filter>
- </receiver>
-
<activity android:name=".tuner.TunerActivity"
android:enabled="false"
android:icon="@drawable/tuner"
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_cross_1.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_cross_1.xml
new file mode 100644
index 0000000..661ab08
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_cross_1.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="pathData"
+ android:valueFrom="M 7.54049682617,3.9430847168 c 0.0,0.0 0.324981689453,0.399978637695 0.324981689453,0.399978637695 "
+ android:valueTo="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+ android:valueType="pathType"
+ android:interpolator="@interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator" />
+ <objectAnimator
+ android:duration="17"
+ android:propertyName="strokeAlpha"
+ android:valueFrom="0"
+ android:valueTo="1"
+ android:interpolator="@android:interpolator/linear" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_mask.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_mask.xml
new file mode 100644
index 0000000..1199442
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_mask.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="pathData"
+ android:valueFrom="M 37.8337860107,-40.4599914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 9.55097961426,9.55285644531 9.55097961426,9.55285644531 c 0.0,0.0 -2.61698913574,2.09387207031 -2.61698913574,2.09387207031 c 0.0,0.0 -9.75096130371,-9.56428527832 -9.75096130371,-9.56428527832 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+ android:valueTo="M 37.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,40.9278411865 40.9884796143,40.9278411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-40.9392852783 -41.1884460449,-40.9392852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+ android:valueType="pathType"
+ android:interpolator="@android:interpolator/fast_out_slow_in" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml
new file mode 100644
index 0000000..72834c9
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_disable_animation_root.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="alpha"
+ android:valueFrom="1.0"
+ android:valueTo="0.3"
+ android:interpolator="@android:interpolator/fast_out_slow_in" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml
new file mode 100644
index 0000000..6c7e751
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_cross_1.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="pathData"
+ android:valueFrom="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+ android:valueTo="M 7.54049682617,3.9430847168 c 0.0,0.0 0.324981689453,0.399978637695 0.324981689453,0.399978637695 "
+ android:valueType="pathType"
+ android:interpolator="@interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator" />
+ <set
+ android:ordering="sequentially" >
+ <objectAnimator
+ android:duration="333"
+ android:propertyName="strokeAlpha"
+ android:valueFrom="1"
+ android:valueTo="1"
+ android:interpolator="@android:interpolator/linear" />
+ <objectAnimator
+ android:duration="17"
+ android:propertyName="strokeAlpha"
+ android:valueFrom="1"
+ android:valueTo="0"
+ android:interpolator="@android:interpolator/linear" />
+ </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml
new file mode 100644
index 0000000..c699fe2
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_ic_signal_briefcase.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <set
+ android:ordering="sequentially" >
+ <objectAnimator
+ android:duration="200"
+ android:propertyName="alpha"
+ android:valueFrom="0.5"
+ android:valueTo="0.5"
+ android:interpolator="@android:interpolator/fast_out_slow_in" />
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="alpha"
+ android:valueFrom="0.5"
+ android:valueTo="1"
+ android:interpolator="@android:interpolator/fast_out_slow_in" />
+ </set>
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml
new file mode 100644
index 0000000..5595e5c
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_mask.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="pathData"
+ android:valueFrom="M 37.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,40.9278411865 40.9884796143,40.9278411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-40.9392852783 -41.1884460449,-40.9392852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+ android:valueTo="M 37.8337860107,-40.4599914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 9.55097961426,9.55285644531 9.55097961426,9.55285644531 c 0.0,0.0 -2.61698913574,2.09387207031 -2.61698913574,2.09387207031 c 0.0,0.0 -9.75096130371,-9.56428527832 -9.75096130371,-9.56428527832 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z"
+ android:valueType="pathType"
+ android:interpolator="@interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator" />
+</set>
diff --git a/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml
new file mode 100644
index 0000000..85573e0
--- /dev/null
+++ b/packages/SystemUI/res/anim/ic_signal_workmode_enable_animation_root.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<set xmlns:android="http://schemas.android.com/apk/res/android" >
+ <objectAnimator
+ android:duration="350"
+ android:propertyName="alpha"
+ android:valueFrom="0.3"
+ android:valueTo="1.0"
+ android:interpolator="@android:interpolator/fast_out_slow_in" />
+</set>
diff --git a/packages/SystemUI/res/drawable/docked_divider_handle.xml b/packages/SystemUI/res/drawable/docked_divider_handle.xml
index ea32548..84c0343 100644
--- a/packages/SystemUI/res/drawable/docked_divider_handle.xml
+++ b/packages/SystemUI/res/drawable/docked_divider_handle.xml
@@ -17,6 +17,6 @@
android:shape="rectangle">
<size android:height="@dimen/docked_divider_handle_height"
android:width="@dimen/docked_divider_handle_width" />
- <corners radius="1dp" />
+ <corners android:radius="1dp" />
<solid android:color="@color/docked_divider_handle" />
</shape>
\ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/header_dot.xml b/packages/SystemUI/res/drawable/header_dot.xml
new file mode 100644
index 0000000..568a9c2
--- /dev/null
+++ b/packages/SystemUI/res/drawable/header_dot.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+** Copyright 2015, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+-->
+<shape
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+
+ <solid
+ android:color="#FFFFFF"/>
+
+ <size
+ android:width="3dp"
+ android:height="3dp"/>
+</shape>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml
new file mode 100644
index 0000000..1feb49c
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_disable.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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:name="root"
+ android:alpha="1.0"
+ android:height="42dp"
+ android:width="42dp"
+ android:viewportHeight="42"
+ android:viewportWidth="42" >
+ <group
+ android:name="ic_signal_briefcase"
+ android:translateX="21.9995"
+ android:translateY="25.73401" >
+ <group
+ android:name="ic_signal_briefcase_pivot"
+ android:translateX="-23.21545"
+ android:translateY="-18.86649" >
+ <clip-path
+ android:name="mask"
+ android:pathData="M 37.8337860107,-40.4599914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 9.55097961426,9.55285644531 9.55097961426,9.55285644531 c 0.0,0.0 -2.61698913574,2.09387207031 -2.61698913574,2.09387207031 c 0.0,0.0 -9.75096130371,-9.56428527832 -9.75096130371,-9.56428527832 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
+ <group
+ android:name="cross" >
+ <path
+ android:name="cross_1"
+ android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 0.324981689453,0.399978637695 0.324981689453,0.399978637695 "
+ android:strokeColor="#FFFFFFFF"
+ android:strokeAlpha="0"
+ android:strokeWidth="3.5"
+ android:fillColor="#00000000" />
+ </group>
+ <group
+ android:name="briefcase"
+ android:translateX="23.481"
+ android:translateY="18.71151" >
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M-4.83333,-14.3333 L-7.16667,-11.8333 L-7.16667,-9.5 L-4.83333,-9.5 L-4.83333,-11.8333 L4.83333,-11.8333 L4.83333,-9.5 L7.16667,-9.5 L7.16667,-11.8333 L4.83333,-14.3333 Z" />
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M13.1667,-9.5 L-13.1667,-9.5 C-14.5,-9.5,-15.5,-8.5,-15.5,-7.16666 L-15.5,0.00000286102 C-15.5,1.33334,-14.5,2.33334,-13.1667,2.33334 L-3.66667,2.33334 L-3.66667,0.00000286102 L3.5,0.00000286102 L3.5,2.33334 L13,2.33334 C14.3333,2.33334,15.3333,1.33334,15.3333,0 L15.3333,-7.16666 C15.5,-8.5,14.3333,-9.5,13.1667,-9.5 Z" />
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M-3.5,7.16667 L-3.5,4.83334 L-14.3333,4.83334 L-14.3333,10.8333 C-14.3333,12.1667,-13.3333,13.1667,-12,13.1667 L11.8333,13.1667 C13.1667,13.1667,14.1667,12.1667,14.1667,10.8333 L14.1667,4.83334 L3.5,4.83334 L3.5,7.16667 L-3.5,7.16667 Z" />
+ </group>
+ </group>
+ </group>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
new file mode 100644
index 0000000..a15a127
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_disable_animation.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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.
+-->
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:drawable="@drawable/ic_signal_workmode_disable" >
+ <target
+ android:name="root"
+ android:animation="@anim/ic_signal_workmode_disable_animation_root" />
+ <target
+ android:name="mask"
+ android:animation="@anim/ic_signal_workmode_disable_animation_mask" />
+ <target
+ android:name="cross_1"
+ android:animation="@anim/ic_signal_workmode_disable_animation_cross_1" />
+</animated-vector>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
new file mode 100644
index 0000000..ad14505
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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:name="root"
+ android:alpha="0.3"
+ android:height="42dp"
+ android:width="42dp"
+ android:viewportHeight="42"
+ android:viewportWidth="42" >
+ <group
+ android:name="ic_signal_briefcase"
+ android:translateX="21.9995"
+ android:translateY="25.73401" >
+ <group
+ android:name="ic_signal_briefcase_pivot"
+ android:translateX="-23.21545"
+ android:translateY="-18.86649" >
+ <clip-path
+ android:name="mask"
+ android:pathData="M 37.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,40.9278411865 40.9884796143,40.9278411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-40.9392852783 -41.1884460449,-40.9392852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
+ <group
+ android:name="cross" >
+ <path
+ android:name="cross_1"
+ android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+ android:strokeColor="#FFFFFFFF"
+ android:strokeAlpha="1"
+ android:strokeWidth="3.5"
+ android:fillColor="#00000000" />
+ </group>
+ <group
+ android:name="briefcase"
+ android:translateX="23.481"
+ android:translateY="18.71151" >
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M-4.83333,-14.3333 L-7.16667,-11.8333 L-7.16667,-9.5 L-4.83333,-9.5 L-4.83333,-11.8333 L4.83333,-11.8333 L4.83333,-9.5 L7.16667,-9.5 L7.16667,-11.8333 L4.83333,-14.3333 Z" />
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M13.1667,-9.5 L-13.1667,-9.5 C-14.5,-9.5,-15.5,-8.5,-15.5,-7.16666 L-15.5,0.00000286102 C-15.5,1.33334,-14.5,2.33334,-13.1667,2.33334 L-3.66667,2.33334 L-3.66667,0.00000286102 L3.5,0.00000286102 L3.5,2.33334 L13,2.33334 C14.3333,2.33334,15.3333,1.33334,15.3333,0 L15.3333,-7.16666 C15.5,-8.5,14.3333,-9.5,13.1667,-9.5 Z" />
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:fillAlpha="1"
+ android:pathData="M-3.5,7.16667 L-3.5,4.83334 L-14.3333,4.83334 L-14.3333,10.8333 C-14.3333,12.1667,-13.3333,13.1667,-12,13.1667 L11.8333,13.1667 C13.1667,13.1667,14.1667,12.1667,14.1667,10.8333 L14.1667,4.83334 L3.5,4.83334 L3.5,7.16667 L-3.5,7.16667 Z" />
+ </group>
+ </group>
+ </group>
+</vector>
diff --git a/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
new file mode 100644
index 0000000..41d2b42
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_signal_workmode_enable_animation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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.
+-->
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:drawable="@drawable/ic_signal_workmode_enable" >
+ <target
+ android:name="root"
+ android:animation="@anim/ic_signal_workmode_enable_animation_root" />
+ <target
+ android:name="ic_signal_briefcase"
+ android:animation="@anim/ic_signal_workmode_enable_animation_ic_signal_briefcase" />
+ <target
+ android:name="mask"
+ android:animation="@anim/ic_signal_workmode_enable_animation_mask" />
+ <target
+ android:name="cross_1"
+ android:animation="@anim/ic_signal_workmode_enable_animation_cross_1" />
+</animated-vector>
diff --git a/core/res/res/drawable/ic_arrow_up_14dp.xml b/packages/SystemUI/res/drawable/quick_header_bg.xml
similarity index 60%
rename from core/res/res/drawable/ic_arrow_up_14dp.xml
rename to packages/SystemUI/res/drawable/quick_header_bg.xml
index c4cc0d1..d45d673 100644
--- a/core/res/res/drawable/ic_arrow_up_14dp.xml
+++ b/packages/SystemUI/res/drawable/quick_header_bg.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2015 The Android Open Source Project
~
@@ -13,12 +14,8 @@
~ 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="14.0dp"
- android:height="14.0dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M12.000000,8.000000l-6.000000,6.000000 1.400000,1.400000 4.600000,-4.599999 4.600000,4.599999 1.400000,-1.400000z"
- android:fillColor="#FF000000"/>
-</vector>
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight" >
+ <item android:drawable="@color/system_primary_color"/>
+</ripple>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
new file mode 100644
index 0000000..c6a2fdd
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_disable_animation.xml
@@ -0,0 +1,47 @@
+<!--
+Copyright (C) 2015 The Android Open 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="27.0dp"
+ android:height="22.0dp"
+ android:alpha="0.3"
+ android:viewportWidth="27.0"
+ android:viewportHeight="22.0">
+ <clip-path
+ android:name="mask"
+ android:pathData="M 38.8337860107,-40.3974914551 c 0.0,0.0 -35.8077850342,31.5523681641 -35.8077850342,31.5523681641 c 0.0,0.0 40.9884796143,41.1153411865 40.9884796143,41.1153411865 c 0.0,0.0 -2.61700439453,2.0938873291 -2.61700439453,2.0938873291 c 0.0,0.0 -41.1884460449,-41.1267852783 -41.1884460449,-41.1267852783 c 0.0,0.0 -34.6200408936,25.4699249268 -34.6200408936,25.4699249268 c 0.0,0.0 55.9664764404,69.742401123 55.9664764404,69.742401123 c 0.0,0.0 73.2448120117,-59.1047973633 73.2448120117,-59.1047973633 c 0.0,0.0 -55.9664916992,-69.7423400879 -55.9664916992,-69.7423400879 Z" />
+ <group
+ android:name="cross" >
+ <path
+ android:name="cross_1"
+ android:pathData="M 7.54049682617,3.9430847168 c 0.0,0.0 31.5749816895,31.4499664307 31.5749816895,31.4499664307 "
+ android:strokeColor="#FFFFFFFF"
+ android:strokeAlpha="1"
+ android:strokeWidth="3.5"
+ android:fillColor="#00000000" />
+ </group>
+ <group
+ android:name="work_badge"
+ android:translateX="3.0"
+ android:scaleX="1.4"
+ android:scaleY="1.4">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9.9,11.6H7v-1.1H2.1v2.8c0,0.8,0.6,1.4,1.4,1.4h9.9c0.8,0,1.4,-0.6,1.4,-1.4v-2.8H9.9V11.6z"/>
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M14.1,4.2h-2.5V3.2l-1.1,-1.1H6.3L5.3,3.2v1H2.8C2,4.2,1.4,4.9,1.4,5.6v2.8c0,0.8,0.6,1.4,1.4,1.4H7V8.8h2.8v1.1h4.2 c0.8,0,1.4,-0.6,1.4,-1.4V5.6C15.5,4.9,14.8,4.2,14.1,4.2z M10.6,4.2H6.3V3.2h4.2V4.2z"/>
+ </group>
+</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml
new file mode 100644
index 0000000..d67c89ac
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_enable_animation.xml
@@ -0,0 +1,34 @@
+<!--
+Copyright (C) 2015 The Android Open 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="27.0dp"
+ android:height="22.0dp"
+ android:alpha="1.0"
+ android:viewportWidth="27.0"
+ android:viewportHeight="22.0">
+ <group
+ android:name="work_badge"
+ android:translateX="3.0"
+ android:scaleX="1.4"
+ android:scaleY="1.4">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9.9,11.6H7v-1.1H2.1v2.8c0,0.8,0.6,1.4,1.4,1.4h9.9c0.8,0,1.4,-0.6,1.4,-1.4v-2.8H9.9V11.6z"/>
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M14.1,4.2h-2.5V3.2l-1.1,-1.1H6.3L5.3,3.2v1H2.8C2,4.2,1.4,4.9,1.4,5.6v2.8c0,0.8,0.6,1.4,1.4,1.4H7V8.8h2.8v1.1h4.2 c0.8,0,1.4,-0.6,1.4,-1.4V5.6C15.5,4.9,14.8,4.2,14.1,4.2z M10.6,4.2H6.3V3.2h4.2V4.2z"/>
+ </group>
+</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
index 2bfa39d..370f89c 100644
--- a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status.xml
@@ -14,16 +14,29 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="23.0dp"
- android:height="18.0dp"
- android:viewportWidth="21.0"
- android:viewportHeight="17.0">
- <group android:translateX="2.0">
- <path
- android:fillColor="@android:color/white"
- android:pathData="M9.9,11.6H7v-1.1H2.1v2.8c0,0.8,0.6,1.4,1.4,1.4h9.9c0.8,0,1.4,-0.6,1.4,-1.4v-2.8H9.9V11.6z"/>
- <path
- android:fillColor="@android:color/white"
- android:pathData="M14.1,4.2h-2.5V3.2l-1.1,-1.1H6.3L5.3,3.2v1H2.8C2,4.2,1.4,4.9,1.4,5.6v2.8c0,0.8,0.6,1.4,1.4,1.4H7V8.8h2.8v1.1h4.2 c0.8,0,1.4,-0.6,1.4,-1.4V5.6C15.5,4.9,14.8,4.2,14.1,4.2z M10.6,4.2H6.3V3.2h4.2V4.2z"/>
- </group>
+ android:width="23dp"
+ android:height="18dp"
+ android:viewportWidth="23"
+ android:viewportHeight="18">
+<!--
+ The asset contains a briefcase symbol of 15.26dp x 13.6dp in the center.
+-->
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M15.0815,4.5903 L15.0815,3.43636 L13.9276,2.2 L9.14696,2.2 L7.99302,3.43636
+L7.99302,4.5903 L9.14696,4.5903 L9.14696,3.43636 L13.9276,3.43636
+L13.9276,4.5903 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M18.0488,4.5903 L5.02575,4.5903 C4.36635,4.5903,3.87181,5.08485,3.87181,5.74424
+L3.87181,9.28848 C3.87181,9.94788,4.36635,10.4424,5.02575,10.4424
+L9.72393,10.4424 L9.72393,9.28848 L13.2682,9.28848 L13.2682,10.4424
+L17.9664,10.4424 C18.6257,10.4424,19.1203,9.94788,19.1203,9.28848
+L19.1203,5.74424 C19.2027,5.08485,18.6257,4.5903,18.0488,4.5903 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9.80635,12.8327 L9.80635,11.6788 L4.44878,11.6788 L4.44878,14.6461
+C4.44878,15.3055,4.94332,15.8,5.60272,15.8 L17.3894,15.8
+C18.0488,15.8,18.5433,15.3055,18.5433,14.6461 L18.5433,11.6788 L13.2682,11.6788
+L13.2682,12.8327 L9.80635,12.8327 Z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml
new file mode 100644
index 0000000..35602b6
--- /dev/null
+++ b/packages/SystemUI/res/drawable/stat_sys_managed_profile_status_off.xml
@@ -0,0 +1,53 @@
+<!--
+Copyright (C) 2015 The Android Open 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="23dp"
+ android:height="18dp"
+ android:viewportWidth="23"
+ android:viewportHeight="18">
+<!--
+ The asset contains a briefcase symbol of 15.26dp x 13.6dp in the center.
+-->
+ <path
+ android:pathData="M0,-6 L24,-6 L24,18 L0,18 L0,-6 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M13.9892,11.6542 L13.4088,11.6542 L13.4088,12.8152 L9.843,12.8152 L9.843,11.6542
+L4.4529,11.6542 L4.4529,14.6395 C4.4529,15.3029,4.95045,15.8005,5.61384,15.8005
+L17.4721,15.8005 C17.6379,15.8005,17.8038,15.8005,17.9696,15.7175
+L13.9892,11.6542 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M18.7159,13.8932 L18.7159,11.6542 L16.477,11.6542
+C17.3062,12.4835,18.1355,13.3127,18.7159,13.8932 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M6.85771,4.52272 L5.03337,4.52272
+C4.36998,4.52272,3.87243,5.02027,3.87243,5.68366 L3.87243,9.24942
+C3.87243,9.91282,4.36998,10.4104,5.03337,10.4104 L9.76008,10.4104
+L9.76008,9.24942 L11.5844,9.24942 L6.85771,4.52272 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M9.1796,4.35687 L9.1796,3.36177 L13.9063,3.36177 L13.9063,4.52272
+L9.34545,4.52272 C11.1698,6.34706,13.3258,8.5031,15.2331,10.4104
+L18.0525,10.4104 C18.7159,10.4104,19.2135,9.91282,19.2135,9.24942
+L19.2135,5.68366 C19.2135,5.02027,18.7159,4.52272,18.0525,4.52272
+L15.0673,4.52272 L15.0673,3.36177 L13.9063,2.20083 L9.1796,2.20083
+L8.10158,3.27885 C8.43328,3.61055,8.84791,4.02517,9.1796,4.35687 Z" />
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M3.281,3.42136 L4.51236,2.19 L18.585,16.2626 L17.3536,17.494 L3.281,3.42136 Z" />
+</vector>
\ No newline at end of file
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml
new file mode 100644
index 0000000..66cfaff
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_disable_cross_1_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0,0 c 0.166666667,0 0.2,1 1,1" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml
new file mode 100644
index 0000000..a0118d70
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_cross_1_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0,0 c 0.8,0 0.833333333,1 1,1" />
diff --git a/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml
new file mode 100644
index 0000000..1820bab
--- /dev/null
+++ b/packages/SystemUI/res/interpolator/ic_signal_workmode_enable_mask_pathdata_interpolator.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2015 The Android Open 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.
+-->
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:pathData="M 0,0 c 0.8,0 0.6,1 1,1" />
diff --git a/packages/SystemUI/res/layout/docked_stack_divider.xml b/packages/SystemUI/res/layout/docked_stack_divider.xml
index 5f42856..22ed216 100644
--- a/packages/SystemUI/res/layout/docked_stack_divider.xml
+++ b/packages/SystemUI/res/layout/docked_stack_divider.xml
@@ -27,8 +27,6 @@
<ImageButton
style="@style/DockedDividerHandle"
android:id="@+id/docked_divider_handle"
- android:layout_height="48dp"
- android:layout_width="48dp"
android:background="@null"
android:src="@drawable/docked_divider_handle"/>
diff --git a/packages/SystemUI/res/layout/hybrid_notification.xml b/packages/SystemUI/res/layout/hybrid_notification.xml
index 9e64d2c..f667859 100644
--- a/packages/SystemUI/res/layout/hybrid_notification.xml
+++ b/packages/SystemUI/res/layout/hybrid_notification.xml
@@ -18,21 +18,23 @@
<com.android.systemui.statusbar.notification.HybridNotificationView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="@dimen/notification_max_height">
+ android:layout_height="wrap_content"
+ android:paddingStart="@*android:dimen/notification_content_margin_start"
+ android:paddingEnd="12dp"
+ android:gravity="bottom">
<TextView
android:id="@+id/notification_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
+ android:paddingEnd="4dp"
android:singleLine="true"
android:textAppearance="@*android:style/TextAppearance.Material.Notification.Title"
- android:paddingEnd="4dp"
/>
<TextView
android:id="@+id/notification_text"
- android:layout_width="wrap_content"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
+ android:paddingEnd="4dp"
android:textAppearance="@*android:style/TextAppearance.Material.Notification"
android:singleLine="true"
/>
diff --git a/packages/SystemUI/res/layout/notification_children_divider.xml b/packages/SystemUI/res/layout/notification_children_divider.xml
index f011afe..53273cf 100644
--- a/packages/SystemUI/res/layout/notification_children_divider.xml
+++ b/packages/SystemUI/res/layout/notification_children_divider.xml
@@ -20,4 +20,4 @@
android:id="@+id/notification_more_divider"
android:layout_width="match_parent"
android:layout_height="@dimen/notification_children_divider_height"
- android:background="@*android:drawable/notification_template_divider" />
+ android:background="#61000000" />
diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml
index 1873168..bb37b83 100644
--- a/packages/SystemUI/res/layout/qs_panel.xml
+++ b/packages/SystemUI/res/layout/qs_panel.xml
@@ -19,7 +19,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/qs_background_primary"
- android:paddingTop="8dp"
android:paddingBottom="8dp"
android:elevation="2dp">
diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
index cc35c51c..e949adc 100644
--- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml
@@ -25,21 +25,14 @@
android:layout_gravity="@integer/notification_panel_layout_gravity"
android:paddingStart="@dimen/notification_side_padding"
android:paddingEnd="@dimen/notification_side_padding"
+ android:clipChildren="false"
+ android:clipToPadding="false"
android:baselineAligned="false"
- android:elevation="4dp"
- android:background="@drawable/notification_header_bg"
+ android:background="@drawable/quick_header_bg"
android:clickable="true"
android:focusable="true"
>
- <com.android.systemui.qs.QuickQSPanel
- android:id="@+id/quick_qs_panel"
- android:background="#0000"
- android:layout_width="144dp"
- android:layout_height="match_parent"
- android:layout_alignParentEnd="true"
- android:layout_marginEnd="12dp" />
-
<LinearLayout
android:id="@+id/expanded_group"
android:layout_width="wrap_content"
@@ -49,7 +42,8 @@
android:clipToPadding="false"
android:orientation="horizontal"
android:layout_alignParentEnd="true"
- android:layout_marginEnd="10dp">
+ android:layout_marginTop="30dp"
+ android:layout_marginEnd="16dp">
<com.android.systemui.statusbar.AlphaOptimizedFrameLayout
android:id="@+id/settings_button_container"
@@ -84,49 +78,60 @@
android:tint="@android:color/white" />
</LinearLayout>
- <FrameLayout
- android:id="@+id/date_group"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/clock_collapsed_bottom_margin"
- android:layout_alignParentBottom="true">
- <com.android.systemui.statusbar.policy.DateView android:id="@+id/date_collapsed"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="16dp"
- android:singleLine="true"
- android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
- android:layout_below="@id/clock"
- systemui:datePattern="@string/abbrev_wday_month_day_no_year_alarm"
- />
- </FrameLayout>
-
<include layout="@layout/split_clock_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
- android:layout_above="@id/date_group"
+ android:layout_marginTop="2dp"
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true"
android:id="@+id/clock"
/>
- <com.android.systemui.statusbar.AlphaOptimizedButton android:id="@+id/alarm_status"
+ <com.android.systemui.statusbar.policy.DateView
+ android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_toEndOf="@id/date_group"
- android:layout_marginBottom="4dp"
+ android:layout_marginStart="6dp"
+ android:layout_marginTop="8dp"
+ android:layout_toEndOf="@id/clock"
+ android:layout_alignParentTop="true"
+ android:drawableStart="@drawable/header_dot"
+ android:drawablePadding="6dp"
+ android:singleLine="true"
+ android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
+ android:textSize="@dimen/qs_time_collapsed_size"
+ systemui:datePattern="@string/abbrev_wday_month_day_no_year_alarm"
+ />
+
+ <com.android.systemui.statusbar.AlphaOptimizedButton
+ android:id="@+id/alarm_status"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:layout_toEndOf="@id/date"
android:drawablePadding="6dp"
android:drawableStart="@drawable/ic_access_alarms_small"
android:textColor="#64ffffff"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date"
- android:paddingEnd="6dp"
+ android:minHeight="36dp"
android:paddingStart="6dp"
- android:paddingTop="16dp"
- android:paddingBottom="16dp"
android:background="?android:attr/selectableItemBackground"
android:visibility="gone"
/>
+ <com.android.systemui.qs.QuickQSPanel
+ android:id="@+id/quick_qs_panel"
+ android:background="#0000"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="30dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:layout_alignParentEnd="true"
+ android:clipChildren="false"
+ android:clipToPadding="false" />
+
<include
android:id="@+id/qs_detail_header"
layout="@layout/qs_detail_header"
diff --git a/packages/SystemUI/res/layout/split_clock_view.xml b/packages/SystemUI/res/layout/split_clock_view.xml
index d1269da..ae5136f 100644
--- a/packages/SystemUI/res/layout/split_clock_view.xml
+++ b/packages/SystemUI/res/layout/split_clock_view.xml
@@ -27,6 +27,7 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock"
+ android:textSize="@dimen/qs_time_collapsed_size"
/>
<TextClock
android:id="@+id/am_pm_view"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 7006d43..f3e7cfe 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Luitoestel stil."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Maak <xliff:g id="APP">%s</xliff:g> toe."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwerp."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle onlangse programme is toegemaak."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiele warmkol afgeskakel."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiele warmkol aangeskakel."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Uitsaai van skerm gestaak."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Skermhelderheid"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G-data is laat wag"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data is laat wag"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> gebruik"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g>-limiet"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> waarskuwing"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Jou onlangse skerms verskyn hier"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skermvaspen"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Raak om die oorspronklike terug te stel."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Jy gebruik tans jou werkprofiel"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Stelsel-UI-ontvanger"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Wys persentasie van ingebedde battery"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 948c538..838a4eb 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"የስልክ ጥሪ ፀጥታ።"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> አስወግድ።"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ተሰናብቷል::"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ሁሉም የቅርብ ጊዜ ማመልከቻዎች ተሰናብተዋል።"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"የተንቀሳቃሽ ስልክ መገናኛ ነጥብ ጠፍቷል።"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"የተንቀሳቃሽ ስልክ መገናኛ ነጥብ በርቷል።"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ማያ ገጽ መውሰድ ቆሟል።"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ብሩህነት ያሳዩ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2ጂ-3ጂ ውሂብ ላፍታ ቆሟል"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4ጂ ውሂብ ላፍታ ቆሟል"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ጥቅም ላይ ውሏል"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ገደብ"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"የ<xliff:g id="DATA_LIMIT">%s</xliff:g> ማስጠንቀቂያ"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"የቅርብ ጊዜ ማያ ገጾችዎ እዚህ ይታያሉ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተግበሪያ መረጃ"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ማያ ገጽ መሰካት"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"የመጀመሪያውን ወደነበረበት ለመመለስ ይንኩ።"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"፣"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"የስራ መገለጫዎን እየተጠቀሙ ነው"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"የስርዓት በይነገጽ መቃኛ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"የተቀላቀለ የባትሪ አጠቃቀም መቶኛ አሳይ"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index e272364..2789ffa 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -165,6 +165,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنين صامت."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"إزالة <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"تمت إزالة <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"تم تجاهل كل التطبيقات المستخدمة مؤخرًا."</string>
@@ -216,6 +218,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"تم إيقاف نقطة اتصال الجوّال."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"تم تشغيل نقطة اتصال الجوّال."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"توقف إرسال الشاشة."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"سطوع الشاشة"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"بيانات شبكات الجيل الثاني والثالث متوقفة مؤقتًا"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"تم إيقاف بيانات شبكة الجيل الرابع مؤقتًا"</string>
@@ -293,6 +303,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> مستخدم"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"قيد <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"تحذير <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"تظهر شاشاتك المعروضة مؤخرًا هنا"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"تثبيت الشاشة"</string>
@@ -407,7 +419,8 @@
<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="1826889705095768656">"المس لاستعادة الإعداد الأصلي."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"،"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"أنت تستخدم ملفك الشخصي للعمل"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"أداة ضبط واجهة مستخدم النظام"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"عرض نسبة البطارية المدمجة"</string>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
index 7f2a6b07..652f71c 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zəngvuran səssiz."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> kənarlaşdırın."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> çıxarıldı."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Bütün son tətbiqlər kənarlaşdırıldı."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobil hotspot deaktivdir."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil hotspot aktivdir."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekran yayımı dayandırıldı."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G məlumatlarına fasilə verildi"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G məlumatlarına fasilə verildi"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> işlənib"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> xəbərdarlığı"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Tətbiq haqqında"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekran sancağı"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Orijinalı bərpa etmək üçün toxun."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"İş profilinizi istifadə edirsiniz"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Daxil batareya faizini göstərin"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 6ed2adb..0bbdbe9 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Звънът е заглушен."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Отхвърляне на <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложението <xliff:g id="APP">%s</xliff:g> е отхвърлено."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Всички скорошни приложения са отхвърлени."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобилната точка за достъп се изключи."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилната точка за достъп се включи."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Предаването на съдържанието от екрана спря."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Яркост на екрана"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Данните от 2G – 3G са поставени на пауза"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Данните от 4G са поставени на пауза"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Използвано: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничение от <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Скорошните ви екрани се показват тук"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информация за приложението"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"фиксиране на екрана"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Докоснете, за да възстановите оригинала."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Използвате служебния си потребителски профил"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Тунер на системния потребителски интерфейс"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Показване на процента на вградената батерия"</string>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index 20e2c35..e1c3d5e 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"রিং বাজানো বন্ধ করুন৷"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> খারিজ করুন।"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> খারিজ করা হয়েছে৷"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"সমস্ত সাম্প্রতিক অ্যাপ্লিকেশন খারিজ করা হয়েছে।"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"মোবাইল হটস্পট বন্ধ হয়েছে।"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"মোবাইল হটস্পট চালু হয়েছে।"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"স্ক্রীন কাস্ট করা থেমেছে।"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"প্রদর্শনের উজ্জ্বলতা"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ডেটা বিরতি দেওয়া হয়েছে"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ডেটা বিরতি দেওয়া হয়েছে"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ব্যবহৃত হয়েছে"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"সীমা <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> সতর্কতা"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"আপনার সাম্প্রতিক স্ক্রীনগুলো এখানে দেখা যাবে"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"অ্যাপ্লিকেশানের তথ্য"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"স্ক্রীন পিন করা"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"আসলটি পুনঃস্থাপন করতে স্পর্শ করুন৷"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"আপনি আপনার কাজের প্রোফাইল ব্যবহার করছেন"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"সিস্টেম UI টিউনার"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"এম্বেড করা ব্যাটারির শতকরা হার দেখায়"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 0bb4826..e361ed0 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mode silenci."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignora <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"S\'ha omès <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"S\'han descartat totes les aplicacions recents."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"El punt d\'accés mòbil està desactivat."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"El punt d\'accés mòbil està activat."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"S\'ha aturat l\'emissió de la pantalla."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brillantor de la pantalla"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Les dades 2G-3G estan aturades"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Les dades 4G estan aturades"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Utilitzats: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertiment: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Aquí es mostren les teves pantalles recents."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixació de pantalla"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toca per restaurar l\'original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estàs utilitzant el perfil professional"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Personalitzador d\'interfície d\'usuari"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostra el percentatge de la bateria inserit"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 63a16ad..11a9bbe 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché vyzvánění."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zavřít aplikaci <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikace <xliff:g id="APP">%s</xliff:g> byla odebrána."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všechny naposledy použité aplikace byly odstraněny."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot je vypnutý."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot je zapnutý."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Odesílání obrazovky zastaveno."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Jas displeje"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G a 3G jsou pozastavena"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G jsou pozastavena"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Využito: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornění při <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Zde budou zobrazeny vaše poslední obrazovky"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"připnutí obrazovky"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Klepnutím obnovíte originál."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Používáte pracovní profil"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Nástroj na ladění uživatelského rozhraní systému"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Zobrazovat vložené procento nabití baterie"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index eb8053d..aef1037 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Lydløs."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Afvis <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> er annulleret."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle de seneste applikationer er lukket."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilhotspot er slået fra."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilhotspot er slået til."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Casting af din skærm er stoppet."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Skærmens lysstyrke"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G-data er sat på pause"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er sat på pause"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> brugt"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Grænse: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel ved <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Dine seneste skærme vises her"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"bliv i app"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Tryk for at gendanne originalen."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du bruger din arbejdsprofil"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Vis procent for det indbyggede batteri"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index e156c92..6ba1a8e 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Klingelton lautlos"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> beenden"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> entfernt"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle kürzlich verwendeten Apps wurden entfernt."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Der mobile Hotspot ist deaktiviert."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Der mobile Hotspot ist aktiviert."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Die Bildschirmübertragung wurde angehalten."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Helligkeit des Displays"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-/3G-Daten pausiert"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-Daten pausiert"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> verwendet"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> Datenlimit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Warnung für <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Hier sehen Sie Ihre zuletzt geöffneten Apps."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Bildschirmfixierung"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Zum Wiederherstellen des Originals hier tippen"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"u."</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Sie verwenden Ihr Arbeitsprofil."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Eingebettete Akku-Prozentzahl anzeigen"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index b0dcc40..c9c7efb 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ειδοποίηση ήχου στο αθόρυβο."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Παράβλεψη <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Απορρίφθηκαν <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Έγινε παράβλεψη όλων των πρόσφατων εφαρμογών."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Το σημείο πρόσβασης κινητής συσκευής απενεργοποιήθηκε."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Το σημείο πρόσβασης κινητής συσκευής ενεργοποιήθηκε."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Η μετάδοση της οθόνης διακόπηκε."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Φωτεινότητα οθόνης"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Τα δεδομένα 2G-3G τέθηκαν σε παύση"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Τα δεδομένα 4G τέθηκαν σε παύση"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Χρησιμοποιούνται <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Όριο <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Προειδοποίηση για <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Οι πρόσφατες οθόνες σας εμφανίζονται εδώ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Πληροφορίες εφαρμογής"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"καρφίτσωμα οθόνης"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Αγγίξτε για επαναφορά αρχικού."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Χρησιμοποιείτε το προφίλ εργασίας σας"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Εμφάνιση ποσοστού ενσωματωμένης μπαταρίας"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 84f1785..f3061d7 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -161,6 +161,7 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <string name="accessibility_work_mode" msgid="2478631941714607225">"Work mode"</string>
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
@@ -212,6 +213,10 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string>
+ <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Work mode off."</string>
+ <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Work mode on."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Work mode turned off."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Work mode turned on."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string>
@@ -289,6 +294,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
+ <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
@@ -403,7 +409,7 @@
<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="1826889705095768656">"Touch to restore the original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <string name="group_summary_concadenation" msgid="6846402378100148789">", "</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Show embedded battery percentage"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 84f1785..f3061d7 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -161,6 +161,7 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <string name="accessibility_work_mode" msgid="2478631941714607225">"Work mode"</string>
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
@@ -212,6 +213,10 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string>
+ <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Work mode off."</string>
+ <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Work mode on."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Work mode turned off."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Work mode turned on."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string>
@@ -289,6 +294,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
+ <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
@@ -403,7 +409,7 @@
<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="1826889705095768656">"Touch to restore the original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <string name="group_summary_concadenation" msgid="6846402378100148789">", "</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Show embedded battery percentage"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 84f1785..f3061d7 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -161,6 +161,7 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <string name="accessibility_work_mode" msgid="2478631941714607225">"Work mode"</string>
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Dismiss <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"All recent applications dismissed."</string>
@@ -212,6 +213,10 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobile hotspot turned off."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobile hotspot turned on."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Screen casting stopped."</string>
+ <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Work mode off."</string>
+ <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Work mode on."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Work mode turned off."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Work mode turned on."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Display brightness"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G data is paused"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data is paused"</string>
@@ -289,6 +294,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> used"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> limit"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> warning"</string>
+ <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Work mode"</string>
<string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"screen pinning"</string>
@@ -403,7 +409,7 @@
<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="1826889705095768656">"Touch to restore the original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <string name="group_summary_concadenation" msgid="6846402378100148789">", "</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"You\'re using your work profile"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Show embedded battery percentage"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index c9af193..0d9f55e 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre en silencio"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rechazar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartada."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se descartaron todas las aplicaciones recientes."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Zona móvil desactivada"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Zona móvil activada"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmisión de pantalla detenida"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de pantalla"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Datos 2G-3G pausados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Datos 4G pausados"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Utilizados: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Las pantallas recientes aparecen aquí."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Fijar pantalla"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toca para restaurar el original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando tu perfil de trabajo"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintonizador de IU del sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar porcentaje de la batería integrada"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 51984bf..a5a39ce 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Modo silencio"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Se ha eliminado <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se han ignorado todas las aplicaciones recientes."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Punto de acceso móvil desactivado."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Punto de acceso móvil activado."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Envío de pantalla detenido."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de la pantalla"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Datos 2G-3G pausados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Datos 4G pausados"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizado"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Aquí aparecerán tus pantallas recientes"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fijación de pantalla"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toca para restaurar la versión original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"y"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando tu perfil de trabajo"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Configurador de IU del sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar porcentaje de batería insertado"</string>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index b527b9f..79ab1ee 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Vaikne kõlisti."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rakendusest <xliff:g id="APP">%s</xliff:g> loobumine."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Loobusite rakendusest <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kõikidest hiljutistest rakendustest on loobutud"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiilside leviala on välja lülitatud."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiilside leviala on sisse lülitatud."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekraanikuva ülekandmine on peatatud."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekraani heledus"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G andmekasutus on peatatud"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G andmekasutus on peatatud"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> on kasutatud"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limiit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hoiatus"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Teie viimane ekraanikuva ilmub siia"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduste teave"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekraanikuva kinnitamine"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Originaali taastamiseks puudutage."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Kasutate oma tööprofiili"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Süsteemi kasutajaliidese tuuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Kuva lisatud akutaseme protsent"</string>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index b7cfb2a2..94ce0ff 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tonu-jotzailea isilik."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Baztertu <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> baztertu da."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Azken aplikazio guztiak baztertu da."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Konexioa partekatzeko aukera desaktibatu egin da."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Konexioa partekatzeko aukera aktibatu egin da."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Pantaila igortzeari utzi zaio."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Bistaratu distira"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G datuen erabilera eten da"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datuen erabilera eten da"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> erabilita"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Muga: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Abisua: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ikusitako azken pantailak erakusten dira hemen"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Aplikazioaren informazioa"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pantaila-ainguratzea"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Ukitu jatorrizkora leheneratzeko"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Work profila erabiltzen ari zara"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sistemako erabiltzaile-interfazearen konfiguratzailea"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Erakutsi txertatutako bateriaren ehunekoa"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index b3d8216..9fbafc2 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"زنگ بیصدا."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"رد کردن <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"همه برنامههای اخیر رد شدند."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"نقطه اتصال دستگاه همراه خاموش شد."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"نقطه اتصال دستگاه همراه روشن شد."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"فرستادن صفحه نمایش متوقف شد."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"روشنایی نمایشگر"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"داده 2G-3G موقتاً متوقف شده است"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"داده 4G موقتاً متوقف شده است"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> استفاده شده"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> محدودیت"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"هشدار <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"صفحههای اخیر شما اینجا نمایان میشوند"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"پین کردن صفحه"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"برای بازیابی کنترلکننده اصلی، لمس کنید."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"،"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"درحال استفاده از نمایه کاریتان هستید"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"تنظیمکننده واسط کاربری سیستم"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"نمایش درصد شارژ باتری جاسازی شده"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 235eef0..6c9e9d6 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Soittoääni: äänetön."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Hylätään <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> hylättiin."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Kaikki viimeisimmät sovellukset on hylätty."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiiliyhteyden hotspot poistettiin käytöstä."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiiliyhteyden hotspot otettiin käyttöön."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ruudun lähetys pysäytettiin."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Näytön kirkkaus"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G-tiedonsiirto keskeytettiin"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-tiedonsiirto keskeytettiin"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"käytetty <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"kiintiö <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> – varoitus"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Äskettäin käytetyt ruudut näkyvät tässä"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"näytön kiinnitys"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Palauta alkuperäinen koskettamalla."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Käytät työprofiilia."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Näytä akun varaus kuvakkeessa"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 3493067..86b207e 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonnerie en mode silencieux"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Supprimer <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Point d\'accès mobile désactivé."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Point d\'accès mobile activé."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Diffusion d\'écran arrêtée."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Luminosité de l\'écran"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Données 2G/3G désactivées"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Données 4G désactivées"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Quantité de données utilisées :<xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Vos écrans récents s\'affichent ici"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Touchez pour restaurer l\'original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Vous utilisez votre profil professionnel."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Afficher le pourcentage intégré de charge"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index ebed6e9..6953c87 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonnerie en mode silencieux"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Supprimer <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toutes les applications récentes ont été supprimées."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Point d\'accès mobile désactivé."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Point d\'accès mobile activé."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Diffusion d\'écran interrompue."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Luminosité de l\'affichage"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Données 2G-3G désactivées"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Données 4G désactivées"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilisés"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> au maximum"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertissement : <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Vos écrans récents s\'affichent ici"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Infos application"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Appuyez pour restaurer l\'interface d\'origine."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Vous utilisez votre profil professionnel."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Afficher le pourcentage intégré de la batterie"</string>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index a9648b9..2a2a2e0 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Timbre silenciado"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Rexeitar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Rexeitouse <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Rexeitáronse todas as aplicacións recentes."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Desactivouse a zona interactiva móbil."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Activouse a zona interactiva móbil."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Detívose a emisión en pantalla."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brillo de pantalla"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Os datos 2G-3G están en pausa"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os datos 4G están en pausa"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> usados"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"As túas pantallas recentes aparecen aquí"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información da aplicación"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixación de pantalla"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toca para restaurar o orixinal."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Estás usando o perfil de traballo"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Configurador da IU do sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar porcentaxe de batería inserida"</string>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 804a940..6b67a20 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"રિંગર શાંત છે."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખો."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> કાઢી નાખી."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"તમામ તાજેતરની એપ્લિકેશનો કાઢી નાખી."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"મોબાઇલ હોટસ્પોટ બંધ કર્યું."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"મોબાઇલ હોટસ્પોટ ચાલુ કર્યું."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"સ્ક્રીન કાસ્ટિંગ બંધ કર્યું."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"પ્રદર્શન તેજ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ડેટા થોભાવ્યો છે"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ડેટા થોભાવ્યો છે"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> વાપર્યો"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> મર્યાદા"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ચેતવણી"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"તમારી તાજેતરની સ્ક્રીન્સ અહીં દેખાય છે"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"એપ્લિકેશન માહિતી"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"સ્ક્રીન પિનિંગ"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"મૂળને પુનઃસ્થાપિત કરવા માટે ટચ કરો."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"તમે તમારી કાર્ય પ્રોફાઇલનો ઉપયોગ કરી રહ્યાં છો"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"સિસ્ટમ UI ટ્યૂનર"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"એમ્બેડ કરેલ બૅટરી ટકા બતાવો"</string>
diff --git a/packages/SystemUI/res/values-h560dp/config.xml b/packages/SystemUI/res/values-h560dp/config.xml
index f210d7b..8b576b9 100644
--- a/packages/SystemUI/res/values-h560dp/config.xml
+++ b/packages/SystemUI/res/values-h560dp/config.xml
@@ -18,6 +18,6 @@
<resources>
<!-- The maximum number of items to be displayed in quick settings -->
- <integer name="quick_settings_detail_max_item_count">8</integer>
+ <integer name="quick_settings_detail_max_item_count">6</integer>
</resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 354de04..feba1fe 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"रिंगर मौन."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> को ख़ारिज करें."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खा़रिज कर दिया गया."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"हाल ही के सभी ऐप्लिकेशन ख़ारिज कर दिए गए."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"मोबाइल हॉटस्पॉट को बंद किया गया."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाइल हॉटस्पॉट को चालू किया गया."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रीन कास्ट करना रुक गया."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"स्क्रीन की स्क्रीन की रोशनी"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटा रोक दिया गया है"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोक दिया गया है"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> उपयोग किया गया"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"आपकी हाल की स्क्रीन यहां दिखाई देती हैं"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"एप्लिकेशन जानकारी"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रीन पिन करना"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"मूल वॉल्यूम को फिर से लाने के लिए स्पर्श करें."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"आप अपनी कार्य प्रोफ़ाइल का उपयोग कर रहे हैं"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"सिस्टम UI ट्यूनर"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"एम्बेड किया गया बैटरी प्रतिशत दिखाएं"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index b35360e..de1ca72 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -162,6 +162,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Softver zvona utišan."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Odbacivanje aplikacije <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> odbačena je."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Odbačene su sve nedavne aplikacije."</string>
@@ -213,6 +215,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilna žarišna točka isključena."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilna žarišna točka uključena."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Emitiranje zaslona zaustavljeno."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Svjetlina zaslona"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G – 3G podaci pauzirani"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G podaci pauzirani"</string>
@@ -290,6 +300,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> iskorišteno"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ograničenje od <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozorenje <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ovdje se pojavljuju vaši nedavni zasloni"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"prikvačivanje zaslona"</string>
@@ -404,7 +416,8 @@
<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="1826889705095768656">"Dodirnite da biste vratili izvorno."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Upotrebljavate radni profil"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Ugađanje korisničkog sučelja sustava"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Prikaži ugrađeni postotak baterije"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index 7956a21..7763fa7 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Csengő néma."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"A(z) <xliff:g id="APP">%s</xliff:g> elvetése."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eltávolítva."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Az összes alkalmazás eltávolítva a nemrég használtak közül."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"A mobil hotspot kikapcsolva."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"A mobil hotspot bekapcsolva."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"A képernyő átküldése leállítva."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"A kijelző fényereje"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"A 2G és 3G adatforgalom szünetel."</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"A 4G adatforgalom szünetel"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> felhasználva"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> korlát"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Figyelem! <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"A legutóbbi képernyők itt jelennek meg"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"képernyő rögzítése"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Érintse meg az eredeti érték visszaállításához."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"A munkaprofilt használja"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Kezelőfelület-hangoló"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"A beépített akkumulátor töltöttségi szintjének megjelenítése"</string>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index de70fec..cbb9a89 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Զանգակը լռեցված է:"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Անտեսել <xliff:g id="APP">%s</xliff:g>-ը:"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>-ը անտեսված է:"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Բոլոր վերջին հավելվածները հեռացվել են ցուցակից:"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Շարժական կապի WiFi ցրիչն անջատվեց:"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Շարժական կապի WiFi ցրիչը միացավ:"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Էկրանի հեռարձակումն ընդհատվեց:"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ցուցադրել պայծառությունը"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2Գ-3Գ տվյալների օգտագործումը դադարեցված է"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4Գ տվյալների օգտագործումը դադարեցված է"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Օգտագործված է՝ <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Սահմանաչափ՝ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> զգուշացում"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ձեր վերջին էկրանները տեսանելի են այստեղ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"էկրանի ամրակցում"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Դիպչեք՝ սկզբնօրինակը վերականգնելու համար:"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Դուք օգտագործում եք ձեր աշխատանքային պրոֆիլը"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Համակարգի ՕՄ-ի կարգավորիչ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Ցուցադրել ներկառուցված մարտկոցի տոկոսայնությունը"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 51ddcc0..bbf018d 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Menyingkirkan <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> disingkirkan."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaru telah ditutup."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Hotspot seluler dinonaktifkan."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspot seluler diaktifkan."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmisi layar berhenti."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Kecerahan tampilan"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G dijeda"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> digunakan"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Batas <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Peringatan <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Layar terkini Anda muncul di sini"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pin ke layar"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Sentuh untuk memulihkan aslinya."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Anda menggunakan profil kerja"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Penyetel Antarmuka Pengguna Sistem"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Tampilkan persentase baterai yang tersemat"</string>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index 20d8693..f9235a0 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Engin hringing."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Hunsa <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> vísað frá."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Öll nýleg forrit fjarlægð."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Slökkt á farsímaaðgangsstað."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Kveikt á farsímaaðgangsstað."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Skjáútsendingu hætt."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Birtustig skjás"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Slökkt er á 2G- og 3G-gögnum"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Slökkt er á 4G-gögnum"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> notuð"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> hámark"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> viðvörun"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Nýlegar skjámyndir birtast hér"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Forritsupplýsingar"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skjáfesting"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Snertu til að færa í upprunalegt horf."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Þú ert að nota vinnusniðið"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Fínstillingar kerfisviðmóts"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Sýna innfellda rafhlöðustöðu"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 87267995..a389126 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Suoneria silenziosa."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Elimina <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> eliminata."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tutte le applicazioni recenti sono state rimosse."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Hotspot mobile disattivato."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspot mobile attivato."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Trasmissione dello schermo interrotta."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Luminosità dello schermo"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dati 2G-3G sospesi"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dati 4G sospesi"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizzati"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite di <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avviso <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Le tue schermate recenti vengono visualizzate in questa sezione"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"blocco su schermo"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Tocca per ripristinare l\'originale."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Stai utilizzando il profilo di lavoro"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintetizzatore interfaccia utente di sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostra percentuale batteria incorporata"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index a28dc2a..cd64034 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"צלצול שקט."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"סגור את <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> נדחה."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"כל האפליקציות האחרונות נסגרו."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"נקודה לשיתוף אינטרנט בנייד כבויה."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"נקודה לשיתוף אינטרנט בנייד מופעלת."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"העברת המסך הופסקה."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"בהירות תצוגה"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"השימוש בנתוני 2G-3G מושהה"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"השימוש בנתוני 4G מושהה"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> בשימוש"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"הגבלה של <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"אזהרה - <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"המסכים האחרונים מופיעים כאן"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"הצמדת מסך"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"גע כדי לשחזר את עוצמת הקול המקורית."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"אתה משתמש בפרופיל העבודה שלך"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"הצג בשורת הסטטוס את אחוז עוצמת הסוללה"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 13217a0..39c7161 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"マナーモード着信。"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>を削除します。"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>は削除されました。"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近のアプリケーションをすべて消去しました。"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"モバイルアクセスポイントをOFFにしました。"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"モバイルアクセスポイントをONにしました。"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"画面のキャストが停止しました。"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ディスプレイの明るさ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G~3Gデータは一時停止中です"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4Gデータは一時停止中です"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g>使用中"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上限: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"警告: 上限は<xliff:g id="DATA_LIMIT">%s</xliff:g>です"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"ここに最近の画面が表示されます"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"アプリ情報"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"画面固定"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"タップすると元の音量ダイアログが復元されます。"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"、"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"仕事用プロファイルを使用しています"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"システムUI調整ツール"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"内蔵電池の残量の割合を表示する"</string>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index c4e84a8..234891f 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"უხმო რეჟიმი."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>-ის უგულებელყოფა."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ამოშლილია სიიდან."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ყველა ბოლო აპლიკაცია გაუქმდა."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"მობილური ქსელის წერტილი გამოირთო."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"მობილური ქსელის წერტილი ჩაირთო."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ეკრანის გადაცემა შეჩერებულია."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ეკრანის სიკაშკაშე"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G მონაცემები შეჩერებულია"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G მონაცემები შეჩერებულია"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"გამოყენებულია: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ლიმიტი: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> გაფრთხილება"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"თქვენი ბოლო ეკრანები აქ გამოჩნდება"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ეკრანზე ჩამაგრება"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ორიგინალის აღდგენისათვის, შეეხეთ."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"თქვენ სამსახურის პროფილს იყენებთ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"სისტემის UI ტუნერი"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"ჩამაგრებული ბატარეის პროცენტის ჩვენება"</string>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index 2133170..08e2a50 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Қоңырау үнсіз."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> қолданбасынан бас тарту."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> алынып тасталған."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Барлық жақындағы қабылданбаған қолданбалар."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобильді хотспот өшірілді."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобильді хотспот қосылды."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Экранды трансляциялау тоқтатылды."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Дисплей жарықтығы"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G деректері кідіртілді"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G деректері кідіртілді"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> пайдаланылған"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> шегі"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> туралы ескерту"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Мұнда жақындағы экрандар көрсетіледі"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Қолданба туралы ақпарат"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"экранды бекіту"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Түпнұсқаны қалпына келтіру үшін түртіңіз."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Сіз жұмыс профиліңізді пайдаланып жатырсыз"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Жүйелік пайдаланушылық интерфейс тюнері"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Ендірілген батарея пайыздық шамасын көрсету"</string>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 6fbb325..2df7f1f 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"កម្មវិធីរោទ៍ស្ងាត់។"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"បោះបង់ <xliff:g id="APP">%s</xliff:g> ។"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> បដិសេធ។"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"កម្មវិធីថ្មីៗទាំងអស់ត្រូវបានបោះបង់។"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"បានបិទហតស្ប៉តចល័ត។"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"បានបើកហតស្ប៉តចល័ត។"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"បានបញ្ឈប់ការចាត់ថ្នាក់អេក្រង់។"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ពន្លឺការបង្ហាញ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ទិន្នន័យ 2G-3G ត្រូវបានផ្អាក"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ទិន្នន័យ 4G ត្រូវបានផ្អាក"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"បានប្រើ <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ដែនកំណត់ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ការព្រមាន"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"អេក្រង់បច្ចុប្បន្នរបស់អ្នកបង្ហាញនៅទីនេះ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មានកម្មវិធី"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ការភ្ជាប់អេក្រង់"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ប៉ះដើម្បីស្តារច្បាប់ដើម។"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"អ្នកកំពុងប្រើប្រវត្តិរូបការងាររបស់អ្នក"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"កម្មវិធីសម្រួល UI ប្រព័ន្ធ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"បង្ហាញភាគរយថាមពលថ្មដែលបានបង្កប់"</string>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index c8fc91d..ee466d0 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"ರಿಂಗರ್ ಶಾಂತ."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸು."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ಇತ್ತೀಚಿನ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ವಜಾಗೊಳಿಸಲಾಗಿದೆ."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ಮೊಬೈಲ್ ಹಾಟ್ಸ್ಪಾಟ್ ಆಫ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ಮೊಬೈಲ್ ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ಸ್ಕ್ರೀನ್ ಪ್ರಸಾರವನ್ನು ನಿಲ್ಲಿಸಲಾಗಿದೆ."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ಹೊಳಪನ್ನು ಪ್ರದರ್ಶಿಸಿ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ಡೇಟಾವನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ಡೇಟಾ ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ಬಳಸಲಾಗಿದೆ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ಮಿತಿ"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ಎಚ್ಚರಿಕೆ"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"ನಿಮ್ಮ ಇತ್ತೀಚಿನ ಪರದೆಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ಸ್ಕ್ರೀನ್ ಪಿನ್ನಿಂಗ್"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ಮೂಲ ಮರುಸ್ಥಾಪಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ನಿಮ್ಮ ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ನೀವು ಬಳಸುತ್ತಿರುವಿರಿ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"ಸಿಸ್ಟಮ್ UI ಟ್ಯೂನರ್"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"ಎಂಬೆಡ್ ಮಾಡಲಾದ ಬ್ಯಾಟರಿ ಶೇಕಡಾ ತೋರಿಸಿ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 1296d21..35725aa 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"벨소리가 무음입니다."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>을(를) 숨깁니다."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>이(가) 제거되었습니다."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"최근 사용한 애플리케이션을 모두 닫았습니다."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"모바일 핫스팟이 사용 중지되었습니다."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"모바일 핫스팟을 사용합니다."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"화면 전송이 중지되었습니다."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"디스플레이 밝기"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 데이터 사용 중지됨"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 데이터 사용 중지됨"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> 사용됨"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"한도: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 경고"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"여기에 최근 화면이 표시됩니다."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"애플리케이션 정보"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"화면 고정"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"원본을 복원하려면 터치하세요."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"직장 프로필을 사용하고 있습니다."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"시스템 UI 튜너"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"내장형 배터리 잔량 비율 표시"</string>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index ead55c7..79b8937 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Үнсүз шыңгыроо."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> этибарга албоо."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> жок болду."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Акыркы колдонмолордун баары көз жаздымда калтырылды."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобилдик байланыш түйүнү өчүрүлдү."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилдик байланыш түйүнү күйгүзүлдү."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Тышкы экранга чыгаруу аракети токтотулду."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Жарыктыгын көрсөтүү"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дайындары тындырылды."</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дайындары тындырылды"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> колдонулду"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> чектөө"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> эскертүү"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Акыркы экрандарыңыз бул жерден көрүнөт"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Колдонмо жөнүндө маалымат"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"экран кадоо"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Түпнусканы калыбына келтирүү үчүн тийип коюңуз."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Жумуш профилиңизди колдонуп жатасыз"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Батарянын кубатнын деңгээли пайыз менен көрсөтлсүн"</string>
diff --git a/packages/SystemUI/res/values-land/styles.xml b/packages/SystemUI/res/values-land/styles.xml
index dd396d9..96d8fb8 100644
--- a/packages/SystemUI/res/values-land/styles.xml
+++ b/packages/SystemUI/res/values-land/styles.xml
@@ -27,6 +27,8 @@
<style name="DockedDividerHandle">
<item name="android:layout_gravity">center_vertical</item>
+ <item name="android:layout_width">48dp</item>
+ <item name="android:layout_height">64dp</item>
</style>
</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index c0689c3..015d4da 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"ປິດສຽງ."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"ປິດ <xliff:g id="APP">%s</xliff:g> ໄວ້."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ທຸກແອັບພລິເຄຊັນບໍ່ດົນມານີ້ຖືກປ່ອຍໄປ."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ປິດຮັອດສະປອດເຄື່ອນທີ່ແລ້ວ."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ເປີດຮັອດສະປອດເຄື່ອນທີ່ແລ້ວ."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ຢຸດການສົ່ງພາບໜ້າຈໍແລ້ວ."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ຄວາມແຈ້ງຂອງຈໍ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"ຂໍ້ມູນ 2G-3G ຢຸດຊົ່ວຄາວແລ້ວ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"ຂໍ້ມູນ 4G ຢຸດຊົ່ວຄາວແລ້ວ"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"ໃຊ້ໄປແລ້ວ <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ຈຳກັດ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"ຄຳເຕືອນ <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Your recent screens appear here"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ຂໍ້ມູນແອັບພລິເຄຊັນ"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ການປັກໝຸດໜ້າຈໍ"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ສໍາຜັດເພື່ອກູ້ຄືນຕົ້ນສະບັບ."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ທ່ານກຳລັງໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"ສະແດງເປີເຊັນແບັດເຕີຣີທີ່ຕິດມາ"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 4425d31..282866f 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Skambutis tylus."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Atsisakyti <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Atsisakyta programos „<xliff:g id="APP">%s</xliff:g>“."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Atsisakyta visų naujausių programų."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiliojo ryšio viešosios interneto prieigos taškas išjungtas."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiliojo ryšio viešosios interneto prieigos taškas įjungtas."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekrano perdavimas sustabdytas."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekrano šviesumas"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G duomenys pristabdyti"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G duomenys pristabdyti"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Išnaudota: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limitas: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> įspėjimas"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Čia rodomi naujausi ekranai"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekrano prisegimas"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Palieskite, kad atkurtumėte originalą."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Naudojate darbo profilį"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sistemos naudotojo sąsajos derinimo priemonė"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Rodyti įterptą akumuliat. įkrovos procentinę vertę"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index eca57a6..8e99c57 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -162,6 +162,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvana signāls — kluss."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Nerādīt lietotni <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Lietotne <xliff:g id="APP">%s</xliff:g> vairs netiek rādīta."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Visas nesen izmantotās lietojumprogrammas tika noņemtas."</string>
@@ -213,6 +215,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilais tīklājs ir izslēgts."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilais tīklājs ir ieslēgts."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekrāna apraidīšana ir apturēta."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekrāna spilgtums"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G datu lietojums ir apturēts"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G datu lietojums ir apturēts"</string>
@@ -290,6 +300,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Tiek izmantots: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ierobežojums: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> brīdinājums"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Jūsu pēdējie ekrāni tiek rādīti šeit."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Piespraust ekrānu"</string>
@@ -404,7 +416,8 @@
<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="1826889705095768656">"Pieskarieties, lai atjaunotu sākotnējo."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Jūs izmantojat darba profilu."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sistēmas saskarnes regulators"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Rādīt akumulatora uzlādes līmeni procentos"</string>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 038c669..c2de755 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ѕвонче на тивко."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Отфрли <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> е отфрлена."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Сите неодамнешни апликации се отфрлени."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобилната точка на пристап е исклучена."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилната точка на пристап е вклучена."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Емитувањето на екранот запре."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Осветленост на екранот"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Податоците 2G-3G се паузирани"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Податоците 4G се паузирани"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Искористено: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Лимит: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупредување за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Вашите неодамнешни екрани се појавуваат тука"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информации за апликацијата"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"прикачување екран"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Допрете за да го вратите оригиналот."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Го користите работниот профил"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Адаптер на УИ на системот"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Прикажи вграден процент на батеријата"</string>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index f4964d0..5594792 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"റിംഗർ നിശ്ശബ്ദമാണ്."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> നിരസിക്കുക."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> നിരസിച്ചു."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"അടുത്തിടെയുള്ള എല്ലാ അപ്ലിക്കേഷനും നിരസിച്ചു."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"മൊബൈൽ ഹോട്ട്സ്പോട്ട് ഓഫാക്കി."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"മൊബൈൽ ഹോട്ട്സ്പോട്ട് ഓണാക്കി."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"സ്ക്രീൻ കാസ്റ്റുചെയ്യൽ നിർത്തി."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ഡിസ്പ്ലേ തെളിച്ചം"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ഡാറ്റ താൽക്കാലികമായി നിർത്തി"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ഉപയോഗിച്ചു"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> പരിധി"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> മുന്നറിയിപ്പ്"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"നിങ്ങളുടെ പുതിയ സ്ക്രീനുകൾ ഇവിടെ ദൃശ്യമാകുന്നു"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ആപ്പ് വിവരം"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"സ്ക്രീൻ പിൻ ചെയ്യൽ"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ആദ്യത്തേത് പുനഃസ്ഥാപിക്കാൻ സ്പർശിക്കുക."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"നിങ്ങൾ ഉപയോഗിക്കുന്നത് ഔദ്യോഗിക പ്രൊഫൈലാണ്"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"സിസ്റ്റം UI ട്യൂണർ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"എംബഡ് ചെയ്ത ബാറ്ററി ശതമാനം കാണിക്കുക"</string>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index 122068c..260a580 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -159,6 +159,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Хонхыг хаах."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>-г хаах."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> байхгүй."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Хамгийн сүүлийн бүх програмыг арилгасан байна."</string>
@@ -210,6 +212,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобайл хотспотыг унтраасан."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобайл хотспотыг асаасан."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Дэлгэц дамжуулалт зогссон."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Дэлгэцийн гэрэлтэлт"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G дата-г түр зогсоосон байна"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G дата-г түр зогсоосон байна"</string>
@@ -287,6 +297,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ашигласан"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> хязгаар"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> анхааруулга"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Таны саяхны дэлгэц энд харагдах болно"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Аппликешны мэдээлэл"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"дэлгэц тогтоох"</string>
@@ -401,7 +413,8 @@
<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="1826889705095768656">"Анхны хувилбарыг эргүүлэн хадгалахыг хүсвэл хүрнэ үү."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Та өөрийн ажлын профайлыг ашиглаж байна"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Системийн UI Тохируулагч"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Залгаатай тэжээлийн хувийг харуулах"</string>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index 6415adb..0c7f795 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"रिंगर मूक."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> डिसमिस करा."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> डिसमिस केला."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"अलीकडील सर्व अनुप्रयोग डिसमिस झाले."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"मोबाईल हॉटस्पॉट बंद केला."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाईल हॉटस्पॉट चालू केला."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रीन कास्ट करणे थांबले."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"प्रदर्शन चमक"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटास विराम दिला आहे"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटास विराम दिला आहे"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> वापरले"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> मर्यादा"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावणी"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"आपल्या अलीकडील स्क्रीन येथे दिसतात"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग माहिती"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रीन पिन करणे"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"मूळ पुनर्संचयित करण्यासाठी स्पर्श करा."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"आपण आपले कार्य प्रोफाईल वापरत आहात"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"सिस्टीम UI ट्यूनर"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"एम्बेडेड बॅटरी टक्केवारी दर्शवा"</string>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index ceefc29..9772a3c 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ketepikan <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ditolak."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Semua aplikasi terbaharu diketepikan."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Tempat liputan mudah alih bergerak dimatikan."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Tempat liputan mudah alih bergerak dihidupkan."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Penghantaran skrin dihentikan."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Kecerahan paparan"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data 2G-3G dijeda"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data 4G dijeda"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> digunakan"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> had"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Amaran <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Skrin terbaru anda terpapar di sini"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"penyematan skrin"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Sentuh untuk memulihkan yang asal."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Anda sedang menggunakan profil kerja"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Penala UI Sistem"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Tunjukkan peratusan bateri terbenam"</string>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 81c0932..2b1acfb 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"ဖုန်းမြည်သံပိတ်သည်။"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>ကို ပယ်လိုက်ရန်"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ထုတ်ထားသည်။"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"မကြာသေးမီက အပလီကေးရှင်းများအားလုံး ဖယ်ထုတ်ပြီးပါပြီ။"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"မိုဘိုင်း ဟော့စပေါ့ ပိတ်ထား။"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"မိုဘိုင်း ဟော့စပေါ့ ဖွင့်ထား။"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"မျက်နှာပြင် ကာစ်တင် လုပ်မှု ရပ်လိုက်ပြီ။"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"တောက်ပမှုကို ပြရန်"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ဒေတာ ခေတ္တရပ်တန့်သည်"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G data ခေတ္တရပ်တန့်သည်"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> သုံးထား"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ကန့်သတ်ချက်"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> သတိပေးချက်"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"သင်၏ မကြာမီက မျက်နှာပြင်များ ဒီမှာ ပေါ်လာကြမည်"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"အပလီကေးရှင်း အင်ဖို"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"မျက်နှာပြင် ပင်ထိုးမှု"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"မူရင်းအားပြန်လည်သိမ်းဆည်းရန် ထိပါ။"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"၊"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"သင်သည် အလုပ်ပရိုဖိုင်းအား သုံးနေသည်"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"စနစ် UI ဖမ်းစက်"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"မြုတ်ထားသည့် ဘတ်ထရီ ရာခိုင်နှုန်းကို ပြပါ"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 7f6895e..6dcd6bc 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Stille modus."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Avvis <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> avvist."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle nylig brukte apper er avvist."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobil Wi-Fi-sone er slått av."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil Wi-Fi-sone er slått på."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Skjermcastingen er stoppet."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Lysstyrken på skjermen"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G- og 3G-data er satt på pause"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data er satt på pause"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> brukt"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Grense på <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advarsel for <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"De sist brukte skjermene dine vises her"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"én-appsmodus"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Trykk for å gå tilbake til den opprinnelige volumdialogen."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du bruker jobbprofilen din"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Vis prosent for det innebygde batteriet"</string>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 51e8a16..a05ce9b 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"घन्टी मौन।"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> खारेज गर्नुहोस्।"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"सबै हालका अनुप्रयोगहरू खारेज गरियो।"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"मोबाइल हटस्पट बन्द गरियो।"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"मोबाइल हटस्पट खुला गरियो।"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"स्क्रिन कास्टिङ रोकियो।"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"प्रदर्शन चमक"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G डेटा रोकिएको छ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G डेटा रोकिएको छ"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> प्रयोग गरियो"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> सीमा"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> चेतावनी दिँदै"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"तपाईँको हालको स्क्रिन यहाँ प्रकट हुन्छ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"अनुप्रयोग जानकारी"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"स्क्रिन पिन गर्दै"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"मूल पुनर्स्थापना गर्न छुनुहोस्।"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"तपाईँले कार्य प्रोफाइल प्रयोग गर्दै हुनुहुन्छ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"प्रणाली UI ट्युनर"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"इम्बेड गरिएको ब्याट्री प्रतिशत देखाउनुहोस्"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 88d0b4b..7ded71c 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -161,6 +161,7 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Belsoftware stil."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <string name="accessibility_work_mode" msgid="2478631941714607225">"Werkmodus"</string>
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> sluiten."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> verwijderd."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alle recente apps gesloten."</string>
@@ -212,6 +213,10 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobiele hotspot uitgeschakeld."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobiele hotspot ingeschakeld."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Casten van scherm gestopt."</string>
+ <string name="accessibility_quick_settings_work_mode_off" msgid="7045417396436552890">"Werkmodus uit."</string>
+ <string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Werkmodus aan."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Werkmodus uitgeschakeld."</string>
+ <string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Werkmodus ingeschakeld."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Helderheid van het scherm"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G/3G-data zijn onderbroken"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data zijn onderbroken"</string>
@@ -289,6 +294,7 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> gebruikt"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limiet van <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Waarschuwing voor <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Werkmodus"</string>
<string name="recents_empty_message" msgid="8682129509540827999">"Je recente schermen worden hier weergegeven"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"scherm vastzetten"</string>
@@ -403,7 +409,7 @@
<string name="volumeui_prompt_deny" msgid="5720663643411696731">"Afwijzen"</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="1826889705095768656">"Tik hierop om het origineel te herstellen."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <string name="group_summary_concadenation" msgid="6846402378100148789">", "</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"U gebruikt je werkprofiel"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Systeem-UI-tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Percentage ingebouwde accu weergeven"</string>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index df6c473af..02838bd 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"ਰਿੰਗਰ ਸਾਈਲੈਂਟ।"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ਨੂੰ ਰੱਦ ਕਰੋ।"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ਰੱਦ ਕੀਤਾ।"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ਸਾਰੀਆਂ ਹਾਲੀਆ ਐਪਲੀਕੇਸ਼ਨਾਂ ਰੱਦ ਕੀਤੀਆਂ।"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਬੰਦ ਕੀਤੀ।"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ਮੋਬਾਈਲ ਹੌਟਸਪੌਟ ਚਾਲੂ ਕੀਤੀ।"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"ਸਕ੍ਰੀਨ ਜੋੜਨਾ ਬੰਦ ਹੋਇਆ।"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ਡਿਸਪਲੇ ਚਮਕ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ਵਰਤਿਆ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਸੀਮਾ"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਚਿਤਾਵਨੀ"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"ਤੁਹਾਡੀਆਂ ਹਾਲੀਆ ਸਕ੍ਰੀਨਾਂ ਇੱਥੇ ਪ੍ਰਗਟ ਹੋਣਗੀਆਂ"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ਐਪਲੀਕੇਸ਼ਨ ਜਾਣਕਾਰੀ"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ਸਕ੍ਰੀਨ ਪਿਨਿੰਗ"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"ਅਸਲੀ ਨੂੰ ਰੀਸਟੋਰ ਕਰਨ ਲਈ ਛੋਹਵੋ।"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ਤੁਸੀਂ ਆਪਣੀ ਕੰਮ ਪ੍ਰੋਫਾਈਲ ਵਰਤ ਰਹੇ ਹੋ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI ਟਿਊਨਰ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"ਜੋਡ਼ੀ ਗਈ ਬੈਟਰੀ ਪ੍ਰਤਿਸ਼ਤਤਾ ਦਿਖਾਓ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index 694132b..d9d1dc4 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Dzwonek wyciszony."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Usuń stąd <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>: zamknięto."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Wszystkie ostatnie aplikacje zostały zamknięte."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilny hotspot został wyłączony."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilny hotspot został włączony."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Zatrzymano przesyłanie ekranu."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Jasność wyświetlacza"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Transmisja danych 2G-3G została wstrzymana"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Transmisja danych 4G została wstrzymana"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Wykorzystano <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ostrzeżenie: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Tutaj pojawią się ostatnie ekrany"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"przypinanie ekranu"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Dotknij, by przywrócić pierwotną."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Używasz profilu do pracy"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Kalibrator System UI"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Pokaż procent naładowania baterii"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index e806bfc..7404621 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha silenciosa."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartado."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todos os apps recentes foram dispensados."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"O ponto de acesso móvel foi desativado."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"O ponto de acesso móvel foi ativado."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"A transmissão de tela foi interrompida."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brilho da tela"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Os dados 2G e 3G foram pausados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os dados 4G foram pausados"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Usados: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Suas telas recentes aparecem aqui"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação de tela"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toque para restaurar o original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Você está usando seu perfil de trabalho"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintonizador System UI"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar porcentagem de bateria incorporada"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index 468c75d..e14194b 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha em silêncio."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ignorado."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todas as aplicações recentes foram ignoradas."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Zona Wi-Fi móvel desligada."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Zona Wi-Fi móvel ligada."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmissão do ecrã interrompida."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brilho do visor"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dados 2G-3G em pausa"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dados 4G em pausa"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizado(s)"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Os ecrãs recentes aparecem aqui"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação no ecrã"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toque para restaurar o original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Está a utilizar o seu perfil de trabalho"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintonizador da interface do sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar percentagem da bateria incorporada"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index e806bfc..7404621 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Campainha silenciosa."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> descartado."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Todos os apps recentes foram dispensados."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"O ponto de acesso móvel foi desativado."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"O ponto de acesso móvel foi ativado."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"A transmissão de tela foi interrompida."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Brilho da tela"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Os dados 2G e 3G foram pausados"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Os dados 4G foram pausados"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Usados: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limite: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Aviso de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Suas telas recentes aparecem aqui"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do app"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixação de tela"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Toque para restaurar o original."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Você está usando seu perfil de trabalho"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintonizador System UI"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Mostrar porcentagem de bateria incorporada"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 1b8e8de..eacc909 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -162,6 +162,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonerie silențioasă."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Închideți <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> a fost eliminată."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Toate aplicațiile recente au fost închise."</string>
@@ -213,6 +215,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Hotspotul mobil este dezactivat."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Hotspotul mobil este activat."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmiterea ecranului a fost oprită."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Luminozitatea ecranului"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Conexiunea de date 2G – 3G este întreruptă"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Conexiunea de date 4G este întreruptă"</string>
@@ -290,6 +300,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizați"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limită de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Avertizare: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ecranele dvs. recente apar aici"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informații despre aplicație"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixare pe ecran"</string>
@@ -404,7 +416,8 @@
<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="1826889705095768656">"Atingeți pentru a reveni la setarea inițială."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Acum folosiți profilul de serviciu"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Afișați procentajul bateriei încorporat"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 9068e0b..c26f785 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Беззвучный режим."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Удаление приложения <xliff:g id="APP">%s</xliff:g> из списка."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" удалено из списка."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Все недавние приложения закрыты."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Точка доступа отключена."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Точка доступа включена."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Трансляция прекращена."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Яркость экрана"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Передача данных 2G и 3G приостановлена"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передача данных 4G приостановлена"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Использовано: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Предупреждение: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Здесь будут показаны недавние приложения"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Сведения о приложении"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Заблокировать в приложении"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Нажмите, чтобы восстановить приложение по умолчанию."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Вы перешли в рабочий профиль"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Показывать уровень заряда батареи в процентах"</string>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 3be3718..3ef672a2 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"හඬ නඟනය නිශ්ශබ්දයි."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ඉවතලන්න."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> අස් කර ඇත."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"සියලුම මෑත යෙඳුම් අස් කරන ලදි."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ජංගම හොට්ස්පොටය අක්රිය කරන ලදි."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"ජංගම හොට්ස්පොටය සක්රිය කරන ලදි."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"තිරය විකාශය කිරීම නැවත් වන ලදි."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"දීප්තිය දර්ශනය කරන්න"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G දත්ත විරාම කර ඇත"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G දත්ත විරාම කර ඇත"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> භාවිතා කර තිබේ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> සීමිත"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> අවවාද කිරීම"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"මෙහි ඔබගේ මෑතක තිර පෙන්නුම් කරයි"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"යෙදුම් තොරතුරු"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"තිර ඇමිණීම"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"මුල් තත්ත්වය නැවත ප්රතිසාධනය කිරීමට ස්පර්ශ කරන්න."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"ඔබ ඔබේ කාර්යාල පැතිකඩ භාවිත කරමින් සිටී"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"පද්ධති UI සුසරකය"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"කාවද්දන ලද බැටරි ප්රතිශතය පෙන්වන්න"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index d96194c..2d6aa9d 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tiché zvonenie."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zrušiť aplikáciu <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všetky nedávne aplikácie boli odmietnuté."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilný hotspot je vypnutý."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilný hotspot je zapnutý."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Prenášanie bolo zastavené."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Jas displeja"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Dátové prenosy 2G a 3G sú pozastavené"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Dátové prenosy 4G sú pozastavené"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Využité: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Limit: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Upozornenie pri <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Vaše nedávne obrazovky sa zobrazia tu."</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pripnutie k obrazovke"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Klepnutím obnovíte originál."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Používate svoj pracovný profil."</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Tuner používateľského rozhrania systému"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Zobraziť percentá vloženej batérie"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index f3d3b39..18fa504 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zvonjenje izklopljeno."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Opusti aplikacijo <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikacija <xliff:g id="APP">%s</xliff:g> je bila odstranjena."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Vse nedavne aplikacije so bile opuščene."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobilna dostopna točka je izklopljena."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobilna dostopna točka je vklopljena."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Predvajanje zaslona je ustavljeno."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Svetlost zaslona"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Prenos podatkov v omrežju 2G/3G je zaustavljen"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Prenos podatkov v omrežju 4G je zaustavljen"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Porabljeno: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Omejitev: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Opozorilo – <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Vaši nedavni zasloni so prikazani tu"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pripenjanje zaslona"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Dotaknite se, če želite obnoviti izvirnik."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Uporabljate delovni profil"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Uglaševalnik uporabniškega vmesnika sistema"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Prikaži odstotek napolnjenosti vgraj. akumulatorja"</string>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index afad772..ab7e5b0 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zilja është heshtur."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Largo <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> është hequr."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Të gjitha aplikacionet e fundit u larguan."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Qasja në zona publike interneti është e çaktivizuar."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Zona e qasjes publike për internet është e aktivizuar."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Transmetimi i ekranit ndaloi."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ndriçimi i ekranit"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Të dhënat 2G-3G janë ndërprerë"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Të dhënat 4G janë ndërprerë"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Të përdorura: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Kufiri: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Paralajmërim për kufirin prej <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ekranet e tua të fundit shfaqen këtu"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacioni i aplikacionit"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"gozhdimi i ekranit"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Prek për të restauruar origjinalin."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Po përdor profilin tënd të punës"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sintonizuesi i Sistemit të Ndërfaqes së Përdoruesit"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Shfaq përqindjen e baterisë së integruar"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index ad14d26..196d1f1 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -162,6 +162,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Нечујно звоно."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Одбаците <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Апликација <xliff:g id="APP">%s</xliff:g> је одбачена."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Све недавно коришћене апликације су одбачене."</string>
@@ -213,6 +215,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобилни хотспот је искључен."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобилни хотспот је укључен."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Пребацивање екрана је заустављено."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Осветљеност екрана"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G подаци су паузирани"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G подаци су паузирани"</string>
@@ -290,6 +300,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Искористили сте <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Ограничење од <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Упозорење за <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Недавни екрани се појављују овде"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"качење екрана"</string>
@@ -404,7 +416,8 @@
<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="1826889705095768656">"Додирните да бисте вратили оригинал."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Користите профил за Work"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Тјунер за кориснички интерфејс система"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Приказуј уграђени проценат батерије"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 15e8b12..31066bf 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Tyst ringsignal."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ta bort <xliff:g id="APP">%s</xliff:g> från listan."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> togs bort permanent."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Alla appar har tagits bort från listan Senaste."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Den mobila trådlösa surfzonen har inaktiverats."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Den mobila trådlösa surfzonen har aktiverats."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Castningen av skärmen har stoppats."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Skärmens ljusstyrka"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G- och 3G-data har pausats"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G-data har pausats"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> används"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Gräns: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Varning <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Dina senaste skärmar visas här"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fästa skärmen"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Tryck här om du vill återställa den ursprungliga appen."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Du använder din jobbprofil"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Inställningar för systemgränssnitt"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Visa inbäddad batteriprocent"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 1d231fc..eeeef1f 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Mlio wa simu uko kimya."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ondoa <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> imeondolewa."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Programu za hivi majuzi zimeondolewa."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mtandao-hewa unaoweza kuhamishika umezimwa."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mtandao-hewa unaoweza kuhamishika umewashwa."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Utumaji wa skrini umesitishwa."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ung\'aavu wa skrini"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Data ya 2G-3G imesitishwa"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Data ya 4G imesitishwa"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> imetumika"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"kikomo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Onyo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Skrini zako za hivi majuzi huonekana hapa"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kudumisha programu moja"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Gusa ili urejeshe ya awali."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Unatumia wasifu wako wa kazini"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Kipokea Ishara cha SystemUI"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Onyesha asilimia ya betri iliyopachikwa"</string>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index c41494b..a6ad0df 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"ரிங்கர் நிசப்தம்."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> ஐ நிராகரி."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> விலக்கப்பட்டது."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"எல்லா சமீபத்திய பயன்பாடுகளும் விலக்கப்பட்டன."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"மொபைல் ஹாட்ஸ்பாட் முடக்கப்பட்டது."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"மொபைல் ஹாட்ஸ்பாட் இயக்கப்பட்டது."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"திரையை அனுப்புதல் நிறுத்தப்பட்டது."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"திரை பிரகாசம்"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G டேட்டா இடைநிறுத்தப்பட்டது"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G டேட்டா இடைநிறுத்தப்பட்டது"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"பயன்படுத்தியது - <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> வரம்பு"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> எச்சரிக்கை"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"சமீபத்திய திரைகள் இங்கு தோன்றும்"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"பயன்பாட்டு தகவல்"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"திரையை பின் செய்தல்"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"அசலை மீட்டமைக்கத் தொடவும்."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"பணி சுயவிவரத்தைப் பயன்படுத்துகிறீர்கள்"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"உள்ளிணைந்த பேட்டரி சதவீதத்தைக் காட்டு"</string>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index a628ef7..468d00d 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"రింగర్ నిశ్శబ్దంలో ఉంది."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g>ని తీసివేయండి."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> తీసివేయబడింది."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"అన్ని ఇటీవలి అనువర్తనాలు తీసివేయబడ్డాయి."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"మొబైల్ హాట్స్పాట్ ఆఫ్ చేయబడింది."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"మొబైల్ హాట్స్పాట్ ఆన్ చేయబడింది."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"స్క్రీన్ ప్రసారం ఆపివేయబడింది."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ప్రదర్శన ప్రకాశం"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G డేటా పాజ్ చేయబడింది"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G డేటా పాజ్ చేయబడింది"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> వినియోగించబడింది"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> పరిమితి"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> హెచ్చరిక"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"మీ ఇటీవలి స్క్రీన్లు ఇక్కడ కనిపిస్తాయి"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"అనువర్తన సమాచారం"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"స్క్రీన్ పిన్నింగ్"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"అసలుదాన్ని పునరుద్ధరించడానికి తాకండి."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"మీరు మీ కార్యాలయ ప్రొఫైల్ను ఉపయోగిస్తున్నారు"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"సిస్టమ్ UI ట్యూనర్"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"పొందుపరిచిన బ్యాటరీ శాతం చూపు"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index 44ad1fa..130a8bf 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"เสียงเรียกเข้าแบบปิดเสียง"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"ยกเลิก <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ถูกลบไปแล้ว"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"ปิดแอปพลิเคชันล่าสุดทั้งหมดแล้ว"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"ปิดฮอตสปอตเคลื่อนที่แล้ว"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"เปิดฮอตสปอตเคลื่อนที่แล้ว"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"หยุดการส่งหน้าจอแล้ว"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ความสว่างของหน้าจอ"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"หยุดการใช้ข้อมูล 2G-3G ชั่วคราวแล้ว"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"หยุดการใช้ข้อมูล 4G ชั่วคราวแล้ว"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"ใช้ไปแล้ว <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"ขีดจำกัด <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"คำเตือน <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"หน้าจอล่าสุดของคุณแสดงที่นี่"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้อมูลแอปพลิเคชัน"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"การตรึงหน้าจอ"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"แตะเพื่อคืนค่าดั้งเดิม"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"คุณกำลังใช้โปรไฟล์งานของคุณ"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"ตัวรับสัญญาณ UI ระบบ"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"แสดงเปอร์เซ็นต์ของแบตเตอรี่ในตัว"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index c1bb85c..2546c9e 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Naka-silent ang ringer."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"I-dismiss ang <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Hindi pinansin ang <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Na-dismiss ang lahat ng kamakailang application."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Na-off ang mobile hotspot."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Na-on ang mobile hotspot."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Itinigil ang pagka-cast sa screen."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Liwanag ng display"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Naka-pause ang 2G-3G data"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Naka-pause ang 4G data"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ang nagamit"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ang limitasyon"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Babala sa <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Lumalabas dito ang iyong mga kamakailang screen"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pagpi-pin sa screen"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Pindutin upang ibalik ang orihinal."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Ginagamit mo ang iyong profile sa trabaho"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Tuner ng System UI"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Ipakita ang naka-embed na porsyento ng baterya"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 854f850..c9aa1f5 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Telefon zili sessiz."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> uygulamasını kapat."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> kaldırıldı."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Tüm son uygulamalar kapatıldı."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobil hotspot kapatıldı."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil hotspot açıldı."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekran yayını durduruldu."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekran parlaklığı"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G veri kullanımı duraklatıldı"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G veri kullanımı duraklatıldı"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> kullanıldı"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Sınır: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> uyarısı"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Son ekranlarınız burada görünür"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekran sabitleme"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Orijinali geri yüklemek için dokunun."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"İş profilinizi kullanıyorsunuz"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Sistem Arayüzü Ayarlayıcısı"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Yerleşik pil yüzdesini göster"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 5347d93..58ae655 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -163,6 +163,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Дзвінок беззвучний."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Видалити додаток <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Програму <xliff:g id="APP">%s</xliff:g> закрито."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Усі останні додатки закрито."</string>
@@ -214,6 +216,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Мобільну точку доступу вимкнено."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Мобільну точку доступу ввімкнено."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Трансляцію екрана зупинено."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Яскравість дисплея"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Передавання даних 2G–3G призупинено"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Передавання даних 4G призупинено"</string>
@@ -291,6 +301,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Використовується: <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Обмеження: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Застереження: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Ваші останні екрани відображаються тут"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Інформація про додаток"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"закріпити екран"</string>
@@ -405,7 +417,8 @@
<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="1826889705095768656">"Торкніться, щоб відновити оригінал."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Ви в робочому профілі"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"System UI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Показувати заряд акумулятора у відсотках"</string>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index b9da6e3..9d42aad 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنگر خاموش۔"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"<xliff:g id="APP">%s</xliff:g> کو مسترد کریں۔"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> کو ہٹا دیا گیا۔"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"سبھی حالیہ ایپلیکیشنز کو برخاست کر دیا گیا۔"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"موبائل ہاٹ اسپاٹ کو آف کر دیا گیا۔"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"موبائل ہاٹ اسپاٹ کو آن کر دیا گیا۔"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"اسکرین کو کاسٹ کرنا بند کر دیا۔"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"ڈسپلے کی چمک"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ڈیٹا موقوف کر دیا گیا"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ڈیٹا موقوف کر دیا گیا"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> استعمال کردہ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> حد"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> وارننگ"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"آپ کی حالیہ اسکرینز یہاں ظاہر ہوتی ہیں"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"ایپلیکیشن کی معلومات"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"اسکرین کو پن کرنا"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"اصل کو بحال کرنے کیلئے ٹچ کریں۔"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"،"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"آپ اپنا دفتری پروفائل استعمال کر رہے ہیں۔"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"سسٹم UI ٹیونر"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"سرایت کردہ بیٹری کی فیصد دکھائیں"</string>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index 67cd123..f7959ea 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ovozsiz qo‘ng‘iroq."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Olib tashlash: <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> olib tashlangan."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Yaqinda ishlatilgan barcha ilovalar olib tashlandi."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Mobil ulanish nuqtasi o‘chirildi."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Mobil ulanish nuqtasi yoqildi."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ekranni translatsiya qilish to‘xtadi."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekran yorqinligi"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G internet to‘xtatib qo‘yildi"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G internet to‘xtatib qo‘yildi"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> foydalanilgan"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Cheklov: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Ogohlantirish: <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Siz yaqinda ishlatgan ilova ekranlari bu yerda ko‘rinadi"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Ilova haqida ma’lumot"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"o‘zgarmas ekran"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Aslini tiklash uchun bosing."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Siz ishchi profildan foydalanmoqdasiz"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"SystemUI Tuner"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Batareya foizi ko‘rsatilsin"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index aa81068..ffcc73a 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Chuông im lặng."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Xóa bỏ <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> đã bị loại bỏ."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Đã bỏ qua tất cả các ứng dụng gần đây."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"Đã tắt điểm phát sóng di động."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"Đã bật điểm phát sóng di động."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Đã ngừng truyền màn hình."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Độ sáng màn hình"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"Đã tạm dừng dữ liệu 2G-3G"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"Đã tạm dừng dữ liệu 4G"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"Đã sử dụng <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Giới hạn <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Cảnh báo <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Màn hình gần đây của bạn sẽ xuất hiện tại đây"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"khóa màn hình"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Chạm để khôi phục bản gốc."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<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 name="system_ui_tuner" msgid="708224127392452018">"Bộ điều hướng giao diện người dùng hệ thống"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Hiển thị tỷ lệ phần trăm pin được nhúng"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index fa69975..2d8dd2a 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"振铃器静音。"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"移除<xliff:g id="APP">%s</xliff:g>。"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"已删除<xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"已关闭所有最近用过的应用。"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"移动热点已关闭。"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"移动热点已开启。"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"屏幕投射已停止。"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"屏幕亮度"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 数据网络已暂停使用"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 数据网络已暂停使用"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"已使用<xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上限为<xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g>警告"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"您最近浏览过的屏幕会显示在此处"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信息"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"固定屏幕"</string>
@@ -326,8 +338,8 @@
<string name="interruption_level_priority_twoline" msgid="1564715335217164124">"仅限\n优先打扰"</string>
<string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"仅限\n闹钟"</string>
<string name="keyguard_indication_charging_time" msgid="1757251776872835768">"正在充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string>
- <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="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>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"触摸即可恢复原始设置。"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"、"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您当前正在使用工作资料"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"系统界面调谐器"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"嵌入式显示电池电量百分比 显示嵌入的电池电量百分比"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 7375a92..569d847 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"鈴聲靜音。"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"所有最近使用的應用程式均已關閉。"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"流動熱點已關閉。"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"流動熱點已開啟。"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"已停止投放螢幕。"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"顯示光暗度"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"已使用 <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上限為 <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 警告"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"您最近的螢幕顯示在這裡"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資料"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"輕觸即可復原。"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"、"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您正在使用工作設定檔"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"系統使用者介面調諧器"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"顯示嵌入的電池百分比"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 5edda84..f2ffe16 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"鈴聲靜音。"</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"關閉「<xliff:g id="APP">%s</xliff:g>」。"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"最近使用的應用程式已全部關閉。"</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"可攜式無線基地台已關閉。"</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"可攜式無線基地台已開啟。"</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"已停止投放螢幕。"</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"螢幕亮度"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"已暫停 2G-3G 數據連線"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"已暫停 4G 數據連線"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"已使用 <xliff:g id="DATA_USED">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"上限為 <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> 警告"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"您最近的螢幕會顯示在這裡"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"輕觸這裡即可恢復原始設定。"</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">"、"</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"您正在使用 Work 設定檔"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"系統使用者介面調整精靈"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"顯示嵌入式電池百分比"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 51c4389..efa04e6 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -161,6 +161,8 @@
<string name="accessibility_ringer_silent" msgid="9061243307939135383">"Isikhali sithulile."</string>
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
+ <!-- no translation found for accessibility_work_mode (2478631941714607225) -->
+ <skip />
<string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Cashisa i-<xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ivaliwe."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Zonke izinhlelo zokusebenza zakamuva zicashisiwe."</string>
@@ -212,6 +214,14 @@
<string name="accessibility_quick_settings_hotspot_changed_off" msgid="5004708003447561394">"I-hotspot ivaliwe."</string>
<string name="accessibility_quick_settings_hotspot_changed_on" msgid="2890951609226476206">"I-hotspot ivuliwe."</string>
<string name="accessibility_casting_turned_off" msgid="1430668982271976172">"Ukusakaza kwesikrini kumisiwe."</string>
+ <!-- no translation found for accessibility_quick_settings_work_mode_off (7045417396436552890) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_on (7650588553988014341) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_off (5605534876107300711) -->
+ <skip />
+ <!-- no translation found for accessibility_quick_settings_work_mode_changed_on (249840330756998612) -->
+ <skip />
<string name="accessibility_brightness" msgid="8003681285547803095">"Bonisa ukukhanya"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G idatha imisiwe"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G idatha imisiwe"</string>
@@ -289,6 +299,8 @@
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> isetshenzisiwe"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> umkhawulo"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"<xliff:g id="DATA_LIMIT">%s</xliff:g> isexwayiso"</string>
+ <!-- no translation found for quick_settings_work_mode_label (6244915274350490429) -->
+ <skip />
<string name="recents_empty_message" msgid="8682129509540827999">"Izikrini zakho zakamuva zivela lapha"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ukuphina isikrini"</string>
@@ -403,7 +415,8 @@
<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="1826889705095768656">"Thinta ukuze ubuyisele kokwangempela."</string>
- <string name="group_summary_concadenation" msgid="2705151242008937028">","</string>
+ <!-- no translation found for group_summary_concadenation (6846402378100148789) -->
+ <skip />
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Usebenzisa iphrofayela yakho yomsebenzi"</string>
<string name="system_ui_tuner" msgid="708224127392452018">"Isishuni se-UI yesistimu"</string>
<string name="show_battery_percentage" msgid="5444136600512968798">"Bonisa amaphesenti ebhethri elinamathiselwe"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index bfd8af9..5618e9b 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -21,7 +21,6 @@
<drawable name="ticker_background_color">#ff1d1d1d</drawable>
<drawable name="system_bar_background">@color/system_bar_background_opaque</drawable>
<color name="system_bar_background_opaque">#ff000000</color>
- <color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black -->
<color name="system_bar_background_transparent">#00000000</color>
<color name="notification_panel_solid_background">#ff000000</color>
<drawable name="status_bar_notification_row_background_color">#ff090909</drawable>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 902db26..388da17 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -117,7 +117,7 @@
<integer name="quick_settings_brightness_dialog_long_timeout">4000</integer>
<!-- The maximum number of items to be displayed in quick settings -->
- <integer name="quick_settings_detail_max_item_count">7</integer>
+ <integer name="quick_settings_detail_max_item_count">5</integer>
<!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
<bool name="config_show4GForLTE">true</bool>
@@ -175,7 +175,7 @@
<integer name="recents_animate_task_view_remove_duration">250</integer>
<!-- The animation duration for scrolling the stack to a particular item. -->
- <integer name="recents_animate_task_stack_scroll_duration">225</integer>
+ <integer name="recents_animate_task_stack_scroll_duration">200</integer>
<!-- The animation duration for entering and exiting the history. -->
<integer name="recents_history_transition_duration">250</integer>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 086e9f4..8737d43 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -36,18 +36,6 @@
<!-- The font size for the clock -->
<dimen name="status_bar_clock_size">14sp</dimen>
- <!-- The margin on the start of the content view -->
- <dimen name="notification_content_margin_start">16dp</dimen>
-
- <!-- The maximum size of the title when in single line mode -->
- <dimen name="notification_maximum_title_length">150sp</dimen>
-
- <!-- The margin on the end of the content view -->
- <dimen name="notification_content_margin_end">8dp</dimen>
-
- <!-- Height of a single line notification in the status bar -->
- <dimen name="notification_single_line_height">32sp</dimen>
-
<!-- Height of a small notification in the status bar-->
<dimen name="notification_min_height">84dp</dimen>
@@ -57,8 +45,11 @@
<!-- Height of a large notification in the status bar -->
<dimen name="notification_max_height">276dp</dimen>
- <!-- Height of a medium notification in the status bar -->
- <dimen name="notification_mid_height">128dp</dimen>
+ <!-- Height of a heads up notification in the status bar for legacy custom views -->
+ <dimen name="notification_max_heads_up_height_legacy">128dp</dimen>
+
+ <!-- Height of a heads up notification in the status bar -->
+ <dimen name="notification_max_heads_up_height">140dp</dimen>
<!-- Height of a the summary ("more card") notification on keyguard. -->
<dimen name="notification_summary_height">44dp</dimen>
@@ -107,7 +98,7 @@
<dimen name="close_handle_underlap">32dp</dimen>
<!-- Height of the status bar header bar -->
- <dimen name="status_bar_header_height">60dp</dimen>
+ <dimen name="status_bar_header_height">90dp</dimen>
<!-- Height of the status bar header bar when expanded -->
<dimen name="status_bar_header_height_expanded">116dp</dimen>
@@ -173,7 +164,7 @@
<dimen name="borderless_button_radius">2dp</dimen>
<!-- How far the expanded QS panel peeks from the header in collapsed state. -->
- <dimen name="qs_peek_height">8dp</dimen>
+ <dimen name="qs_peek_height">0dp</dimen>
<!-- Zen mode panel: condition item button padding -->
<dimen name="zen_mode_condition_detail_button_padding">8dp</dimen>
@@ -351,8 +342,11 @@
<!-- radius of the corners of the material rounded rect background but negative-->
<dimen name="notification_material_rounded_rect_radius_negative">-2dp</dimen>
- <!-- The padding between notification children -->
- <dimen name="notification_children_padding">2dp</dimen>
+ <!-- The padding between notification children when collapsed -->
+ <dimen name="notification_children_padding">4dp</dimen>
+
+ <!-- The padding on top of the first notification to the children container -->
+ <dimen name="notification_children_container_top_padding">8dp</dimen>
<!-- The height of the divider between the notfication children -->
<dimen name="notification_children_divider_height">1dp</dimen>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index d6a361c..666a024 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -401,6 +401,9 @@
<!-- Content description of the cast icon in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_casting">@string/quick_settings_casting</string>
+ <!-- Content description of the work mode icon in the notification panel for accessibility (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_work_mode">Work mode</string>
+
<!-- Content description to tell the user that this button will remove an application from recents -->
<string name="accessibility_recents_item_will_be_dismissed">Dismiss <xliff:g id="app" example="Calendar">%s</xliff:g>.</string>
<!-- Content description to tell the user an application has been removed from recents -->
@@ -505,6 +508,14 @@
<string name="accessibility_quick_settings_hotspot_changed_on">Mobile hotspot turned on.</string>
<!-- Announcement made when the screen stopped casting (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_casting_turned_off">Screen casting stopped.</string>
+ <!-- Content description of the work mode title in quick settings when off (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_work_mode_off">Work mode off.</string>
+ <!-- Content description of the work mode title in quick settings when on (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_work_mode_on">Work mode on.</string>
+ <!-- Announcement made when the work mode changes to off (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_work_mode_changed_off">Work mode turned off.</string>
+ <!-- Announcement made when the work mode changes to on (not shown on the screen). [CHAR LIMIT=NONE] -->
+ <string name="accessibility_quick_settings_work_mode_changed_on">Work mode turned on.</string>
<!-- Content description of the display brightness slider (not shown on the screen). [CHAR LIMIT=NONE] -->
<string name="accessibility_brightness">Display brightness</string>
@@ -687,6 +698,8 @@
<string name="quick_settings_cellular_detail_data_limit"><xliff:g id="data_limit" example="2.0 GB">%s</xliff:g> limit</string>
<!-- QuickSettings: Cellular detail panel, data warning format string [CHAR LIMIT=NONE] -->
<string name="quick_settings_cellular_detail_data_warning"><xliff:g id="data_limit" example="2.0 GB">%s</xliff:g> warning</string>
+ <!-- QuickSettings: Work mode [CHAR LIMIT=NONE] -->
+ <string name="quick_settings_work_mode_label">Work mode</string>
<!-- Recents: The empty recents string. [CHAR LIMIT=NONE] -->
<string name="recents_empty_message">Your recent screens appear here</string>
@@ -1025,8 +1038,8 @@
<!-- VolumeUI restoration notification: text -->
<string name="volumeui_notification_text">Touch to restore the original.</string>
- <!-- Describes the way 2 names are concatenated. An example would be ", " to produce "Peter Muller, Paul Curry". Please also include a space here if it's appropriate in the language and if it's a RTL language include it on the left. [CHAR LIMIT=3] -->
- <string name="group_summary_concadenation">, </string>
+ <!-- Describes the way 2 names are concatenated. An example would be ", " to produce "Peter Muller, Paul Curry". Please also include a space here if it's appropriate in the language and if it's a RTL language include it on the left. The translation should start and end with " to keep the white space if desired [CHAR LIMIT=5] -->
+ <string name="group_summary_concadenation">", "</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>
@@ -1171,13 +1184,23 @@
<!-- Toggles fullscreen screenshots. DO NOT TRANSLATE -->
<string name="overview_fullscreen_thumbnails">Enable fullscreen screenshots</string>
<!-- Description for the toggle for fullscreen screenshots. DO NOT TRANSLATE -->
- <string name="overview_fullscreen_thumbnails_desc">Enable fullscreen screenshots in Overview</string>
+ <string name="overview_fullscreen_thumbnails_desc">Enable fullscreen screenshots in Overview. Restart required.</string>
+
+ <!-- Toggle to enable the Overview nav bar gesture. DO NOT TRANSLATE -->
+ <string name="overview_nav_bar_gesture">Enable navigation bar gesture</string>
+ <!-- Description for the toggle to enable the Overview nav bar gesture. DO NOT TRANSLATE -->
+ <string name="overview_nav_bar_gesture_desc">Enables the gesture to enter Overview by swiping up on the Nav bar</string>
<!-- Toggle to show the history view in Overview. DO NOT TRANSLATE -->
<string name="overview_show_history">Show History</string>
<!-- Description for the toggle to show the history view in Overview. DO NOT TRANSLATE -->
<string name="overview_show_history_desc">Enables the history view to see more recent tasks</string>
+ <!-- Toggle to set the initial scroll state to be paging or stack. DO NOT TRANSLATE -->
+ <string name="overview_initial_state_paging">Initialize to paging</string>
+ <!-- Description for the toggle to set the initial scroll state to be paging or stack. DO NOT TRANSLATE -->
+ <string name="overview_initial_state_paging_desc">Determines whether Overview will initially be in a stacked or paged state</string>
+
<!-- Category in the System UI Tuner settings, where new/experimental
settings are -->
<string name="experimental">Experimental</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 2fd0fe5..47ad6dc 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -311,6 +311,8 @@
<style name="DockedDividerHandle">
<item name="android:layout_gravity">center_horizontal</item>
+ <item name="android:layout_width">64dp</item>
+ <item name="android:layout_height">48dp</item>
</style>
</resources>
diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml
index f398af3..e31927e 100644
--- a/packages/SystemUI/res/xml/tuner_prefs.xml
+++ b/packages/SystemUI/res/xml/tuner_prefs.xml
@@ -18,25 +18,10 @@
xmlns:sysui="http://schemas.android.com/apk/res-auto"
android:title="@string/system_ui_tuner">
- <PreferenceScreen
- android:title="@string/quick_settings">
-
- <PreferenceCategory
- android:title="@string/experimental">
-
- <com.android.systemui.tuner.TunerSwitch
- android:key="qs_show_brightness"
- android:title="@string/show_brightness"
- sysui:defValue="true" />
-
- <com.android.systemui.tuner.QSPagingSwitch
- android:key="qs_paged_panel"
- android:title="@string/qs_paging" />
-
- </PreferenceCategory>
-
- </PreferenceScreen>
-
+ <com.android.systemui.tuner.TunerSwitch
+ android:key="qs_show_brightness"
+ android:title="@string/show_brightness"
+ sysui:defValue="true" />
<PreferenceScreen
android:title="@string/status_bar" >
@@ -93,11 +78,21 @@
android:summary="@string/overview_page_on_toggle_desc" />
<com.android.systemui.tuner.TunerSwitch
+ android:key="overview_initial_state_paging"
+ android:title="@string/overview_initial_state_paging"
+ android:summary="@string/overview_initial_state_paging_desc" />
+
+ <com.android.systemui.tuner.TunerSwitch
android:key="overview_fast_toggle"
android:title="@string/overview_fast_toggle_via_button"
android:summary="@string/overview_fast_toggle_via_button_desc" />
<com.android.systemui.tuner.TunerSwitch
+ android:key="overview_nav_bar_gesture"
+ android:title="@string/overview_nav_bar_gesture"
+ android:summary="@string/overview_nav_bar_gesture_desc" />
+
+ <com.android.systemui.tuner.TunerSwitch
android:key="overview_fullscreen_thumbnails"
android:title="@string/overview_fullscreen_thumbnails"
android:summary="@string/overview_fullscreen_thumbnails_desc" />
diff --git a/packages/SystemUI/src/com/android/systemui/QSQuickTileView.java b/packages/SystemUI/src/com/android/systemui/QSQuickTileView.java
deleted file mode 100644
index 3362650..0000000
--- a/packages/SystemUI/src/com/android/systemui/QSQuickTileView.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open 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.content.Context;
-import android.view.View;
-import android.widget.ImageView;
-import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileBaseView;
-
-public class QSQuickTileView extends QSTileBaseView {
-
- private final int mPadding;
- private final ImageView mIcon;
-
- public QSQuickTileView(Context context) {
- super(context);
- mPadding = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_padding);
- mIcon = createIcon();
- addView(mIcon);
- }
-
- protected ImageView createIcon() {
- final ImageView icon = new ImageView(mContext);
- icon.setId(android.R.id.icon);
- icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
- return icon;
- }
-
- @Override
- public void init(OnClickListener click, OnClickListener clickSecondary,
- OnLongClickListener longClick) {
- setClickable(true);
- setOnClickListener(click);
- }
-
- @Override
- protected void handleStateChanged(QSTile.State state) {
- mIcon.setImageDrawable(state.icon.getDrawable(getContext()));
- setContentDescription(state.contentDescription);
- }
-
- @Override
- public boolean setType(int type) {
- return false;
- }
-
- @Override
- public View updateAccessibilityOrder(View previousView) {
- return this;
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- mIcon.measure(exactly(getMeasuredWidth() - 2 * mPadding),
- exactly(getMeasuredHeight() - 2 * mPadding));
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- layout(mIcon, mPadding, mPadding);
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
index 4cb8a3c..7f6cda0 100644
--- a/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
+++ b/packages/SystemUI/src/com/android/systemui/RecentsComponent.java
@@ -32,7 +32,7 @@
/**
* Docks the top-most task and opens recents.
*/
- void dockTopTask(boolean draggingInRecents, Rect initialBounds);
+ void dockTopTask(boolean draggingInRecents, int stackCreateMode, Rect initialBounds);
/**
* Called during a drag-from-navbar-in gesture.
diff --git a/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java b/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java
index 5b8d3d6..c9ba885 100644
--- a/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/ViewInvertHelper.java
@@ -19,6 +19,7 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
+import android.content.Context;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
@@ -35,13 +36,19 @@
private final Paint mDarkPaint = new Paint();
private final Interpolator mLinearOutSlowInInterpolator;
- private final ArrayList<View> mTargets;
private final ColorMatrix mMatrix = new ColorMatrix();
private final ColorMatrix mGrayscaleMatrix = new ColorMatrix();
private final long mFadeDuration;
+ private final ArrayList<View> mTargets = new ArrayList<>();
- public ViewInvertHelper(View target, long fadeDuration) {
- this(constructArray(target), fadeDuration);
+ public ViewInvertHelper(View v, long fadeDuration) {
+ this(v.getContext(), fadeDuration);
+ addTarget(v);
+ }
+ public ViewInvertHelper(Context context, long fadeDuration) {
+ mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
+ android.R.interpolator.linear_out_slow_in);
+ mFadeDuration = fadeDuration;
}
private static ArrayList<View> constructArray(View target) {
@@ -50,11 +57,12 @@
return views;
}
- public ViewInvertHelper(ArrayList<View> targets, long fadeDuration) {
- mTargets = targets;
- mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(mTargets.get(0).getContext(),
- android.R.interpolator.linear_out_slow_in);
- mFadeDuration = fadeDuration;
+ public void clearTargets() {
+ mTargets.clear();
+ }
+
+ public void addTarget(View target) {
+ mTargets.add(target);
}
public void fade(final boolean invert, long delay) {
@@ -112,4 +120,12 @@
mMatrix.preConcat(mGrayscaleMatrix);
mDarkPaint.setColorFilter(new ColorMatrixColorFilter(mMatrix));
}
+
+ public void setInverted(boolean invert, boolean fade, long delay) {
+ if (fade) {
+ fade(invert, delay);
+ } else {
+ update(invert);
+ }
+ }
}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index eee685f..443778e 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -43,6 +43,7 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.StorageManager;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -135,6 +136,8 @@
private static final String DELAYED_KEYGUARD_ACTION =
"com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD";
+ private static final String DELAYED_LOCK_PROFILE_ACTION =
+ "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_LOCK";
// used for handler messages
private static final int SHOW = 2;
@@ -322,6 +325,8 @@
private boolean mWakeAndUnlocking;
private IKeyguardDrawnCallback mDrawnCallback;
+ private boolean mIsPerUserLock;
+
KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
@Override
@@ -565,6 +570,8 @@
mShowKeyguardWakeLock.setReferenceCounted(false);
mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(DELAYED_KEYGUARD_ACTION));
+ mContext.registerReceiver(
+ mBroadcastReceiver, new IntentFilter(DELAYED_LOCK_PROFILE_ACTION));
mKeyguardDisplayManager = new KeyguardDisplayManager(mContext);
@@ -637,6 +644,7 @@
doKeyguardLocked(null);
mUpdateMonitor.registerCallback(mUpdateCallback);
}
+ mIsPerUserLock = StorageManager.isFileBasedEncryptionEnabled();
// Most services aren't available until the system reaches the ready state, so we
// send it here when the device first boots.
maybeSendUserPresentBroadcast();
@@ -660,7 +668,7 @@
final boolean lockImmediately =
mLockPatternUtils.getPowerButtonInstantlyLocks(currentUser)
|| !mLockPatternUtils.isSecure(currentUser);
- long timeout = getLockTimeout();
+ long timeout = getLockTimeout(KeyguardUpdateMonitor.getCurrentUser());
if (mExitSecureCallback != null) {
if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled");
@@ -710,10 +718,11 @@
mPendingLock = false;
}
}
+ doKeyguardLaterLockedForChildProfiles();
KeyguardUpdateMonitor.getInstance(mContext).dispatchFinishedGoingToSleep(why);
}
- private long getLockTimeout() {
+ private long getLockTimeout(int userId) {
// if the screen turned off because of timeout or the user hit the power button
// and we don't need to lock immediately, set an alarm
// to enable it a little bit later (i.e, give the user a chance
@@ -721,10 +730,6 @@
// having to unlock the screen)
final ContentResolver cr = mContext.getContentResolver();
- // From DisplaySettings
- long displayTimeout = Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT,
- KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT);
-
// From SecuritySettings
final long lockAfterTimeout = Settings.Secure.getInt(cr,
Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
@@ -732,21 +737,28 @@
// From DevicePolicyAdmin
final long policyTimeout = mLockPatternUtils.getDevicePolicyManager()
- .getMaximumTimeToLock(null, KeyguardUpdateMonitor.getCurrentUser());
+ .getMaximumTimeToLock(null, userId);
long timeout;
- if (policyTimeout > 0) {
+
+ UserInfo user = UserManager.get(mContext).getUserInfo(userId);
+ if ((!user.isManagedProfile() && LockPatternUtils.isSeparateWorkChallengeEnabled())
+ || policyTimeout <= 0) {
+ timeout = lockAfterTimeout;
+ } else {
+ // From DisplaySettings
+ long displayTimeout = Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT,
+ KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT);
+
// policy in effect. Make sure we don't go beyond policy limit.
displayTimeout = Math.max(displayTimeout, 0); // ignore negative values
timeout = Math.min(policyTimeout - displayTimeout, lockAfterTimeout);
- } else {
- timeout = lockAfterTimeout;
}
return timeout;
}
private void doKeyguardLaterLocked() {
- long timeout = getLockTimeout();
+ long timeout = getLockTimeout(KeyguardUpdateMonitor.getCurrentUser());
if (timeout == 0) {
doKeyguardLocked(null);
} else {
@@ -764,6 +776,25 @@
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender);
if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = "
+ mDelayedShowingSequence);
+ doKeyguardLaterLockedForChildProfiles();
+ }
+
+ private void doKeyguardLaterLockedForChildProfiles() {
+ UserManager um = UserManager.get(mContext);
+ List<UserInfo> profiles = um.getEnabledProfiles(UserHandle.myUserId());
+ if (LockPatternUtils.isSeparateWorkChallengeEnabled() && profiles.size() > 1) {
+ for (UserInfo info : profiles) {
+ if (info.id != UserHandle.myUserId() && info.isManagedProfile()) {
+ long userTimeout = getLockTimeout(info.id);
+ long userWhen = SystemClock.elapsedRealtime() + userTimeout;
+ Intent lockIntent = new Intent(DELAYED_LOCK_PROFILE_ACTION);
+ lockIntent.putExtra(Intent.EXTRA_USER_ID, info.id);
+ PendingIntent lockSender = PendingIntent.getBroadcast(
+ mContext, 0, lockIntent, PendingIntent.FLAG_CANCEL_CURRENT);
+ mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, userWhen, lockSender);
+ }
+ }
+ }
}
private void cancelDoKeyguardLaterLocked() {
@@ -1099,6 +1130,10 @@
showLocked(options);
}
+ private void lockProfile(int userId) {
+ mTrustManager.setDeviceLockedForUser(userId, true);
+ }
+
private boolean shouldWaitForProvisioning() {
return !mUpdateMonitor.isDeviceProvisioned() && !isSecure();
}
@@ -1213,8 +1248,13 @@
if (DEBUG) Log.d(TAG, "received DELAYED_KEYGUARD_ACTION with seq = "
+ sequence + ", mDelayedShowingSequence = " + mDelayedShowingSequence);
synchronized (KeyguardViewMediator.this) {
- if (mDelayedShowingSequence == sequence) {
- doKeyguardLocked(null);
+ doKeyguardLocked(null);
+ }
+ } else if (DELAYED_LOCK_PROFILE_ACTION.equals(intent.getAction())) {
+ int userId = intent.getIntExtra(Intent.EXTRA_USER_ID, 0);
+ if (userId != 0) {
+ synchronized (KeyguardViewMediator.this) {
+ lockProfile(userId);
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
index 0e4a4e5..ca4a03a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java
@@ -73,11 +73,6 @@
}
@Override
- public void setTileVisibility(TileRecord tile, int visibility) {
- tile.tileView.setVisibility(visibility);
- }
-
- @Override
public void addTile(TileRecord tile) {
mTiles.add(tile);
distributeTiles();
@@ -101,10 +96,6 @@
final int NT = mTiles.size();
for (int i = 0; i < NT; i++) {
TileRecord tile = mTiles.get(i);
- if (tile.tile.getTileType() == QSTileView.QS_TYPE_QUICK) {
- // Don't show any quick tiles for now.
- continue;
- }
if (mPages.get(index).isFull()) {
if (++index == mPages.size()) {
if (DEBUG) Log.d(TAG, "Adding page for " + tile.tile.getClass().getSimpleName());
@@ -178,7 +169,6 @@
public TilePage(Context context, AttributeSet attrs) {
super(context, attrs);
- mAllowDual = false;
updateResources();
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java b/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java
index cb6708e..699273a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/PseudoGridView.java
@@ -98,7 +98,7 @@
}
}
- setMeasuredDimension(width, getDefaultSize(totalHeight, heightMeasureSpec));
+ setMeasuredDimension(width, resolveSizeAndState(totalHeight, heightMeasureSpec, 0));
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java
new file mode 100644
index 0000000..b56ad76
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Animatable;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import com.android.systemui.R;
+
+import java.util.Objects;
+
+public class QSIconView extends ViewGroup {
+
+ private final View mIcon;
+ private final int mIconSizePx;
+ private final int mTilePaddingBelowIconPx;
+
+ public QSIconView(Context context) {
+ super(context);
+
+ final Resources res = context.getResources();
+ mIconSizePx = res.getDimensionPixelSize(R.dimen.qs_tile_icon_size);
+ mTilePaddingBelowIconPx = res.getDimensionPixelSize(R.dimen.qs_tile_padding_below_icon);
+
+ mIcon = createIcon();
+ addView(mIcon);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final int w = MeasureSpec.getSize(widthMeasureSpec);
+ final int iconSpec = exactly(mIconSizePx);
+ mIcon.measure(MeasureSpec.makeMeasureSpec(w, getIconMeasureMode()), iconSpec);
+ setMeasuredDimension(w, mIcon.getMeasuredHeight() + mTilePaddingBelowIconPx);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ final int w = getMeasuredWidth();
+ final int h = getMeasuredHeight();
+ int top = 0;
+ final int iconLeft = (w - mIcon.getMeasuredWidth()) / 2;
+ layout(mIcon, iconLeft, top);
+ }
+
+ public void setIcon(QSTile.State state) {
+ setIcon((ImageView) mIcon, state);
+ }
+
+ protected void setIcon(ImageView iv, QSTile.State state) {
+ if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) {
+ Drawable d = state.icon != null ? state.icon.getDrawable(mContext) : null;
+ if (d != null && state.autoMirrorDrawable) {
+ d.setAutoMirrored(true);
+ }
+ iv.setImageDrawable(d);
+ iv.setTag(R.id.qs_icon_tag, state.icon);
+ if (d instanceof Animatable) {
+ Animatable a = (Animatable) d;
+ if (state.icon instanceof QSTile.AnimationIcon && !iv.isShown()) {
+ a.stop(); // skip directly to end state
+ }
+ }
+ }
+
+ }
+
+ protected int getIconMeasureMode() {
+ return MeasureSpec.EXACTLY;
+ }
+
+ protected View createIcon() {
+ final ImageView icon = new ImageView(mContext);
+ icon.setId(android.R.id.icon);
+ icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+ return icon;
+ }
+
+ protected static int exactly(int size) {
+ return MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
+ }
+
+ protected static void layout(View child, int left, int top) {
+ child.layout(left, top, left + child.getMeasuredWidth(), top + child.getMeasuredHeight());
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index bb2b8fc..ae8542a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -19,14 +19,12 @@
import android.animation.Animator;
import android.animation.Animator.AnimatorListener;
import android.animation.AnimatorListenerAdapter;
-import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Handler;
import android.os.Message;
-import android.provider.Settings;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
@@ -36,7 +34,6 @@
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
-
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
@@ -56,7 +53,6 @@
public class QSPanel extends FrameLayout implements Tunable {
public static final String QS_SHOW_BRIGHTNESS = "qs_show_brightness";
- public static final String QS_THE_NEW_QS = "qs_paged_panel";
protected final Context mContext;
protected final ArrayList<TileRecord> mRecords = new ArrayList<TileRecord>();
@@ -102,20 +98,25 @@
updateDetailText();
mDetail.setVisibility(GONE);
mDetail.setClickable(true);
- mBrightnessView = LayoutInflater.from(context).inflate(
- R.layout.quick_settings_brightness_dialog, this, false);
- mFooter = new QSFooter(this, context);
addView(mDetail);
mQsContainer = new LinearLayout(mContext);
mQsContainer.setOrientation(LinearLayout.VERTICAL);
mQsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT));
-
addView(mQsContainer);
+ mBrightnessView = LayoutInflater.from(context).inflate(
+ R.layout.quick_settings_brightness_dialog, this, false);
mQsContainer.addView(mBrightnessView);
+
+ mTileLayout = (QSTileLayout) LayoutInflater.from(mContext).inflate(
+ R.layout.qs_paged_tile_layout, mQsContainer, false);
+ mQsContainer.addView((View) mTileLayout);
+
+ mFooter = new QSFooter(this, context);
mQsContainer.addView(mFooter.getView());
+
mClipper = new QSDetailClipper(mDetail);
updateResources();
@@ -136,7 +137,7 @@
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
- TunerService.get(mContext).addTunable(this, QS_SHOW_BRIGHTNESS, QS_THE_NEW_QS);
+ TunerService.get(mContext).addTunable(this, QS_SHOW_BRIGHTNESS);
}
@Override
@@ -150,36 +151,15 @@
if (QS_SHOW_BRIGHTNESS.equals(key)) {
mBrightnessView.setVisibility(newValue == null || Integer.parseInt(newValue) != 0
? VISIBLE : GONE);
- } else if (QS_THE_NEW_QS.equals(key)) {
- boolean theNewQs = newValue != null && Integer.parseInt(newValue) != 0;
- if (mTileLayout != null) {
- for (int i = 0; i < mRecords.size(); i++) {
- mTileLayout.removeTile(mRecords.get(i));
- }
- mQsContainer.removeView((View) mTileLayout);
- }
- int layout = theNewQs
- ? R.layout.qs_paged_tile_layout : R.layout.qs_tile_layout;
- mTileLayout =
- (QSTileLayout) LayoutInflater.from(mContext).inflate(layout, mQsContainer, false);
- mQsContainer.addView((View) mTileLayout, 1 /* Between brightness and footer */);
- for (int i = 0; i < mRecords.size(); i++) {
- mTileLayout.addTile(mRecords.get(i));
- }
- if (theNewQs) {
- mCustomizePanel = (QSCustomizer) LayoutInflater.from(mContext)
- .inflate(R.layout.qs_customize_panel, null);
- mCustomizePanel.setHost(mHost);
- } else {
- if (mCustomizePanel != null && mCustomizePanel.isCustomizing()) {
- mCustomizePanel.hide(mCustomizePanel.getWidth() / 2,
- mCustomizePanel.getHeight() / 2);
- }
- mCustomizePanel = null;
- }
}
}
+ protected void createCustomizePanel() {
+ mCustomizePanel = (QSCustomizer) LayoutInflater.from(mContext)
+ .inflate(R.layout.qs_customize_panel, null);
+ mCustomizePanel.setHost(mHost);
+ }
+
private void updateDetailText() {
mDetailDoneButton.setText(R.string.quick_settings_done);
mDetailSettingsButton.setText(R.string.quick_settings_more_settings);
@@ -200,6 +180,7 @@
public void setHost(QSTileHost host) {
mHost = host;
mFooter.setHost(host);
+ createCustomizePanel();
}
public QSTileHost getHost() {
@@ -298,19 +279,10 @@
showDetail(show, r);
}
- private void showDetail(boolean show, Record r) {
+ protected void showDetail(boolean show, Record r) {
mHandler.obtainMessage(H.SHOW_DETAIL, show ? 1 : 0, 0, r).sendToTarget();
}
- private void setTileVisibility(TileRecord record, int visibility) {
- mHandler.obtainMessage(H.SET_TILE_VISIBILITY, visibility, 0, record).sendToTarget();
- }
-
- private void handleSetTileVisibility(TileRecord tile, int visibility) {
- if (visibility == tile.tileView.getVisibility()) return;
- mTileLayout.setTileVisibility(tile, visibility);
- }
-
public void setTiles(Collection<QSTile<?>> tiles) {
for (TileRecord record : mRecords) {
mTileLayout.removeTile(record);
@@ -325,16 +297,17 @@
}
private void drawTile(TileRecord r, QSTile.State state) {
- final int visibility = state.visible ? VISIBLE : GONE;
- setTileVisibility(r, visibility);
r.tileView.onStateChanged(state);
}
+ protected QSTileBaseView createTileView(QSTile<?> tile) {
+ return new QSTileView(mContext, tile.createTileView(mContext));
+ }
+
protected void addTile(final QSTile<?> tile) {
final TileRecord r = new TileRecord();
r.tile = tile;
- r.tileView = tile.createTileView(mContext);
- r.tileView.setVisibility(View.GONE);
+ r.tileView = createTileView(tile);
final QSTile.Callback callback = new QSTile.Callback() {
@Override
public void onStateChanged(QSTile.State state) {
@@ -369,13 +342,7 @@
final View.OnClickListener click = new View.OnClickListener() {
@Override
public void onClick(View v) {
- r.tile.click();
- }
- };
- final View.OnClickListener clickSecondary = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- r.tile.secondaryClick();
+ onTileClick(r.tile);
}
};
final View.OnLongClickListener longClick = new View.OnLongClickListener() {
@@ -396,7 +363,7 @@
return true;
}
};
- r.tileView.init(click, clickSecondary, longClick);
+ r.tileView.init(click, longClick);
r.tile.setListening(mListening);
callback.onStateChanged(r.tile.getState());
r.tile.refreshState();
@@ -407,6 +374,10 @@
}
}
+ protected void onTileClick(QSTile<?> tile) {
+ tile.click();
+ }
+
public boolean isShowingDetail() {
return mDetailRecord != null
|| (mCustomizePanel != null && mCustomizePanel.isCustomizing());
@@ -429,7 +400,7 @@
return mQsContainer.getMeasuredHeight();
}
- private void handleShowDetail(Record r, boolean show) {
+ protected void handleShowDetail(Record r, boolean show) {
if (r instanceof TileRecord) {
handleShowDetailTile((TileRecord) r, show);
} else {
@@ -515,9 +486,7 @@
private void logTiles() {
for (int i = 0; i < mRecords.size(); i++) {
TileRecord tileRecord = mRecords.get(i);
- if (tileRecord.tile.getState().visible) {
- MetricsLogger.visible(mContext, tileRecord.tile.getMetricsCategory());
- }
+ MetricsLogger.visible(mContext, tileRecord.tile.getMetricsCategory());
}
}
@@ -554,13 +523,11 @@
public void handleMessage(Message msg) {
if (msg.what == SHOW_DETAIL) {
handleShowDetail((Record)msg.obj, msg.arg1 != 0);
- } else if (msg.what == SET_TILE_VISIBILITY) {
- handleSetTileVisibility((TileRecord) msg.obj, msg.arg1);
}
}
}
- private static class Record {
+ protected static class Record {
View detailView;
DetailAdapter detailAdapter;
int x;
@@ -619,13 +586,7 @@
public interface QSTileLayout {
void addTile(TileRecord tile);
void removeTile(TileRecord tile);
- void setTileVisibility(TileRecord tile, int visibility);
int getOffsetTop(TileRecord tile);
void updateResources();
}
-
- public static boolean isTheNewQS(Context context) {
- return Settings.Secure.getIntForUser(context.getContentResolver(), QS_THE_NEW_QS,
- ActivityManager.getCurrentUser(), 0) != 0;
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
index 7f45545..39f0c55 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java
@@ -86,20 +86,12 @@
mTileSpec = tileSpec;
}
- public int getTileType() {
- return QSTileView.QS_TYPE_NORMAL;
- }
-
- public final boolean supportsDualTargets() {
- return getTileType() == QSTileView.QS_TYPE_DUAL;
- }
-
public Host getHost() {
return mHost;
}
- public QSTileBaseView createTileView(Context context) {
- return new QSTileView(context);
+ public QSIconView createTileView(Context context) {
+ return new QSIconView(context);
}
public DetailAdapter getDetailAdapter() {
@@ -181,7 +173,8 @@
}
protected void handleSecondaryClick() {
- // optional
+ // Default to normal click.
+ handleClick();
}
protected void handleLongClick() {
@@ -327,8 +320,10 @@
public interface Host {
void startActivityDismissingKeyguard(Intent intent);
void startActivityDismissingKeyguard(PendingIntent intent);
+ void startRunnableDismissingKeyguard(Runnable runnable);
void warn(String message, Throwable t);
void collapsePanels();
+ void openPanels();
Looper getLooper();
Context getContext();
Collection<QSTile<?>> getTiles();
@@ -345,6 +340,7 @@
UserSwitcherController getUserSwitcherController();
UserInfoController getUserInfoController();
BatteryController getBatteryController();
+ void removeTile(String tileSpec);
public interface Callback {
void onTilesChanged();
@@ -451,7 +447,6 @@
}
public static class State {
- public boolean visible;
public Icon icon;
public CharSequence label;
public CharSequence contentDescription;
@@ -461,14 +456,12 @@
public boolean copyTo(State other) {
if (other == null) throw new IllegalArgumentException();
if (!other.getClass().equals(getClass())) throw new IllegalArgumentException();
- final boolean changed = other.visible != visible
- || !Objects.equals(other.icon, icon)
+ final boolean changed = !Objects.equals(other.icon, icon)
|| !Objects.equals(other.label, label)
|| !Objects.equals(other.contentDescription, contentDescription)
|| !Objects.equals(other.autoMirrorDrawable, autoMirrorDrawable)
|| !Objects.equals(other.dualLabelContentDescription,
dualLabelContentDescription);
- other.visible = visible;
other.icon = icon;
other.label = label;
other.contentDescription = contentDescription;
@@ -484,7 +477,6 @@
protected StringBuilder toStringBuilder() {
final StringBuilder sb = new StringBuilder(getClass().getSimpleName()).append('[');
- sb.append("visible=").append(visible);
sb.append(",icon=").append(icon);
sb.append(",label=").append(label);
sb.append(",contentDescription=").append(contentDescription);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
index 72fc88d..68461f5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileBaseView.java
@@ -1,57 +1,112 @@
/*
* Copyright (C) 2015 The Android Open 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
+ * 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.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-
package com.android.systemui.qs;
import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.RippleDrawable;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.util.AttributeSet;
import android.view.View;
-import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import com.android.systemui.R;
-public abstract class QSTileBaseView extends ViewGroup {
-
- public static final int QS_TYPE_NORMAL = 0;
- public static final int QS_TYPE_DUAL = 1;
- public static final int QS_TYPE_QUICK = 2;
+public class QSTileBaseView extends LinearLayout {
private final H mHandler = new H();
+ private QSIconView mIcon;
+ private RippleDrawable mRipple;
+ private Drawable mTileBackground;
- public QSTileBaseView(Context context) {
+ public QSTileBaseView(Context context, QSIconView icon) {
super(context);
+ mIcon = icon;
+ addView(mIcon);
+
+ mTileBackground = newTileBackground();
+ if (mTileBackground instanceof RippleDrawable) {
+ setRipple((RippleDrawable) mTileBackground);
+ }
+ setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ setBackground(mTileBackground);
+
+ // Default to Quick Tile padding, and QSTileView will specify its own padding.
+ int padding = context.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_padding);
+ setPadding(padding, padding, padding, padding);
}
- public QSTileBaseView(Context context, AttributeSet attrs) {
- super(context, attrs);
+ private Drawable newTileBackground() {
+ final int[] attrs = new int[] { android.R.attr.selectableItemBackgroundBorderless };
+ final TypedArray ta = mContext.obtainStyledAttributes(attrs);
+ final Drawable d = ta.getDrawable(0);
+ ta.recycle();
+ return d;
}
+ private void setRipple(RippleDrawable tileBackground) {
+ mRipple = tileBackground;
+ if (getWidth() != 0) {
+ updateRippleSize(getWidth(), getHeight());
+ }
+ }
+
+ private void updateRippleSize(int width, int height) {
+ // center the touch feedback on the center of the icon, and dial it down a bit
+ final int cx = width / 2;
+ final int cy = height / 2;
+ final int rad = (int)(mIcon.getHeight() * .85f);
+ mRipple.setHotspotBounds(cx - rad, cy - rad, cx + rad, cy + rad);
+ }
+
+ public void init(OnClickListener click, OnLongClickListener longClick) {
+ setClickable(true);
+ setOnClickListener(click);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+ final int w = getMeasuredWidth();
+ final int h = getMeasuredHeight();
+
+ if (mRipple != null) {
+ updateRippleSize(w, h);
+ }
+ }
+
+ /**
+ * Update the accessibility order for this view.
+ *
+ * @param previousView the view which should be before this one
+ * @return the last view in this view which is accessible
+ */
+ public View updateAccessibilityOrder(View previousView) {
+ setAccessibilityTraversalAfter(previousView.getId());
+ return this;
+ }
public void onStateChanged(QSTile.State state) {
mHandler.obtainMessage(H.STATE_CHANGED, state).sendToTarget();
}
- public abstract void init(OnClickListener click, OnClickListener clickSecondary,
- OnLongClickListener longClick);
- public abstract View updateAccessibilityOrder(View previousView);
- public abstract boolean setType(int type);
-
- protected abstract void handleStateChanged(QSTile.State state);
-
- protected static int exactly(int size) {
- return MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
- }
-
- protected static void layout(View child, int left, int top) {
- child.layout(left, top, left + child.getMeasuredWidth(), top + child.getMeasuredHeight());
+ protected void handleStateChanged(QSTile.State state) {
+ mIcon.setIcon(state);
+ setContentDescription(state.contentDescription);
}
private class H extends Handler {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileServiceWrapper.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileServiceWrapper.java
index 55f4736..a5e1fd5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileServiceWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileServiceWrapper.java
@@ -66,9 +66,9 @@
}
@Override
- public void onClick() {
+ public void onClick(IBinder token) {
try {
- mService.onClick();
+ mService.onClick(token);
} catch (Exception e) {
Log.d(TAG, "Caught exception from QSTileService", e);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
index 4cc2b8d..41ac4d9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileView.java
@@ -17,26 +17,16 @@
package com.android.systemui.qs;
import android.content.Context;
-import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
-import android.content.res.TypedArray;
import android.graphics.Typeface;
-import android.graphics.drawable.Animatable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.RippleDrawable;
import android.util.MathUtils;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
import android.widget.TextView;
import com.android.systemui.FontSizeUtils;
import com.android.systemui.R;
-import com.android.systemui.qs.QSTile.AnimationIcon;
-
-import java.util.Objects;
/** View that represents a standard quick settings tile. **/
public class QSTileView extends QSTileBaseView {
@@ -44,59 +34,25 @@
Typeface.NORMAL);
protected final Context mContext;
- private final View mIcon;
- private final View mDivider;
- private final int mIconSizePx;
private final int mTileSpacingPx;
private int mTilePaddingTopPx;
- private final int mTilePaddingBelowIconPx;
- private final int mDualTileVerticalPaddingPx;
- private final View mTopBackgroundView;
private TextView mLabel;
- private QSDualTileLabel mDualLabel;
- private int mType;
- private OnClickListener mClickPrimary;
- private OnClickListener mClickSecondary;
- private OnLongClickListener mLongClick;
- private Drawable mTileBackground;
- private RippleDrawable mRipple;
- private View mCircle;
-
- public QSTileView(Context context) {
- super(context);
+ public QSTileView(Context context, QSIconView icon) {
+ super(context, icon);
mContext = context;
final Resources res = context.getResources();
- mIconSizePx = res.getDimensionPixelSize(R.dimen.qs_tile_icon_size);
mTileSpacingPx = res.getDimensionPixelSize(R.dimen.qs_tile_spacing);
- mTilePaddingBelowIconPx = res.getDimensionPixelSize(R.dimen.qs_tile_padding_below_icon);
- mDualTileVerticalPaddingPx =
- res.getDimensionPixelSize(R.dimen.qs_dual_tile_padding_vertical);
- mTileBackground = newTileBackground();
- recreateLabel();
setClipChildren(false);
- mTopBackgroundView = new View(context);
- mTopBackgroundView.setId(View.generateViewId());
- addView(mTopBackgroundView);
-
- mIcon = createIcon();
- addView(mIcon);
-
- mCircle = createCircleIcon();
- addView(mCircle);
-
- mDivider = new View(mContext);
- mDivider.setBackgroundColor(context.getColor(R.color.qs_tile_divider));
- final int dh = res.getDimensionPixelSize(R.dimen.qs_tile_divider_height);
- mDivider.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, dh));
- addView(mDivider);
-
setClickable(true);
updateTopPadding();
setId(View.generateViewId());
+ createLabel();
+ setOrientation(VERTICAL);
+ setGravity(Gravity.CENTER);
}
private void updateTopPadding() {
@@ -106,6 +62,8 @@
float largeFactor = (MathUtils.constrain(getResources().getConfiguration().fontScale,
1.0f, FontSizeUtils.LARGE_TEXT_SCALE) - 1f) / (FontSizeUtils.LARGE_TEXT_SCALE - 1f);
mTilePaddingTopPx = Math.round((1 - largeFactor) * padding + largeFactor * largePadding);
+ setPadding(mTileSpacingPx, mTilePaddingTopPx + mTileSpacingPx, mTileSpacingPx,
+ mTileSpacingPx);
requestLayout();
}
@@ -114,260 +72,29 @@
super.onConfigurationChanged(newConfig);
updateTopPadding();
FontSizeUtils.updateFontSize(mLabel, R.dimen.qs_tile_text_size);
- if (mDualLabel != null) {
- mDualLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- getResources().getDimensionPixelSize(R.dimen.qs_tile_text_size));
- }
}
- private void recreateLabel() {
- CharSequence labelText = null;
- CharSequence labelDescription = null;
- if (mLabel != null) {
- labelText = mLabel.getText();
- removeView(mLabel);
- mLabel = null;
- }
- if (mDualLabel != null) {
- labelText = mDualLabel.getText();
- labelDescription = mLabel != null ? mLabel.getContentDescription() : null;
- removeView(mDualLabel);
- mDualLabel = null;
- }
+ private void createLabel() {
final Resources res = mContext.getResources();
- if (mType == QS_TYPE_DUAL) {
- mDualLabel = new QSDualTileLabel(mContext);
- mDualLabel.setId(View.generateViewId());
- mDualLabel.setBackgroundResource(R.drawable.btn_borderless_rect);
- mDualLabel.setFirstLineCaret(mContext.getDrawable(R.drawable.qs_dual_tile_caret));
- mDualLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
- mDualLabel.setPadding(0, mDualTileVerticalPaddingPx, 0, mDualTileVerticalPaddingPx);
- mDualLabel.setTypeface(CONDENSED);
- mDualLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- res.getDimensionPixelSize(R.dimen.qs_tile_text_size));
- mDualLabel.setClickable(true);
- mDualLabel.setOnClickListener(mClickSecondary);
- mDualLabel.setFocusable(true);
- if (labelText != null) {
- mDualLabel.setText(labelText);
- }
- if (labelDescription != null) {
- mDualLabel.setContentDescription(labelDescription);
- }
- addView(mDualLabel);
- mDualLabel.setAccessibilityTraversalAfter(mTopBackgroundView.getId());
- } else if (mType == QS_TYPE_NORMAL) {
- mLabel = new TextView(mContext);
- mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
- mLabel.setGravity(Gravity.CENTER_HORIZONTAL);
- mLabel.setMinLines(2);
- mLabel.setPadding(0, 0, 0, 0);
- mLabel.setTypeface(CONDENSED);
- mLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
- res.getDimensionPixelSize(R.dimen.qs_tile_text_size));
- mLabel.setClickable(false);
- if (labelText != null) {
- mLabel.setText(labelText);
- }
- addView(mLabel);
- }
+ mLabel = new TextView(mContext);
+ mLabel.setTextColor(mContext.getColor(R.color.qs_tile_text));
+ mLabel.setGravity(Gravity.CENTER_HORIZONTAL);
+ mLabel.setMinLines(2);
+ mLabel.setPadding(0, 0, 0, 0);
+ mLabel.setTypeface(CONDENSED);
+ mLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
+ res.getDimensionPixelSize(R.dimen.qs_tile_text_size));
+ mLabel.setClickable(false);
+ addView(mLabel);
}
- public boolean setType(int type) {
- final boolean changed = mType != type;
- mType = type;
- if (changed) {
- recreateLabel();
- }
- if (mTileBackground instanceof RippleDrawable) {
- setRipple((RippleDrawable) mTileBackground);
- }
- if (mType == QS_TYPE_DUAL) {
- mTopBackgroundView.setOnClickListener(mClickPrimary);
- setOnClickListener(null);
- setClickable(false);
- setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
- mTopBackgroundView.setBackground(mTileBackground);
- } else {
- mTopBackgroundView.setOnClickListener(null);
- mTopBackgroundView.setClickable(false);
- setOnClickListener(mClickPrimary);
- setOnLongClickListener(mLongClick);
- setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
- setBackground(mTileBackground);
- }
- mTopBackgroundView.setFocusable(mType == QS_TYPE_DUAL);
- setFocusable(mType != QS_TYPE_DUAL);
- mDivider.setVisibility(mType == QS_TYPE_DUAL ? VISIBLE : GONE);
- mCircle.setVisibility(mType == QS_TYPE_QUICK ? VISIBLE : GONE);
- postInvalidate();
- return changed;
- }
-
- private void setRipple(RippleDrawable tileBackground) {
- mRipple = tileBackground;
- if (getWidth() != 0) {
- updateRippleSize(getWidth(), getHeight());
- }
- }
-
- public void init(OnClickListener clickPrimary, OnClickListener clickSecondary,
- OnLongClickListener longClick) {
- mClickPrimary = clickPrimary;
- mClickSecondary = clickSecondary;
- mLongClick = longClick;
- }
-
- protected View createIcon() {
- final ImageView icon = new ImageView(mContext);
- icon.setId(android.R.id.icon);
- icon.setScaleType(ScaleType.CENTER_INSIDE);
- return icon;
- }
-
- protected View createCircleIcon() {
- final ImageView icon = new ImageView(mContext);
- icon.setImageResource(R.drawable.ic_qs_circle);
- // TODO: Not this.
- icon.setPadding(20, 20, 20, 20);
- return icon;
- }
-
- protected View createCircle() {
- final ImageView icon = new ImageView(mContext);
- icon.setId(android.R.id.icon);
- icon.setScaleType(ScaleType.CENTER_INSIDE);
- return icon;
- }
-
- private Drawable newTileBackground() {
- final int[] attrs = new int[] { android.R.attr.selectableItemBackgroundBorderless };
- final TypedArray ta = mContext.obtainStyledAttributes(attrs);
- final Drawable d = ta.getDrawable(0);
- ta.recycle();
- return d;
- }
-
- private View labelView() {
- return mType == QS_TYPE_DUAL ? mDualLabel : mLabel;
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- final int w = MeasureSpec.getSize(widthMeasureSpec);
- final int h = MeasureSpec.getSize(heightMeasureSpec);
- final int iconSpec = exactly(mIconSizePx);
- mIcon.measure(MeasureSpec.makeMeasureSpec(w, getIconMeasureMode()), iconSpec);
- switch (mType) {
- case QS_TYPE_QUICK:
- mCircle.measure(
- MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY));
- break;
- case QS_TYPE_DUAL:
- mDivider.measure(widthMeasureSpec, exactly(mDivider.getLayoutParams().height));
- default:
- labelView().measure(widthMeasureSpec,
- MeasureSpec.makeMeasureSpec(h, MeasureSpec.AT_MOST));
- break;
- }
- int heightSpec = exactly(
- mIconSizePx + mTilePaddingBelowIconPx + mTilePaddingTopPx);
- mTopBackgroundView.measure(widthMeasureSpec, heightSpec);
- setMeasuredDimension(w, h);
- }
-
- protected int getIconMeasureMode() {
- return MeasureSpec.EXACTLY;
- }
-
- @Override
- protected void onLayout(boolean changed, int l, int t, int r, int b) {
- final int w = getMeasuredWidth();
- final int h = getMeasuredHeight();
-
- layout(mTopBackgroundView, 0, mTileSpacingPx);
-
- int top = 0;
- top += mTileSpacingPx;
- top += mTilePaddingTopPx;
- final int iconLeft = (w - mIcon.getMeasuredWidth()) / 2;
- if (mType == QS_TYPE_QUICK) {
- top = (h - mIcon.getMeasuredHeight()) / 2;
- layout(mCircle, 0, 0);
- }
- layout(mIcon, iconLeft, top);
- if (mRipple != null) {
- updateRippleSize(w, h);
-
- }
- top = mIcon.getBottom();
- top += mTilePaddingBelowIconPx;
- if (mType == QS_TYPE_DUAL) {
- layout(mDivider, 0, top);
- top = mDivider.getBottom();
- }
- if (mType != QS_TYPE_QUICK) {
- layout(labelView(), 0, top);
- }
- }
-
- private void updateRippleSize(int width, int height) {
- // center the touch feedback on the center of the icon, and dial it down a bit
- final int cx = width / 2;
- final int cy = mType == QS_TYPE_DUAL ? mIcon.getTop() + mIcon.getHeight() / 2 : height / 2;
- final int rad = (int)(mIcon.getHeight() * 1.25f);
- mRipple.setHotspotBounds(cx - rad, cy - rad, cx + rad, cy + rad);
+ public void init(OnClickListener clickPrimary, OnLongClickListener longClick) {
+ setOnClickListener(clickPrimary);
+ setOnLongClickListener(longClick);
}
protected void handleStateChanged(QSTile.State state) {
- if (mIcon instanceof ImageView) {
- setIcon((ImageView) mIcon, state);
- }
- if (mType == QS_TYPE_DUAL) {
- mDualLabel.setText(state.label);
- mDualLabel.setContentDescription(state.dualLabelContentDescription);
- mTopBackgroundView.setContentDescription(state.contentDescription);
- } else if (mType == QS_TYPE_NORMAL) {
- mLabel.setText(state.label);
- setContentDescription(state.contentDescription);
- }
- }
-
- protected void setIcon(ImageView iv, QSTile.State state) {
- if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) {
- Drawable d = state.icon != null ? state.icon.getDrawable(mContext) : null;
- if (d != null && state.autoMirrorDrawable) {
- d.setAutoMirrored(true);
- }
- iv.setImageDrawable(d);
- iv.setTag(R.id.qs_icon_tag, state.icon);
- if (d instanceof Animatable) {
- Animatable a = (Animatable) d;
- if (state.icon instanceof AnimationIcon && !iv.isShown()) {
- a.stop(); // skip directly to end state
- }
- }
- }
- }
-
- /**
- * Update the accessibility order for this view.
- *
- * @param previousView the view which should be before this one
- * @return the last view in this view which is accessible
- */
- public View updateAccessibilityOrder(View previousView) {
- View firstView;
- View lastView;
- if (mType == QS_TYPE_DUAL) {
- lastView = mDualLabel;
- firstView = mTopBackgroundView;
- } else {
- firstView = this;
- lastView = this;
- }
- firstView.setAccessibilityTraversalAfter(previousView.getId());
- return lastView;
+ super.handleStateChanged(state);
+ mLabel.setText(state.label);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
index 6a053be..bda4675 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickQSPanel.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.res.ColorStateList;
import android.util.AttributeSet;
-import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
@@ -30,10 +29,14 @@
import java.util.Collection;
/**
- * Version of QSPanel that only shows 4 Quick Tiles in the QS Header.
+ * Version of QSPanel that only shows N Quick Tiles in the QS Header.
*/
public class QuickQSPanel extends QSPanel {
+ private int mMaxTiles;
+ private QSPanel mFullPanel;
+ private View mHeader;
+
public QuickQSPanel(Context context, AttributeSet attrs) {
super(context, attrs);
if (mTileLayout != null) {
@@ -46,6 +49,36 @@
mQsContainer.addView((View) mTileLayout, 1 /* Between brightness and footer */);
}
+ public void setQSPanelAndHeader(QSPanel fullPanel, View header) {
+ mFullPanel = fullPanel;
+ mHeader = header;
+ }
+
+ @Override
+ protected void handleShowDetail(QSPanel.Record r, boolean show) {
+ if (show) {
+ mHeader.performClick();
+ mFullPanel.showDetail(show, r);
+ } else {
+ // Not sure how we would end up here...
+ super.handleShowDetail(r, show);
+ }
+ }
+
+ @Override
+ protected QSTileBaseView createTileView(QSTile<?> tile) {
+ return new QSTileBaseView(mContext, tile.createTileView(mContext));
+ }
+
+ public void setMaxTiles(int maxTiles) {
+ mMaxTiles = maxTiles;
+ }
+
+ @Override
+ protected void onTileClick(QSTile<?> tile) {
+ tile.secondaryClick();
+ }
+
@Override
public void onTuningChanged(String key, String newValue) {
// No tunings for you.
@@ -59,11 +92,8 @@
public void setTiles(Collection<QSTile<?>> tiles) {
ArrayList<QSTile<?>> quickTiles = new ArrayList<>();
for (QSTile<?> tile : tiles) {
- if (tile.getTileType() == QSTileView.QS_TYPE_QUICK) {
- Log.d("QSPanel", "Adding " + tile.getTileSpec());
- quickTiles.add(tile);
- }
- if (quickTiles.size() == 2) {
+ quickTiles.add(tile);
+ if (quickTiles.size() == mMaxTiles) {
break;
}
}
@@ -74,6 +104,8 @@
public HeaderTileLayout(Context context) {
super(context);
+ setClipChildren(false);
+ setClipToPadding(false);
setGravity(Gravity.CENTER_VERTICAL);
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
@@ -92,17 +124,14 @@
@Override
public void addTile(TileRecord tile) {
tile.tileView.setLayoutParams(generateLayoutParams());
- // These shouldn't be normal tiles, but they will be for now so that the circles don't
- // show up.
- tile.tileView.setType(QSTileView.QS_TYPE_NORMAL);
addView(tile.tileView, getChildCount() - 1 /* Leave icon at end */);
}
private LayoutParams generateLayoutParams() {
- int size =
- mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size);
+ int size = mContext.getResources().getDimensionPixelSize(R.dimen.qs_quick_tile_size);
LayoutParams lp = new LayoutParams(0, size);
lp.weight = 1;
+ lp.gravity = Gravity.CENTER;
return lp;
}
@@ -112,11 +141,6 @@
}
@Override
- public void setTileVisibility(TileRecord tile, int visibility) {
- tile.tileView.setVisibility(visibility);
- }
-
- @Override
public int getOffsetTop(TileRecord tile) {
return 0;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index a2e1296..b2bfa06 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -27,7 +27,7 @@
import com.android.systemui.qs.QSTile.SignalState;
/** View that represents a custom quick settings tile for displaying signal info (wifi/cell). **/
-public final class SignalTileView extends QSTileView {
+public final class SignalTileView extends QSIconView {
private static final long DEFAULT_DURATION = new ValueAnimator().getDuration();
private static final long SHORT_DURATION = DEFAULT_DURATION / 3;
@@ -106,8 +106,7 @@
}
@Override
- protected void handleStateChanged(QSTile.State state) {
- super.handleStateChanged(state);
+ public void setIcon(QSTile.State state) {
final SignalState s = (SignalState) state;
setIcon(mSignal, s);
if (s.overlayIconId > 0) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
index 1336eec..ff11177 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java
@@ -18,14 +18,9 @@
private static final String TAG = "TileLayout";
- private int mDualTileUnderlap;
protected int mColumns;
private int mCellWidth;
private int mCellHeight;
- private int mLargeCellWidth;
- private int mLargeCellHeight;
-
- protected boolean mAllowDual = true;
protected final ArrayList<TileRecord> mRecords = new ArrayList<>();
@@ -59,21 +54,11 @@
super.removeAllViews();
}
- @Override
- public void setTileVisibility(TileRecord tile, int visibility) {
- tile.tileView.setVisibility(visibility);
- }
-
public void updateResources() {
final Resources res = mContext.getResources();
final int columns = Math.max(1, res.getInteger(R.integer.quick_settings_num_columns));
mCellHeight = getCellHeight();
mCellWidth = (int) (mCellHeight * TILE_ASPECT);
- mLargeCellHeight = mAllowDual ? res.getDimensionPixelSize(R.dimen.qs_dual_tile_height)
- : mCellHeight;
- mLargeCellWidth = mAllowDual ? (int) (mLargeCellHeight * TILE_ASPECT) : mCellWidth;
- mDualTileUnderlap = mAllowDual
- ? res.getDimensionPixelSize(R.dimen.qs_dual_tile_padding_vertical) : 0;
if (mColumns != columns) {
mColumns = columns;
postInvalidate();
@@ -90,16 +75,13 @@
int r = -1;
int c = -1;
int rows = 0;
- boolean rowIsDual = false;
for (TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
// wrap to next column if we've reached the max # of columns
// also don't allow dual + single tiles on the same row
- if (r == -1 || c == (mColumns - 1)
- || rowIsDual != (mAllowDual && record.tile.supportsDualTargets())) {
+ if (r == -1 || c == (mColumns - 1)) {
r++;
c = 0;
- rowIsDual = mAllowDual && record.tile.supportsDualTargets();
} else {
c++;
}
@@ -110,13 +92,9 @@
View previousView = this;
for (TileRecord record : mRecords) {
- if (record.tileView.setType(mAllowDual ? record.tile.getTileType()
- : QSTileView.QS_TYPE_NORMAL)) {
- record.tileView.handleStateChanged(record.tile.getState());
- }
if (record.tileView.getVisibility() == GONE) continue;
- final int cw = record.row == 0 ? mLargeCellWidth : mCellWidth;
- final int ch = record.row == 0 ? mLargeCellHeight : mCellHeight;
+ final int cw = mCellWidth;
+ final int ch = mCellHeight;
record.tileView.measure(exactly(cw), exactly(ch));
previousView = record.tileView.updateAccessibilityOrder(previousView);
}
@@ -135,7 +113,7 @@
for (TileRecord record : mRecords) {
if (record.tileView.getVisibility() == GONE) continue;
final int cols = getColumnCount(record.row);
- final int cw = record.row == 0 ? mLargeCellWidth : mCellWidth;
+ final int cw = mCellWidth;
final int extra = (w - cw * cols) / (cols + 1);
int left = record.col * cw + (record.col + 1) * extra;
final int top = getRowTop(record.row);
@@ -153,7 +131,7 @@
private int getRowTop(int row) {
if (row <= 0) return 0;
- return mLargeCellHeight - mDualTileUnderlap + (row - 1) * mCellHeight;
+ return row * mCellHeight;
}
private int getColumnCount(int row) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java b/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java
deleted file mode 100644
index e64f6a0..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/UsageTracker.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-
-import com.android.systemui.Prefs;
-import com.android.systemui.R;
-import com.android.systemui.statusbar.phone.SystemUIDialog;
-import com.android.systemui.statusbar.policy.Listenable;
-
-public class UsageTracker implements Listenable {
- private static final long MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
-
- private final Context mContext;
- private final long mTimeToShowTile;
- @Prefs.Key private final String mPrefKey;
- private final String mResetAction;
-
- private boolean mRegistered;
-
- public UsageTracker(Context context, @Prefs.Key String prefKey, Class<?> tile,
- int timeoutResource) {
- mContext = context;
- mPrefKey = prefKey;
- mTimeToShowTile = MILLIS_PER_DAY * mContext.getResources().getInteger(timeoutResource);
- mResetAction = "com.android.systemui.qs." + tile.getSimpleName() + ".usage_reset";
- }
-
- @Override
- public void setListening(boolean listen) {
- if (listen && !mRegistered) {
- mContext.registerReceiver(mReceiver, new IntentFilter(mResetAction));
- mRegistered = true;
- } else if (!listen && mRegistered) {
- mContext.unregisterReceiver(mReceiver);
- mRegistered = false;
- }
- }
-
- public boolean isRecentlyUsed() {
- long lastUsed = Prefs.getLong(mContext, mPrefKey, 0L /* defaultValue */);
- return (System.currentTimeMillis() - lastUsed) < mTimeToShowTile;
- }
-
- public void trackUsage() {
- Prefs.putLong(mContext, mPrefKey, System.currentTimeMillis());
- }
-
- public void reset() {
- Prefs.remove(mContext, mPrefKey);
- }
-
- public void showResetConfirmation(String title, final Runnable onConfirmed) {
- final SystemUIDialog d = new SystemUIDialog(mContext);
- d.setTitle(title);
- d.setMessage(mContext.getString(R.string.quick_settings_reset_confirmation_message));
- d.setNegativeButton(android.R.string.cancel, null);
- d.setPositiveButton(R.string.quick_settings_reset_confirmation_button,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- reset();
- if (onConfirmed != null) {
- onConfirmed.run();
- }
- }
- });
- d.setCanceledOnTouchOutside(true);
- d.show();
- }
-
- private BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (mResetAction.equals(intent.getAction())) {
- reset();
- }
- }
- };
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/BlankCustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/customize/BlankCustomTile.java
index a4ff685..95ff611 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/BlankCustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/BlankCustomTile.java
@@ -72,12 +72,10 @@
try {
PackageManager pm = mContext.getPackageManager();
ServiceInfo info = pm.getServiceInfo(mComponent, 0);
- state.visible = true;
state.icon = new DrawableIcon(info.loadIcon(pm));
state.label = info.loadLabel(pm).toString();
state.contentDescription = state.label;
} catch (Exception e) {
- state.visible = false;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/CustomQSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/customize/CustomQSPanel.java
index 422ae4d..87c2973 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/CustomQSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/CustomQSPanel.java
@@ -81,6 +81,11 @@
}
}
+ @Override
+ protected void createCustomizePanel() {
+ // Already in CustomizePanel.
+ }
+
public void tileSelected(QSTile<?> tile, ClipData currentClip) {
String sourceSpec = getSpec(currentClip);
String destSpec = tile.getTileSpec();
@@ -176,13 +181,16 @@
if (mTiles.get(i).startsWith(CustomTile.PREFIX)) {
mCurrentTiles.add(BlankCustomTile.create(mHost, mTiles.get(i)));
} else {
- mCurrentTiles.add(mHost.createTile(mTiles.get(i)));
+ QSTile<?> tile = mHost.createTile(mTiles.get(i));
+ if (tile != null) {
+ mCurrentTiles.add(tile);
+ }
}
mCurrentTiles.get(mCurrentTiles.size() - 1).setTileSpec(mTiles.get(i));
}
super.setTiles(mCurrentTiles);
}
-
+
public void addTile(String spec) {
mTiles.add(spec);
setTilesInternal();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/NonPagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/customize/NonPagedTileLayout.java
index d0d5b54..3acbed8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/NonPagedTileLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/NonPagedTileLayout.java
@@ -25,14 +25,12 @@
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
-
import com.android.systemui.R;
import com.android.systemui.qs.PagedTileLayout;
import com.android.systemui.qs.PagedTileLayout.TilePage;
import com.android.systemui.qs.QSPanel.QSTileLayout;
import com.android.systemui.qs.QSPanel.TileRecord;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileView;
import com.android.systemui.qs.QuickTileLayout;
import java.util.ArrayList;
@@ -75,13 +73,12 @@
public void addTile(TileRecord record) {
mTiles.add(record);
distributeTiles();
- if (record.tile.getTileType() == QSTileView.QS_TYPE_QUICK
- || record.tileView.getTag() == record.tile) {
+ if (record.tileView.getTag() == record.tile) {
return;
}
record.tileView.setTag(record.tile);
record.tileView.setVisibility(View.VISIBLE);
- record.tileView.init(null, null, null);
+ record.tileView.init(null, null);
record.tileView.setOnTouchListener(this);
if (mCurrentClip != null && mCurrentClip.getItemAt(0)
.getText().toString().equals(record.tile.getTileSpec())) {
@@ -107,10 +104,6 @@
final int NT = mTiles.size();
for (int i = 0; i < NT; i++) {
TileRecord tile = mTiles.get(i);
- if (tile.tile.getTileType() == QSTileView.QS_TYPE_QUICK) {
- // Ignore quick tiles for now.
- continue;
- }
mPages.get(index).addTile(tile);
// Keep everything in one layout for now.
if (false && mPages.get(index).isFull()) {
@@ -125,12 +118,6 @@
}
@Override
- public void setTileVisibility(TileRecord tile, int visibility) {
- // All tiles visible here, so that they can be re-arranged.
- tile.tileView.setVisibility(View.VISIBLE);
- }
-
- @Override
public int getOffsetTop(TileRecord tile) {
// No touch feedback, so this isn't required.
return 0;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
index baad370..4a7d67f 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java
@@ -37,9 +37,7 @@
import android.widget.ListView;
import android.widget.Toolbar;
import android.widget.Toolbar.OnMenuItemClickListener;
-
import com.android.systemui.R;
-import com.android.systemui.SystemUIApplication;
import com.android.systemui.qs.QSDetailClipper;
import com.android.systemui.qs.QSTile.Host.Callback;
import com.android.systemui.qs.customize.DropButton.OnDropListener;
@@ -80,14 +78,13 @@
public QSCustomizer(Context context, AttributeSet attrs) {
super(new ContextThemeWrapper(context, android.R.style.Theme_Material), attrs);
- mPhoneStatusBar = ((SystemUIApplication) mContext.getApplicationContext())
- .getComponent(PhoneStatusBar.class);
mClipper = new QSDetailClipper(this);
}
public void setHost(QSTileHost host) {
mHost = host;
mHost.addCallback(this);
+ mPhoneStatusBar = host.getPhoneStatusBar();
mQsPanel.setTiles(mHost.getTiles());
mQsPanel.setHost(mHost);
mQsPanel.setSavedTiles();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
index 144b202..6706c7a 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java
@@ -88,6 +88,9 @@
}
Log.d(TAG, "Trying " + spec);
final QSTile<?> tile = host.createTile(spec);
+ if (tile == null) {
+ continue;
+ }
// Bad, bad, very bad.
tile.setListening(true);
tile.clearState();
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
index 49f8d1c..fc802dd 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java
@@ -73,7 +73,6 @@
final int value = arg instanceof Integer ? (Integer)arg : mSetting.getValue();
final boolean airplaneMode = value != 0;
state.value = airplaneMode;
- state.visible = true;
state.label = mContext.getString(R.string.airplane_mode);
if (airplaneMode) {
state.icon = mEnable;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
index 8f9655d..84eac65 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java
@@ -73,7 +73,6 @@
int level = (arg != null) ? (Integer) arg : mLevel;
String percentage = NumberFormat.getPercentInstance().format((double) level / 100.0);
- state.visible = true;
state.icon = new Icon() {
@Override
public Drawable getDrawable(Context context) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
index 7f07ddc..cfc09a0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BluetoothTile.java
@@ -24,18 +24,15 @@
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
-
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
import com.android.systemui.qs.QSDetailItems.Item;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileView;
import com.android.systemui.statusbar.policy.BluetoothController;
import java.util.Collection;
-import java.util.Set;
/** Quick settings tile: Bluetooth **/
public class BluetoothTile extends QSTile<QSTile.BooleanState> {
@@ -44,21 +41,13 @@
private final BluetoothController mController;
private final BluetoothDetailAdapter mDetailAdapter;
- private final boolean mAlwaysDetail;
-
- public BluetoothTile(Host host, boolean alwaysDetail) {
+ public BluetoothTile(Host host) {
super(host);
- mAlwaysDetail = alwaysDetail;
mController = host.getBluetoothController();
mDetailAdapter = new BluetoothDetailAdapter();
}
@Override
- public int getTileType() {
- return QSTileView.QS_TYPE_DUAL;
- }
-
- @Override
public DetailAdapter getDetailAdapter() {
return mDetailAdapter;
}
@@ -78,18 +67,15 @@
}
@Override
- protected void handleClick() {
- if (mAlwaysDetail) {
- handleSecondaryClick();
- return;
- }
+ protected void handleSecondaryClick() {
+ // Secondary clicks are header clicks, just toggle.
final boolean isEnabled = (Boolean)mState.value;
MetricsLogger.action(mContext, getMetricsCategory(), !isEnabled);
mController.setBluetoothEnabled(!isEnabled);
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleClick() {
if (!mState.value) {
mState.value = true;
mController.setBluetoothEnabled(true);
@@ -99,11 +85,9 @@
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
- final boolean supported = mController.isBluetoothSupported();
final boolean enabled = mController.isBluetoothEnabled();
final boolean connected = mController.isBluetoothConnected();
final boolean connecting = mController.isBluetoothConnecting();
- state.visible = supported;
state.value = enabled;
state.autoMirrorDrawable = false;
if (enabled) {
@@ -155,6 +139,10 @@
}
}
+ public static boolean isSupported(Host host) {
+ return host.getBluetoothController().isBluetoothSupported();
+ }
+
private final BluetoothController.Callback mCallback = new BluetoothController.Callback() {
@Override
public void onBluetoothStateChange(boolean enabled) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
index 48b74a4..a8e139c 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CastTile.java
@@ -23,12 +23,10 @@
import android.view.View;
import android.view.View.OnAttachStateChangeListener;
import android.view.ViewGroup;
-
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
import com.android.systemui.qs.QSDetailItems.Item;
-import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastController.CastDevice;
@@ -87,14 +85,23 @@
@Override
protected void handleClick() {
+ if (mKeyguard.isSecure() && !mKeyguard.canSkipBouncer()) {
+ mHost.startRunnableDismissingKeyguard(new Runnable() {
+ @Override
+ public void run() {
+ MetricsLogger.action(mContext, getMetricsCategory());
+ showDetail(true);
+ mHost.openPanels();
+ }
+ });
+ return;
+ }
MetricsLogger.action(mContext, getMetricsCategory());
showDetail(true);
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
- state.visible = !mKeyguard.isSecure() || !mKeyguard.isShowing()
- || mKeyguard.canSkipBouncer() || QSPanel.isTheNewQS(mContext);
state.label = mContext.getString(R.string.quick_settings_cast_title);
state.value = false;
state.autoMirrorDrawable = false;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index a0bbbe3..6c7b337 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -26,8 +26,8 @@
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.net.MobileDataController;
import com.android.systemui.R;
+import com.android.systemui.qs.QSIconView;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileBaseView;
import com.android.systemui.qs.SignalTileView;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
@@ -71,7 +71,7 @@
}
@Override
- public QSTileBaseView createTileView(Context context) {
+ public QSIconView createTileView(Context context) {
return new SignalTileView(context);
}
@@ -86,9 +86,15 @@
}
@Override
+ protected void handleSecondaryClick() {
+ boolean dataEnabled = mDataController.isMobileDataSupported()
+ && mDataController.isMobileDataEnabled();
+ MetricsLogger.action(mContext, MetricsLogger.QS_CELLULAR_TOGGLE, !dataEnabled);
+ mDataController.setMobileDataEnabled(!dataEnabled);
+ }
+
+ @Override
protected void handleUpdateState(SignalState state, Object arg) {
- state.visible = mController.hasMobileDataFeature();
- if (!state.visible) return;
CallbackInfo cb = (CallbackInfo) arg;
if (cb == null) {
cb = mSignalCallback.mInfo;
@@ -138,6 +144,10 @@
return string;
}
+ public static boolean isSupported(Host host) {
+ return host.getNetworkController().hasMobileDataFeature();
+ }
+
private static final class CallbackInfo {
boolean enabled;
boolean wifiEnabled;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
index 2f9a496..f73ee35 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/ColorInversionTile.java
@@ -17,14 +17,10 @@
package com.android.systemui.qs.tiles;
import android.provider.Settings.Secure;
-
import com.android.internal.logging.MetricsLogger;
-import com.android.systemui.Prefs;
import com.android.systemui.R;
-import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.SecureSetting;
-import com.android.systemui.qs.UsageTracker;
/** Quick settings tile: Invert colors **/
public class ColorInversionTile extends QSTile<QSTile.BooleanState> {
@@ -34,7 +30,6 @@
private final AnimationIcon mDisable
= new AnimationIcon(R.drawable.ic_invert_colors_disable_animation);
private final SecureSetting mSetting;
- private final UsageTracker mUsageTracker;
private boolean mListening;
@@ -45,28 +40,14 @@
Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED) {
@Override
protected void handleValueChanged(int value, boolean observedChange) {
- if (value != 0 || observedChange) {
- mUsageTracker.trackUsage();
- }
- if (mListening) {
- handleRefreshState(value);
- }
+ handleRefreshState(value);
}
};
- mUsageTracker = new UsageTracker(host.getContext(),
- Prefs.Key.COLOR_INVERSION_TILE_LAST_USED, ColorInversionTile.class,
- R.integer.days_to_show_color_inversion_tile);
- if (mSetting.getValue() != 0 && !mUsageTracker.isRecentlyUsed()) {
- mUsageTracker.trackUsage();
- }
- mUsageTracker.setListening(true);
- mSetting.setListening(true);
}
@Override
protected void handleDestroy() {
super.handleDestroy();
- mUsageTracker.setListening(false);
mSetting.setListening(false);
}
@@ -77,7 +58,7 @@
@Override
public void setListening(boolean listening) {
- mListening = listening;
+ mSetting.setListening(listening);
}
@Override
@@ -95,23 +76,9 @@
}
@Override
- protected void handleLongClick() {
- if (mState.value) return; // don't allow usage reset if inversion is active
- final String title = mContext.getString(R.string.quick_settings_reset_confirmation_title,
- mState.label);
- mUsageTracker.showResetConfirmation(title, new Runnable() {
- @Override
- public void run() {
- refreshState();
- }
- });
- }
-
- @Override
protected void handleUpdateState(BooleanState state, Object arg) {
final int value = arg instanceof Integer ? (Integer) arg : mSetting.getValue();
final boolean enabled = value != 0;
- state.visible = enabled || mUsageTracker.isRecentlyUsed() || QSPanel.isTheNewQS(mContext);
state.value = enabled;
state.label = mContext.getString(R.string.quick_settings_inversion_label);
state.icon = enabled ? mEnable : mDisable;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomTile.java
index d26e8d6..bb74f34 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CustomTile.java
@@ -24,12 +24,16 @@
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
+import android.os.Binder;
import android.os.IBinder;
+import android.os.RemoteException;
import android.os.UserHandle;
import android.service.quicksettings.IQSTileService;
import android.service.quicksettings.Tile;
import android.util.Log;
-
+import android.view.IWindowManager;
+import android.view.WindowManager;
+import android.view.WindowManagerGlobal;
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.QSTileServiceWrapper;
@@ -38,19 +42,26 @@
public class CustomTile extends QSTile<QSTile.State> {
public static final String PREFIX = "custom(";
+ private static final boolean DEBUG = false;
+
// We don't want to thrash binding and unbinding if the user opens and closes the panel a lot.
// So instead we have a period of waiting.
private static final long UNBIND_DELAY = 30000;
private final ComponentName mComponent;
private final Tile mTile;
+ private final IWindowManager mWindowManager;
+ private final IBinder mToken = new Binder();
private QSTileServiceWrapper mService;
private boolean mListening;
private boolean mBound;
+ private boolean mIsTokenGranted;
+ private boolean mIsShowingDialog;
private CustomTile(QSTileHost host, String action) {
super(host);
+ mWindowManager = WindowManagerGlobal.getWindowManagerService();
mComponent = ComponentName.unflattenFromString(action);
mTile = new Tile(mComponent, host);
try {
@@ -72,12 +83,15 @@
}
public void updateState(Tile tile) {
- Log.d("TileService", "Setting state " + tile.getLabel());
mTile.setIcon(tile.getIcon());
mTile.setLabel(tile.getLabel());
mTile.setContentDescription(tile.getContentDescription());
}
+ public void onDialogShown() {
+ mIsShowingDialog = true;
+ }
+
@Override
public void setListening(boolean listening) {
if (mListening == listening) return;
@@ -90,19 +104,41 @@
mServiceConnection, Service.BIND_AUTO_CREATE,
new UserHandle(ActivityManager.getCurrentUser()));
mBound = true;
+ } else {
+ if (mService != null) {
+ mService.onStartListening();
+ } else {
+ Log.d(TAG, "Can't start service listening");
+ }
}
} else {
- if (mService!= null) {
+ if (mService != null) {
mService.onStopListening();
}
+ if (mIsTokenGranted && !mIsShowingDialog) {
+ try {
+ if (DEBUG) Log.d(TAG, "Removing token");
+ mWindowManager.removeWindowToken(mToken);
+ } catch (RemoteException e) {
+ }
+ mIsTokenGranted = false;
+ }
+ mIsShowingDialog = false;
mHandler.postDelayed(mUnbind, UNBIND_DELAY);
}
}
-
+
@Override
protected void handleDestroy() {
super.handleDestroy();
mHandler.removeCallbacks(mUnbind);
+ if (mIsTokenGranted) {
+ try {
+ if (DEBUG) Log.d(TAG, "Removing token");
+ mWindowManager.removeWindowToken(mToken);
+ } catch (RemoteException e) {
+ }
+ }
mUnbind.run();
}
@@ -119,7 +155,13 @@
@Override
protected void handleClick() {
if (mService != null) {
- mService.onClick();
+ try {
+ if (DEBUG) Log.d(TAG, "Adding token");
+ mWindowManager.addWindowToken(mToken, WindowManager.LayoutParams.TYPE_QS_DIALOG);
+ mIsTokenGranted = true;
+ } catch (RemoteException e) {
+ }
+ mService.onClick(mToken);
} else {
Log.e(TAG, "Click with no service " + getTileSpec());
}
@@ -132,7 +174,6 @@
@Override
protected void handleUpdateState(State state, Object arg) {
- state.visible = true;
Drawable drawable = mTile.getIcon().loadDrawable(mContext);
drawable.setTint(mContext.getColor(android.R.color.white));
state.icon = new DrawableIcon(drawable);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
index 781ab1c..d96f735 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DndTile.java
@@ -29,7 +29,6 @@
import android.view.View.OnAttachStateChangeListener;
import android.view.ViewGroup;
import android.widget.Toast;
-
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Prefs;
import com.android.systemui.R;
@@ -126,7 +125,6 @@
final boolean newValue = zen != Global.ZEN_MODE_OFF;
final boolean valueChanged = state.value != newValue;
state.value = newValue;
- state.visible = isVisible(mContext);
switch (zen) {
case Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS:
state.icon = ResourceIcon.get(R.drawable.ic_qs_dnd_on);
@@ -215,6 +213,10 @@
}
};
+ public static boolean isSupported(Host host) {
+ return isVisible(host.getContext());
+ }
+
private final class DndDetailAdapter implements DetailAdapter, OnAttachStateChangeListener {
@Override
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 21cbef2..12c1298 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/FlashlightTile.java
@@ -17,7 +17,6 @@
package com.android.systemui.qs.tiles;
import android.app.ActivityManager;
-
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
@@ -71,7 +70,8 @@
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
- state.visible = mFlashlightController.isAvailable();
+ // TODO: Flashlight available handling...
+// state.visible = mFlashlightController.isAvailable();
state.label = mHost.getContext().getString(R.string.quick_settings_flashlight_label);
if (arg instanceof UserBoolean) {
boolean value = ((UserBoolean) arg).value;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
index 79084ae..250d567 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/HotspotTile.java
@@ -16,16 +16,9 @@
package com.android.systemui.qs.tiles;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
import com.android.internal.logging.MetricsLogger;
-import com.android.systemui.Prefs;
import com.android.systemui.R;
-import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.UsageTracker;
import com.android.systemui.statusbar.policy.HotspotController;
/** Quick settings tile: Hotspot **/
@@ -36,19 +29,15 @@
new AnimationIcon(R.drawable.ic_hotspot_disable_animation);
private final HotspotController mController;
private final Callback mCallback = new Callback();
- private final UsageTracker mUsageTracker;
public HotspotTile(Host host) {
super(host);
mController = host.getHotspotController();
- mUsageTracker = newUsageTracker(host.getContext());
- mUsageTracker.setListening(true);
}
@Override
protected void handleDestroy() {
super.handleDestroy();
- mUsageTracker.setListening(false);
}
@Override
@@ -75,22 +64,7 @@
}
@Override
- protected void handleLongClick() {
- if (mState.value) return; // don't allow usage reset if hotspot is active
- final String title = mContext.getString(R.string.quick_settings_reset_confirmation_title,
- mState.label);
- mUsageTracker.showResetConfirmation(title, new Runnable() {
- @Override
- public void run() {
- refreshState();
- }
- });
- }
-
- @Override
protected void handleUpdateState(BooleanState state, Object arg) {
- state.visible = (mController.isHotspotSupported() && mUsageTracker.isRecentlyUsed())
- || QSPanel.isTheNewQS(mContext);
state.label = mContext.getString(R.string.quick_settings_hotspot_label);
if (arg instanceof Boolean) {
@@ -98,7 +72,7 @@
} else {
state.value = mController.isHotspotEnabled();
}
- state.icon = state.visible && state.value ? mEnable : mDisable;
+ state.icon = state.value ? mEnable : mDisable;
}
@Override
@@ -115,31 +89,10 @@
}
}
- private static UsageTracker newUsageTracker(Context context) {
- return new UsageTracker(context, Prefs.Key.HOTSPOT_TILE_LAST_USED, HotspotTile.class,
- R.integer.days_to_show_hotspot_tile);
- }
-
private final class Callback implements HotspotController.Callback {
@Override
public void onHotspotChanged(boolean enabled) {
refreshState(enabled);
}
};
-
- /**
- * This will catch broadcasts for changes in hotspot state so we can show
- * the hotspot tile for a number of days after use.
- */
- public static class APChangedReceiver extends BroadcastReceiver {
- private UsageTracker mUsageTracker;
-
- @Override
- public void onReceive(Context context, Intent intent) {
- if (mUsageTracker == null) {
- mUsageTracker = newUsageTracker(context);
- }
- mUsageTracker.trackUsage();
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
index c7f2284..0883445 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/IntentTile.java
@@ -124,7 +124,6 @@
}
// Save the last one in case we need it later.
mLastIntent = intent;
- state.visible = intent.getBooleanExtra("visible", true);
state.contentDescription = intent.getStringExtra("contentDescription");
state.label = intent.getStringExtra("label");
state.icon = null;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
index 0e2672c..08540f6 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/LocationTile.java
@@ -18,7 +18,6 @@
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.R;
-import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.LocationController;
@@ -60,6 +59,20 @@
@Override
protected void handleClick() {
+ if (mKeyguard.isSecure() && mKeyguard.isShowing()) {
+ mHost.startRunnableDismissingKeyguard(new Runnable() {
+ @Override
+ public void run() {
+ final boolean wasEnabled = (Boolean) mState.value;
+ mHost.openPanels();
+ MetricsLogger.action(mContext, getMetricsCategory(), !wasEnabled);
+ mController.setLocationEnabled(!wasEnabled);
+ mEnable.setAllowAnimation(true);
+ mDisable.setAllowAnimation(true);
+ }
+ });
+ return;
+ }
final boolean wasEnabled = (Boolean) mState.value;
MetricsLogger.action(mContext, getMetricsCategory(), !wasEnabled);
mController.setLocationEnabled(!wasEnabled);
@@ -74,7 +87,6 @@
// Work around for bug 15916487: don't show location tile on top of lock screen. After the
// bug is fixed, this should be reverted to only hiding it on secure lock screens:
// state.visible = !(mKeyguard.isSecure() && mKeyguard.isShowing());
- state.visible = !mKeyguard.isShowing() || QSPanel.isTheNewQS(mContext);
state.value = locationEnabled;
if (locationEnabled) {
state.icon = mEnable;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QAirplaneTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QAirplaneTile.java
deleted file mode 100644
index b77191e..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QAirplaneTile.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-
-/** Quick settings tile: Airplane mode **/
-public class QAirplaneTile extends AirplaneModeTile {
-
- public QAirplaneTile(Host host) {
- super(host);
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QBluetoothTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QBluetoothTile.java
deleted file mode 100644
index 4fe7e45..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QBluetoothTile.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-
-/** Quick settings tile: Bluetooth **/
-public class QBluetoothTile extends BluetoothTile {
-
- public QBluetoothTile(Host host) {
- super(host, false);
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QFlashlightTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QFlashlightTile.java
deleted file mode 100644
index e115755e..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QFlashlightTile.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-
-/** Quick settings tile: Flashlight **/
-public class QFlashlightTile extends FlashlightTile {
-
- public QFlashlightTile(Host host) {
- super(host);
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QLockTile.java
deleted file mode 100644
index 8b3013a..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QLockTile.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.internal.logging.MetricsLogger;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.R;
-import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-import com.android.systemui.statusbar.policy.KeyguardMonitor;
-
-public class QLockTile extends QSTile<QSTile.State> implements KeyguardMonitor.Callback {
-
- private final KeyguardMonitor mKeyguard;
-
- public QLockTile(Host host) {
- super(host);
- mKeyguard = host.getKeyguardMonitor();
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-
- @Override
- protected State newTileState() {
- return new State();
- }
-
- @Override
- public void setListening(boolean listening) {
- if (listening) {
- mKeyguard.addCallback(this);
- } else {
- mKeyguard.removeCallback(this);
- }
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsLogger.QS_LOCK_TILE;
- }
-
- @Override
- public void onKeyguardChanged() {
- refreshState();
- }
-
- @Override
- protected void handleClick() {
- if (mKeyguard.isShowing()) {
- mKeyguard.unlock();
- } else {
- mKeyguard.lock();
- }
- }
-
- @Override
- protected void handleUpdateState(State state, Object arg) {
- // TOD: Content description.
- state.visible = true;
- if (mKeyguard.isShowing()) {
- state.icon = ResourceIcon.get(R.drawable.ic_qs_lock);
- } else {
- state.icon = ResourceIcon.get(R.drawable.ic_qs_lock_open);
- }
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QRotationLockTile.java
deleted file mode 100644
index 5f5cab5..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QRotationLockTile.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-
-/** Quick settings tile: Rotation **/
-public class QRotationLockTile extends RotationLockTile {
-
- public QRotationLockTile(Host host) {
- super(host);
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/QWifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/QWifiTile.java
deleted file mode 100644
index f0fe87d..0000000
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/QWifiTile.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.systemui.qs.tiles;
-
-import android.content.Context;
-import com.android.systemui.QSQuickTileView;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
-import com.android.systemui.statusbar.policy.WifiIcons;
-
-/** Quick settings tile: Wifi **/
-public class QWifiTile extends WifiTile {
-
- public QWifiTile(Host host) {
- super(host, false);
- }
-
- @Override
- public QSTileBaseView createTileView(Context context) {
- return new QSQuickTileView(context);
- }
-
- @Override
- public int getTileType() {
- return QSTileView.QS_TYPE_QUICK;
- }
-
- @Override
- protected void handleUpdateState(SignalState state, Object arg) {
- super.handleUpdateState(state, arg);
-
- CallbackInfo cb = (CallbackInfo) arg;
- if (cb == null) {
- cb = mSignalCallback.mInfo;
- }
- boolean wifiConnected = cb.enabled && (cb.wifiSignalIconId > 0) && (cb.enabledDesc != null);
-
- if (state.enabled && wifiConnected) {
- // Only show full signal here.
- state.icon = ResourceIcon.get(WifiIcons.QS_WIFI_SIGNAL_STRENGTH[1][4]);
- }
- // No activity in the quick toggle.
- state.activityIn = false;
- state.activityOut = false;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
index 1a26a4d..d85cf60 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/RotationLockTile.java
@@ -72,7 +72,8 @@
final boolean rotationLocked = arg != null ? ((UserBoolean) arg).value
: mController.isRotationLocked();
final boolean userInitiated = arg != null ? ((UserBoolean) arg).userInitiated : false;
- state.visible = mController.isRotationLockAffordanceVisible();
+ // TODO: Handle accessibility rotation lock and whatnot.
+// state.visible = mController.isRotationLockAffordanceVisible();
if (state.value == rotationLocked && state.contentDescription != null) {
// No change and initialized, no need to update all the values.
return;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
index 3c5ab8d..d29cae4 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserTile.java
@@ -67,17 +67,19 @@
@Override
protected void handleUpdateState(State state, Object arg) {
final Pair<String, Drawable> p = arg != null ? (Pair<String, Drawable>) arg : mLastUpdate;
- state.visible = p != null;
- if (!state.visible) return;
- state.label = p.first;
- // TODO: Better content description.
- state.contentDescription = p.first;
- state.icon = new Icon() {
- @Override
- public Drawable getDrawable(Context context) {
- return p.second;
- }
- };
+ if (p != null) {
+ state.label = p.first;
+ // TODO: Better content description.
+ state.contentDescription = p.first;
+ state.icon = new Icon() {
+ @Override
+ public Drawable getDrawable(Context context) {
+ return p.second;
+ }
+ };
+ } else {
+ // TODO: Default state.
+ }
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
index 7f4442a..48b4096 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WifiTile.java
@@ -18,20 +18,19 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
-
import com.android.internal.logging.MetricsLogger;
import com.android.settingslib.wifi.AccessPoint;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetailItems;
import com.android.systemui.qs.QSDetailItems.Item;
+import com.android.systemui.qs.QSIconView;
import com.android.systemui.qs.QSTile;
-import com.android.systemui.qs.QSTileBaseView;
-import com.android.systemui.qs.QSTileView;
import com.android.systemui.qs.SignalTileView;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
@@ -51,22 +50,14 @@
protected final WifiSignalCallback mSignalCallback = new WifiSignalCallback();
- private final boolean mAlwaysDetail;
-
- public WifiTile(Host host, boolean alwaysDetail) {
+ public WifiTile(Host host) {
super(host);
- mAlwaysDetail = alwaysDetail;
mController = host.getNetworkController();
mWifiController = mController.getAccessPointController();
mDetailAdapter = new WifiDetailAdapter();
}
@Override
- public int getTileType() {
- return QSTileView.QS_TYPE_DUAL;
- }
-
- @Override
protected SignalState newTileState() {
return new SignalState();
}
@@ -95,23 +86,20 @@
}
@Override
- public QSTileBaseView createTileView(Context context) {
+ public QSIconView createTileView(Context context) {
return new SignalTileView(context);
}
@Override
- protected void handleClick() {
- if (mAlwaysDetail) {
- handleSecondaryClick();
- return;
- }
+ protected void handleSecondaryClick() {
+ // Secondary clicks are header clicks, just toggle.
mState.copyTo(mStateBeforeClick);
MetricsLogger.action(mContext, getMetricsCategory(), !mState.enabled);
mController.setWifiEnabled(!mState.enabled);
}
@Override
- protected void handleSecondaryClick() {
+ protected void handleClick() {
if (!mWifiController.canConfigWifi()) {
mHost.startActivityDismissingKeyguard(new Intent(Settings.ACTION_WIFI_SETTINGS));
return;
@@ -125,7 +113,6 @@
@Override
protected void handleUpdateState(SignalState state, Object arg) {
- state.visible = true;
if (DEBUG) Log.d(TAG, "handleUpdateState arg=" + arg);
CallbackInfo cb = (CallbackInfo) arg;
if (cb == null) {
@@ -201,6 +188,10 @@
return string;
}
+ public static boolean isSupported(Host host) {
+ return host.getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI);
+ }
+
protected static final class CallbackInfo {
boolean enabled;
boolean connected;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
new file mode 100644
index 0000000..07915f8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/WorkModeTile.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.qs.tiles;
+
+import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.os.UserManager;
+import com.android.internal.logging.MetricsLogger;
+import com.android.systemui.R;
+import com.android.systemui.qs.QSTile;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/** Quick settings tile: Work profile on/off */
+public class WorkModeTile extends QSTile<QSTile.BooleanState> {
+ private final AnimationIcon mEnable =
+ new AnimationIcon(R.drawable.ic_signal_workmode_enable_animation);
+ private final AnimationIcon mDisable =
+ new AnimationIcon(R.drawable.ic_signal_workmode_disable_animation);
+
+ private boolean mListening;
+
+ private UserManager mUserManager;
+ private List<UserInfo> mProfiles;
+
+ public WorkModeTile(Host host) {
+ super(host);
+ mUserManager = UserManager.get(mContext);
+ mProfiles = new LinkedList<UserInfo>();
+ }
+
+ @Override
+ protected BooleanState newTileState() {
+ return new BooleanState();
+ }
+
+ @Override
+ public void handleClick() {
+ MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
+ setWorkModeEnabled(!mState.value);
+ }
+
+ private void reloadManagedProfiles(int userHandle) {
+ synchronized (mProfiles) {
+ mProfiles.clear();
+
+ if (userHandle == UserHandle.USER_CURRENT) {
+ userHandle = ActivityManager.getCurrentUser();
+ }
+ for (UserInfo ui : mUserManager.getEnabledProfiles(userHandle)) {
+ if (ui.isManagedProfile()) {
+ mProfiles.add(ui);
+ }
+ }
+ }
+ }
+
+ private boolean hasActiveProfile() {
+ synchronized (mProfiles) {
+ return mProfiles.size() > 0;
+ }
+ }
+
+ private boolean isWorkModeEnabled() {
+ synchronized (mProfiles) {
+ for (UserInfo ui : mProfiles) {
+ if (ui.isQuietModeEnabled()) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ private void refreshQuietModeState(boolean backgroundRefresh) {
+ if (backgroundRefresh) {
+ refreshState(isWorkModeEnabled() ? UserBoolean.BACKGROUND_TRUE
+ : UserBoolean.BACKGROUND_FALSE);
+ } else {
+ refreshState(isWorkModeEnabled() ? UserBoolean.USER_TRUE : UserBoolean.USER_FALSE);
+ }
+ }
+
+ @Override
+ protected void handleUpdateState(BooleanState state, Object arg) {
+ if (!hasActiveProfile()) {
+ mHost.removeTile(getTileSpec());
+ return;
+ }
+
+ final boolean userInitialized;
+ if (arg instanceof UserBoolean) {
+ state.value = ((UserBoolean) arg).value;
+ userInitialized = ((UserBoolean) arg).userInitiated;
+ } else {
+ state.value = isWorkModeEnabled();
+ userInitialized = false;
+ }
+
+ final AnimationIcon icon;
+ state.label = mContext.getString(R.string.quick_settings_work_mode_label);
+ if (state.value) {
+ icon = mEnable;
+ state.contentDescription = mContext.getString(
+ R.string.accessibility_quick_settings_work_mode_on);
+ } else {
+ icon = mDisable;
+ state.contentDescription = mContext.getString(
+ R.string.accessibility_quick_settings_work_mode_off);
+ }
+ icon.setAllowAnimation(userInitialized);
+ state.icon = icon;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsLogger.QS_WORKMODE;
+ }
+
+ @Override
+ protected String composeChangeAnnouncement() {
+ if (mState.value) {
+ return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_on);
+ } else {
+ return mContext.getString(R.string.accessibility_quick_settings_work_mode_changed_off);
+ }
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (mListening == listening) {
+ return;
+ }
+ mListening = listening;
+ if (listening) {
+ reloadManagedProfiles(UserHandle.USER_CURRENT);
+
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_USER_SWITCHED);
+ filter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
+ filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
+ filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED);
+ mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, filter, null, null);
+ } else {
+ mContext.unregisterReceiver(mReceiver);
+ }
+ }
+
+ private void setWorkModeEnabled(boolean enabled) {
+ synchronized (mProfiles) {
+ for (UserInfo ui : mProfiles) {
+ mUserManager.setQuietModeEnabled(ui.id, !enabled);
+ }
+ }
+ }
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final String action = intent.getAction();
+ final int targetUser;
+ final boolean isBackgroundRefresh;
+ switch (action) {
+ case Intent.ACTION_USER_SWITCHED:
+ targetUser = intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
+ UserHandle.USER_CURRENT);
+ isBackgroundRefresh = true;
+ break;
+ case Intent.ACTION_MANAGED_PROFILE_ADDED:
+ case Intent.ACTION_MANAGED_PROFILE_REMOVED:
+ targetUser = UserHandle.USER_CURRENT;
+ isBackgroundRefresh = true;
+ break;
+ case Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED:
+ targetUser = UserHandle.USER_CURRENT;
+ isBackgroundRefresh = false;
+ break;
+ default:
+ targetUser = UserHandle.USER_NULL;
+ isBackgroundRefresh = false;
+ }
+ if (targetUser != UserHandle.USER_NULL) {
+ reloadManagedProfiles(targetUser);
+ refreshQuietModeState(isBackgroundRefresh);
+ }
+ }
+ };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index c98ecb5..b81c23a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -365,8 +365,8 @@
}
@Override
- public void dockTopTask(boolean draggingInRecents, Rect initialBounds) {
- mImpl.dockTopTask(draggingInRecents, initialBounds);
+ public void dockTopTask(boolean draggingInRecents, int stackCreateMode, Rect initialBounds) {
+ mImpl.dockTopTask(draggingInRecents, stackCreateMode,initialBounds);
if (draggingInRecents) {
mDraggingInRecentsCurrentUser = sSystemServicesProxy.getCurrentUser();
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index a0c481a..384b86f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -26,7 +26,6 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
@@ -62,8 +61,6 @@
import com.android.systemui.recents.events.ui.StackViewScrolledEvent;
import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent;
import com.android.systemui.recents.events.ui.UserInteractionEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent;
-import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent;
import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent;
import com.android.systemui.recents.events.ui.focus.FocusNextTaskViewEvent;
import com.android.systemui.recents.events.ui.focus.FocusPreviousTaskViewEvent;
@@ -287,6 +284,20 @@
}
/**
+ * Dismisses recents back to the launch target task.
+ */
+ boolean dismissRecentsToLaunchTargetTaskOrHome() {
+ SystemServicesProxy ssp = Recents.getSystemServices();
+ if (ssp.isRecentsTopMost(ssp.getTopMostTask(), null)) {
+ // If we have a focused Task, launch that Task now
+ if (mRecentsView.launchPreviousTask()) return true;
+ // If none of the other cases apply, then just go Home
+ dismissRecentsToHome(true);
+ }
+ return false;
+ }
+
+ /**
* Dismisses recents if we are already visible and the intent is to toggle the recents view.
*/
boolean dismissRecentsToFocusedTaskOrHome() {
@@ -414,10 +425,6 @@
EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
}
- if (!launchState.launchedHasConfigurationChanged) {
- mRecentsView.disableLayersForOneFrame();
- }
-
// Notify that recents is now visible
SystemServicesProxy ssp = Recents.getSystemServices();
EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, ssp, true));
@@ -569,9 +576,8 @@
@Override
public void onBackPressed() {
- if (!dismissHistory()) {
- dismissRecentsToFocusedTaskOrHome();
- }
+ // Back behaves like the recents button so just trigger a toggle event
+ EventBus.getDefault().send(new ToggleRecentsEvent());
}
/**** RecentsResizeTaskDialog ****/
@@ -587,7 +593,12 @@
public final void onBusEvent(ToggleRecentsEvent event) {
if (!dismissHistory()) {
- dismissRecentsToFocusedTaskOrHome();
+ RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
+ if (launchState.launchedFromHome) {
+ dismissRecentsToHome(true);
+ } else {
+ dismissRecentsToLaunchTargetTaskOrHome();
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivityLaunchState.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivityLaunchState.java
index 43db666..e0bd59b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivityLaunchState.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivityLaunchState.java
@@ -82,7 +82,7 @@
if (launchedFromHome) {
return numTasks - 1;
} else {
- if (flags.isFastToggleRecentsEnabled()) {
+ if (flags.isFastToggleRecentsEnabled() || !flags.isInitialStatePaging()) {
return numTasks - 1;
} else {
return numTasks - 2;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
index cdfad18..53c10b7 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
@@ -115,8 +115,8 @@
// Recompute some values based on the given state, since we can not rely on the resource
// system to get certain values.
boolean isLandscape = windowRect.width() > windowRect.height();
- hasTransposedNavBar = isLandscape && isLargeScreen && !isXLargeScreen;
- hasTransposedSearchBar = isLandscape && isLargeScreen && !isXLargeScreen;
+ hasTransposedNavBar = isLandscape && !isXLargeScreen;
+ hasTransposedSearchBar = isLandscape && !isXLargeScreen;
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
index e8b8816..d778886 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java
@@ -30,6 +30,7 @@
private static final String KEY_PAGE_ON_TOGGLE = "overview_page_on_toggle";
private static final String KEY_FULLSCREEN_THUMBNAILS = "overview_fullscreen_thumbnails";
private static final String KEY_SHOW_HISTORY = "overview_show_history";
+ private static final String KEY_INITIAL_STATE_PAGING = "overview_initial_state_paging";
public static class Static {
// Enables debug drawing for the transition thumbnail
@@ -54,6 +55,7 @@
private boolean mPageOnToggle;
private boolean mUseFullscreenThumbnails;
private boolean mShowHistory;
+ private boolean mInitialStatePaging;
/**
* We read the prefs once when we start the activity, then update them as the tuner changes
@@ -63,7 +65,7 @@
// Register all our flags, this will also call onTuningChanged() for each key, which will
// initialize the current state of each flag
TunerService.get(context).addTunable(this, KEY_FAST_TOGGLE, KEY_PAGE_ON_TOGGLE,
- KEY_FULLSCREEN_THUMBNAILS, KEY_SHOW_HISTORY);
+ KEY_FULLSCREEN_THUMBNAILS, KEY_SHOW_HISTORY, KEY_INITIAL_STATE_PAGING);
}
/**
@@ -94,6 +96,13 @@
return mShowHistory;
}
+ /**
+ * @return whether the initial stack state is paging.
+ */
+ public boolean isInitialStatePaging() {
+ return mInitialStatePaging;
+ }
+
@Override
public void onTuningChanged(String key, String newValue) {
switch (key) {
@@ -113,6 +122,10 @@
mShowHistory = (newValue != null) &&
(Integer.parseInt(newValue) != 0);
break;
+ case KEY_INITIAL_STATE_PAGING:
+ mInitialStatePaging = (newValue != null) &&
+ (Integer.parseInt(newValue) != 0);
+ break;
}
EventBus.getDefault().send(new DebugFlagsChangedEvent());
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 0f82cce..2a4017a 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -35,7 +35,6 @@
import android.view.AppTransitionAnimationSpec;
import android.view.LayoutInflater;
import android.view.View;
-
import com.android.internal.logging.MetricsLogger;
import com.android.systemui.Prefs;
import com.android.systemui.R;
@@ -200,7 +199,7 @@
mDummyStackView = new TaskStackView(mContext, new TaskStack());
mHeaderBar = (TaskViewHeader) inflater.inflate(R.layout.recents_task_view_header,
null, false);
- reloadHeaderBarLayout(true /* tryAndBindSearchWidget */);
+ reloadHeaderBarLayout(true /* tryAndBindSearchWidget */, null /* stack */);
// When we start, preload the data associated with the previous recent tasks.
// We can use a new plan since the caches will be the same.
@@ -216,7 +215,7 @@
public void onBootCompleted() {
mBootCompleted = true;
- reloadHeaderBarLayout(true /* tryAndBindSearchWidget */);
+ reloadHeaderBarLayout(true /* tryAndBindSearchWidget */, null /* stack */);
}
@Override
@@ -540,12 +539,11 @@
showRelativeAffiliatedTask(false);
}
- public void dockTopTask(boolean draggingInRecents, Rect initialBounds) {
+ public void dockTopTask(boolean draggingInRecents, int stackCreateMode, Rect initialBounds) {
SystemServicesProxy ssp = Recents.getSystemServices();
ActivityManager.RunningTaskInfo topTask = ssp.getTopMostTask();
if (topTask != null && !SystemServicesProxy.isHomeStack(topTask.stackId)) {
- ssp.moveTaskToDockedStack(topTask.id,
- ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, initialBounds);
+ ssp.moveTaskToDockedStack(topTask.id, stackCreateMode, initialBounds);
showRecents(false /* triggeredFromAltTab */, draggingInRecents, false /* animate */,
true /* reloadTasks*/);
}
@@ -566,8 +564,9 @@
*
* @param tryAndBindSearchWidget if set, will attempt to fetch and bind the search widget if one
* is not already bound (can be expensive)
+ * @param stack the stack to initialize the stack layout with
*/
- private void reloadHeaderBarLayout(boolean tryAndBindSearchWidget) {
+ private void reloadHeaderBarLayout(boolean tryAndBindSearchWidget, TaskStack stack) {
RecentsConfiguration config = Recents.getConfiguration();
SystemServicesProxy ssp = Recents.getSystemServices();
Rect windowRect = ssp.getWindowRect();
@@ -593,7 +592,10 @@
TaskStackLayoutAlgorithm algo = mDummyStackView.getStackAlgorithm();
Rect taskStackBounds = new Rect(mTaskStackBounds);
algo.setSystemInsets(systemInsets);
- algo.initialize(taskStackBounds);
+ if (stack != null) {
+ algo.initialize(taskStackBounds,
+ TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack));
+ }
Rect taskViewBounds = algo.getUntransformedTaskViewBounds();
if (!taskViewBounds.equals(mLastTaskViewBounds)) {
mLastTaskViewBounds.set(taskViewBounds);
@@ -629,7 +631,7 @@
preloadIcon(topTask);
// Update the header bar if necessary
- reloadHeaderBarLayout(false /* tryAndBindSearchWidget */);
+ reloadHeaderBarLayout(false /* tryAndBindSearchWidget */, stack);
// Update the destination rect
mDummyStackView.updateLayoutForStack(stack);
@@ -800,9 +802,6 @@
boolean isTopTaskHome, boolean animate) {
RecentsTaskLoader loader = Recents.getTaskLoader();
- // Update the header bar if necessary
- reloadHeaderBarLayout(false /* tryAndBindSearchWidget */);
-
// In the case where alt-tab is triggered, we never get a preloadRecents() call, so we
// should always preload the tasks now. If we are dragging in recents, reload them as
// the stacks might have changed.
@@ -815,6 +814,9 @@
}
TaskStack stack = sInstanceLoadPlan.getTaskStack();
+ // Update the header bar if necessary
+ reloadHeaderBarLayout(false /* tryAndBindSearchWidget */, stack);
+
// Prepare the dummy stack for the transition
mDummyStackView.updateLayoutForStack(stack);
TaskStackLayoutAlgorithm.VisibilityReport stackVr =
diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java b/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java
index eb81e80..d72218f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/events/EventBus.java
@@ -761,7 +761,7 @@
} catch (IllegalAccessException e) {
Log.e(TAG, "Failed to invoke method", e.getCause());
} catch (InvocationTargetException e) {
- throw new RuntimeException("Failed to invoke method", e);
+ throw new RuntimeException(e.getCause());
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryAdapter.java b/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryAdapter.java
index 913d427..2eee1da 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryAdapter.java
@@ -18,7 +18,6 @@
import android.app.ActivityOptions;
import android.content.Context;
-import android.content.res.Resources;
import android.support.v7.widget.RecyclerView;
import android.text.format.DateFormat;
import android.view.LayoutInflater;
@@ -29,7 +28,6 @@
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.model.Task;
-import com.android.systemui.recents.model.TaskStack;
import java.util.ArrayList;
import java.util.Calendar;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryView.java b/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryView.java
index 9d3a99f..5851111 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryView.java
@@ -27,7 +27,6 @@
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
-
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsConfiguration;
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 2b20c07..8979843 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java
@@ -52,6 +52,7 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.util.ArraySet;
import android.util.Log;
import android.util.MutableBoolean;
import android.util.Pair;
@@ -115,7 +116,6 @@
/** Private constructor */
public SystemServicesProxy(Context context) {
- RecentsDebugFlags flags = Recents.getDebugFlags();
mAccm = AccessibilityManager.getInstance(context);
mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
mIam = ActivityManagerNative.getDefault();
@@ -155,7 +155,7 @@
/** Returns a list of the recents tasks */
public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numLatestTasks, int userId,
- boolean isTopTaskHome) {
+ boolean isTopTaskHome, ArraySet<Integer> quietProfileIds) {
if (mAm == null) return null;
// If we are mocking, then create some recent tasks
@@ -216,6 +216,8 @@
// tasks if it is not the first active task.
boolean isExcluded = (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
== Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
+ // Filter out recent tasks from managed profiles which are in quiet mode.
+ isExcluded |= quietProfileIds.contains(t.userId);
if (isExcluded && (isTopTaskHome || !isFirstValidTask)) {
iter.remove();
continue;
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 3bb89a3..1845bf9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java
@@ -18,10 +18,13 @@
import android.app.ActivityManager;
import android.content.Context;
+import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.ArraySet;
import android.util.Log;
import com.android.systemui.Prefs;
import com.android.systemui.recents.Recents;
@@ -48,7 +51,8 @@
private static boolean DEBUG = false;
private static int MIN_NUM_TASKS = 5;
- private static int SESSION_BEGIN_TIME = 60 /* s/min */ * 60 /* min/hr */ * 6 /* hrs */;
+ private static int SESSION_BEGIN_TIME = 1000 /* ms/s */ * 60 /* s/min */ * 60 /* min/hr */ *
+ 6 /* hrs */;
/** The set of conditions to load tasks. */
public static class Options {
@@ -65,20 +69,42 @@
List<ActivityManager.RecentTaskInfo> mRawTasks;
TaskStack mStack;
+ ArraySet<Integer> mCurrentQuietProfiles = new ArraySet<Integer>();
/** Package level ctor */
RecentsTaskLoadPlan(Context context) {
mContext = context;
}
+ private void updateCurrentQuietProfilesCache(int currentUserId) {
+ mCurrentQuietProfiles.clear();
+
+ if (currentUserId == UserHandle.USER_CURRENT) {
+ currentUserId = ActivityManager.getCurrentUser();
+ }
+ UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ List<UserInfo> profiles = userManager.getProfiles(currentUserId);
+ if (profiles != null) {
+ for (int i = 0; i < profiles.size(); i++) {
+ UserInfo user = profiles.get(i);
+ if (user.isManagedProfile() && user.isQuietModeEnabled()) {
+ mCurrentQuietProfiles.add(user.id);
+ }
+ }
+ }
+ }
+
/**
* An optimization to preload the raw list of tasks. The raw tasks are saved in least-recent
* to most-recent order.
*/
public synchronized void preloadRawTasks(boolean isTopTaskHome) {
+ int currentUserId = UserHandle.USER_CURRENT;
+ updateCurrentQuietProfilesCache(currentUserId);
SystemServicesProxy ssp = Recents.getSystemServices();
mRawTasks = ssp.getRecentTasks(ActivityManager.getMaxRecentTasksStatic(),
- UserHandle.CURRENT.getIdentifier(), isTopTaskHome);
+ currentUserId, isTopTaskHome, mCurrentQuietProfiles);
+
// Since the raw tasks are given in most-recent to least-recent order, we need to reverse it
Collections.reverse(mRawTasks);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
index cd0a46f..7a98393 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
@@ -137,7 +137,7 @@
/** Returns the index of this task in the list of filtered tasks */
int indexOf(Task t) {
- if (mTaskIndices.containsKey(t.key)) {
+ if (t != null && mTaskIndices.containsKey(t.key)) {
return mTaskIndices.get(t.key);
}
return -1;
@@ -200,21 +200,30 @@
public interface TaskStackCallbacks {
/* Notifies when a task has been removed from the stack */
void onStackTaskRemoved(TaskStack stack, Task removedTask, boolean wasFrontMostTask,
- Task newFrontMostTask);
+ Task newFrontMostTask);
+
+ /* Notifies when a task has been removed from the history */
+ void onHistoryTaskRemoved(TaskStack stack, Task removedTask);
}
/**
* The various possible dock states when dragging and dropping a task.
*/
- public enum DockState implements DropTarget {
- NONE(-1, 96, null, null),
- LEFT(DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, 192,
- new RectF(0, 0, 0.25f, 1), new RectF(0, 0, 0.25f, 1)),
- TOP(DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, 192,
- new RectF(0, 0, 1, 0.25f), new RectF(0, 0, 1, 0.25f)),
- RIGHT(DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT, 192,
- new RectF(0.75f, 0, 1, 1), new RectF(0.75f, 0, 1, 1)),
- BOTTOM(DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT, 192,
+ public static class DockState implements DropTarget {
+
+ private static final int DOCK_AREA_ALPHA = 192;
+ public static final DockState NONE = new DockState(-1, 96, null, null);
+ public static final DockState LEFT = new DockState(
+ DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, DOCK_AREA_ALPHA,
+ new RectF(0, 0, 0.25f, 1), new RectF(0, 0, 0.25f, 1));
+ public static final DockState TOP = new DockState(
+ DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT, DOCK_AREA_ALPHA,
+ new RectF(0, 0, 1, 0.25f), new RectF(0, 0, 1, 0.25f));
+ public static final DockState RIGHT = new DockState(
+ DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT, DOCK_AREA_ALPHA,
+ new RectF(0.75f, 0, 1, 1), new RectF(0.75f, 0, 1, 1));
+ public static final DockState BOTTOM = new DockState(
+ DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT, DOCK_AREA_ALPHA,
new RectF(0, 0.75f, 1, 1), new RectF(0, 0.75f, 1, 1));
@Override
@@ -376,6 +385,7 @@
public void removeTask(Task t) {
if (mStackTaskList.contains(t)) {
boolean wasFrontMostTask = (getStackFrontMostTask() == t);
+ int removedTaskIndex = indexOfStackTask(t);
removeTaskImpl(mStackTaskList, t);
Task newFrontMostTask = getStackFrontMostTask();
if (newFrontMostTask != null && newFrontMostTask.lockToTaskEnabled) {
@@ -389,7 +399,7 @@
removeTaskImpl(mHistoryTaskList, t);
if (mCb != null) {
// Notify that a task has been removed
- mCb.onStackTaskRemoved(this, t, false, null);
+ mCb.onHistoryTaskRemoved(this, t);
}
}
}
@@ -463,6 +473,22 @@
}
/**
+ * Returns the number of freeform tasks in the active stack.
+ */
+ public int getStackTaskFreeformCount() {
+ ArrayList<Task> tasks = mStackTaskList.getTasks();
+ int freeformCount = 0;
+ int taskCount = tasks.size();
+ for (int i = 0; i < taskCount; i++) {
+ Task task = tasks.get(i);
+ if (task.isFreeformTask()) {
+ freeformCount++;
+ }
+ }
+ return freeformCount;
+ }
+
+ /**
* Returns the task in stack tasks which is the launch target.
*/
public Task getLaunchTarget() {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java b/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java
index 271a2a0..757d2aa 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/AnimateableViewBounds.java
@@ -69,7 +69,6 @@
*/
public void reset() {
mClipRect.setEmpty();
- mSourceView.invalidateOutline();
updateClipBounds();
}
@@ -94,7 +93,6 @@
public void setClipBottom(int bottom, boolean force) {
if (bottom != mClipRect.bottom || force) {
mClipRect.bottom = bottom;
- mSourceView.invalidateOutline();
updateClipBounds();
}
}
@@ -108,7 +106,6 @@
public void setClipRight(int right, boolean force) {
if (right != mClipRect.right || force) {
mClipRect.right = right;
- mSourceView.invalidateOutline();
updateClipBounds();
}
}
@@ -123,5 +120,6 @@
mSourceView.getWidth() - mClipRect.right,
mSourceView.getHeight() - mClipRect.bottom);
mSourceView.setClipBounds(mClipBounds);
+ mSourceView.invalidateOutline();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java
index a70b66d..9b9d58c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java
@@ -17,10 +17,12 @@
package com.android.systemui.recents.views;
import android.graphics.Rect;
+import android.graphics.RectF;
import android.util.Log;
import com.android.systemui.recents.misc.Utilities;
import com.android.systemui.recents.model.Task;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -32,48 +34,91 @@
private static final String TAG = "FreeformWorkspaceLayoutAlgorithm";
private static final boolean DEBUG = false;
- // The number of cells in the freeform workspace
- private int mFreeformCellXCount;
- private int mFreeformCellYCount;
-
- // The width and height of the cells in the freeform workspace
- private int mFreeformCellWidth;
- private int mFreeformCellHeight;
-
- // Optimization, allows for quick lookup of task -> index
- private HashMap<Task.TaskKey, Integer> mTaskIndexMap = new HashMap<>();
+ // Optimization, allows for quick lookup of task -> rect
+ private HashMap<Task.TaskKey, RectF> mTaskRectMap = new HashMap<>();
/**
* Updates the layout for each of the freeform workspace tasks. This is called after the stack
* layout is updated.
*/
public void update(List<Task> freeformTasks, TaskStackLayoutAlgorithm stackLayout) {
- mTaskIndexMap.clear();
+ Collections.reverse(freeformTasks);
+ mTaskRectMap.clear();
int numFreeformTasks = stackLayout.mNumFreeformTasks;
if (!freeformTasks.isEmpty()) {
- // Calculate the cell width/height depending on the number of freeform tasks
- mFreeformCellXCount = Math.max(1, (int) Math.ceil(Math.sqrt(numFreeformTasks)));
- mFreeformCellYCount = Math.max(1, (int) Math.ceil((float) numFreeformTasks /
- mFreeformCellXCount));
- // For now, make the cells square
- mFreeformCellWidth = Math.min(stackLayout.mFreeformRect.width() / mFreeformCellXCount,
- stackLayout.mFreeformRect.height() / mFreeformCellYCount);
- mFreeformCellHeight = mFreeformCellWidth;
- // Put each of the tasks in the progress map at a fixed index (does not need to actually
- // map to a scroll position, just by index)
- int taskCount = freeformTasks.size();
- for (int i = taskCount - 1; i >= 0; i--) {
+ // Normalize the widths so that we can calculate the best layout below
+ int workspaceWidth = stackLayout.mFreeformRect.width();
+ int workspaceHeight = stackLayout.mFreeformRect.height();
+ float normalizedWorkspaceWidth = (float) workspaceWidth / workspaceHeight;
+ float normalizedWorkspaceHeight = 1f;
+ float[] normalizedTaskWidths = new float[numFreeformTasks];
+ for (int i = 0; i < numFreeformTasks; i++) {
Task task = freeformTasks.get(i);
- mTaskIndexMap.put(task.key, taskCount - i - 1);
+ float rowTaskWidth;
+ if (task.bounds != null) {
+ rowTaskWidth = (float) task.bounds.width() / task.bounds.height();
+ } else {
+ // If this is a stack task that was dragged into the freeform workspace, then
+ // the task will not yet have an associated bounds, so assume the full workspace
+ // width for the time being
+ rowTaskWidth = normalizedWorkspaceWidth;
+ }
+ // Bound the task width to the workspace width so that at the worst case, it will
+ // fit its own row
+ normalizedTaskWidths[i] = Math.min(rowTaskWidth,
+ normalizedWorkspaceWidth);
}
- if (DEBUG) {
- Log.d(TAG, "mFreeformCellXCount: " + mFreeformCellXCount);
- Log.d(TAG, "mFreeformCellYCount: " + mFreeformCellYCount);
- Log.d(TAG, "mFreeformCellWidth: " + mFreeformCellWidth);
- Log.d(TAG, "mFreeformCellHeight: " + mFreeformCellHeight);
+ // Determine the scale to best fit each of the tasks in the workspace
+ float rowScale = 0.85f;
+ float rowWidth = 0f;
+ float maxRowWidth = 0f;
+ int rowCount = 1;
+ for (int i = 0; i < numFreeformTasks;) {
+ float width = normalizedTaskWidths[i] * rowScale;
+ if (rowWidth + width > normalizedWorkspaceWidth) {
+ // That is too long for this row, create new row
+ rowWidth = 0f;
+ if ((rowCount + 1) * rowScale > normalizedWorkspaceHeight) {
+ // The new row is too high, so we need to try fitting again. Update the
+ // scale to be the smaller of the scale needed to fit the task in the
+ // previous row, or the scale needed to fit the new row
+ rowScale = Math.min(normalizedWorkspaceWidth / (rowWidth + width),
+ normalizedWorkspaceHeight / (rowCount + 1));
+ rowCount = 1;
+ i = 0;
+ } else {
+ // The new row fits, so continue
+ rowCount++;
+ i++;
+ }
+ } else {
+ // Task is OK in this row
+ rowWidth += width;
+ i++;
+ }
+ maxRowWidth = Math.max(rowWidth, maxRowWidth);
+ }
+
+ // Normalize each of the actual rects to that scale
+ int height = (int) (rowScale * workspaceHeight);
+ float rowTop = ((1f - (rowScale * rowCount)) * workspaceHeight) / 2f;
+ float defaultRowLeft = ((1f - (maxRowWidth / normalizedWorkspaceWidth)) *
+ workspaceWidth) / 2f;
+ float rowLeft = defaultRowLeft;
+ for (int i = 0; i < numFreeformTasks; i++) {
+ Task task = freeformTasks.get(i);
+ int width = (int) (height * normalizedTaskWidths[i]);
+ if (rowLeft + width > workspaceWidth) {
+ // This goes on the next line
+ rowTop += height;
+ rowLeft = defaultRowLeft;
+ }
+ RectF rect = new RectF(rowLeft, rowTop, rowLeft + width, rowTop + height);
+ rowLeft += width;
+ mTaskRectMap.put(task.key, rect);
}
}
}
@@ -85,7 +130,7 @@
if (stackLayout.mNumFreeformTasks == 0 || task == null) {
return false;
}
- return mTaskIndexMap.containsKey(task.key);
+ return mTaskRectMap.containsKey(task.key);
}
/**
@@ -94,28 +139,35 @@
*/
public TaskViewTransform getTransform(Task task, TaskViewTransform transformOut,
TaskStackLayoutAlgorithm stackLayout) {
- if (mTaskIndexMap.containsKey(task.key)) {
+ if (mTaskRectMap.containsKey(task.key)) {
Rect taskRect = stackLayout.mTaskRect;
- int taskIndex = mTaskIndexMap.get(task.key);
+ RectF ffRect = mTaskRectMap.get(task.key);
+ float scale = Math.max(ffRect.width() / taskRect.width(),
+ ffRect.height() / taskRect.height());
int topOffset = (stackLayout.mFreeformRect.top - taskRect.top);
- int x = taskIndex % mFreeformCellXCount;
- int y = taskIndex / mFreeformCellXCount;
+ int scaleXOffset = (int) (((1f - scale) * taskRect.width()) / 2);
+ int scaleYOffset = (int) (((1f - scale) * taskRect.height()) / 2);
- int bitmapWidth = task.thumbnail.getWidth();
- int bitmapHeight = task.thumbnail.getHeight();
- float thumbnailScale = Math.min((float) mFreeformCellWidth / bitmapWidth,
- (float) mFreeformCellHeight / bitmapHeight);
- float thumbnailWidth = bitmapWidth * thumbnailScale;
- float thumbnailHeight = bitmapHeight * thumbnailScale;
- int scaleXOffset = (int) (((1f - thumbnailScale) * thumbnailWidth) / 2);
- int scaleYOffset = (int) (((1f - thumbnailScale) * thumbnailHeight) / 2);
- transformOut.scale = thumbnailScale * 0.9f;
- transformOut.translationX = x * mFreeformCellWidth - scaleXOffset;
- transformOut.translationY = topOffset + y * mFreeformCellHeight - scaleYOffset;
+ transformOut.scale = scale * 0.95f;
+ transformOut.translationX = (int) (ffRect.left - scaleXOffset);
+ transformOut.translationY = (int) (topOffset + ffRect.top - scaleYOffset);
transformOut.translationZ = stackLayout.mMaxTranslationZ;
- transformOut.rect.set(stackLayout.mTaskRect);
+ transformOut.clipBottom = (int) (taskRect.height() - (ffRect.height() / scale));
+ transformOut.clipRight = (int) (taskRect.width() - (ffRect.width() / scale));
+ if (task.thumbnail != null) {
+ transformOut.thumbnailScale = Math.min(
+ ((float) taskRect.width() - transformOut.clipRight) /
+ task.thumbnail.getWidth(),
+ ((float) taskRect.height() - transformOut.clipBottom) /
+ task.thumbnail.getHeight());
+ } else {
+ transformOut.thumbnailScale = 1f;
+ }
+ transformOut.rect.set(taskRect);
transformOut.rect.offset(transformOut.translationX, transformOut.translationY);
Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
+ transformOut.rect.right -= transformOut.clipRight * scale;
+ transformOut.rect.bottom -= transformOut.clipBottom * scale;
transformOut.visible = true;
transformOut.p = 1f;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
index 736020f..96b1a41 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java
@@ -257,7 +257,7 @@
TaskStackLayoutAlgorithm layoutAlgorithm = stackView.getStackAlgorithm();
Rect offscreenTaskRect = new Rect(layoutAlgorithm.mTaskRect);
offscreenTaskRect.offsetTo(offscreenTaskRect.left,
- layoutAlgorithm.mCurrentStackRect.bottom);
+ layoutAlgorithm.mStackRect.bottom);
// If this is a full screen stack, the transition will be towards the single, full screen
// task. We only need the transition spec for this task.
@@ -308,12 +308,6 @@
*/
private static AppTransitionAnimationSpec composeAnimationSpec(TaskView taskView,
TaskViewTransform transform, boolean addHeaderBitmap) {
- // Disable any focused state before we draw the header
- // Upfront the processing of the thumbnail
- if (taskView.isFocusedTask()) {
- taskView.setFocusedState(false, false /* animated */, false /* requestViewFocus */);
- }
-
Bitmap b = null;
if (addHeaderBitmap) {
float scale = transform.scale;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 551f067..7ae686e 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -16,6 +16,8 @@
package com.android.systemui.recents.views;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
@@ -27,6 +29,8 @@
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewPropertyAnimator;
import android.view.WindowInsets;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
@@ -55,6 +59,8 @@
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.model.Task;
import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.stackdivider.WindowManagerProxy;
+import com.android.systemui.statusbar.FlingAnimationUtils;
import java.util.ArrayList;
import java.util.List;
@@ -94,8 +100,10 @@
Rect mSystemInsets = new Rect();
+ final FlingAnimationUtils mFlingAnimationUtils;
+
public RecentsView(Context context) {
- super(context);
+ this(context, null);
}
public RecentsView(Context context, AttributeSet attrs) {
@@ -118,6 +126,7 @@
com.android.internal.R.interpolator.fast_out_linear_in);
mHistoryTransitionDuration = res.getInteger(R.integer.recents_history_transition_duration);
mTouchHandler = new RecentsViewTouchHandler(this);
+ mFlingAnimationUtils = new FlingAnimationUtils(context, 0.3f);
LayoutInflater inflater = LayoutInflater.from(context);
mHistoryButton = inflater.inflate(R.layout.recents_history_button, this, false);
@@ -138,6 +147,8 @@
// If onRecentsHidden is not triggered, we need to the stack view again here
mTaskStackView.reset();
mTaskStackView.setStack(stack);
+ removeView(mTaskStackView);
+ addView(mTaskStackView);
} else {
mTaskStackView = new TaskStackView(getContext(), stack);
mTaskStackView.setCallbacks(this);
@@ -213,6 +224,21 @@
return false;
}
+ /** Launches the task that recents was launched from if possible */
+ public boolean launchPreviousTask() {
+ if (mTaskStackView != null) {
+ TaskStack stack = mTaskStackView.getStack();
+ Task task = stack.getLaunchTarget();
+ if (task != null) {
+ TaskView taskView = mTaskStackView.getChildViewForTask(task);
+ onTaskViewClicked(mTaskStackView, taskView, stack, task, false, null,
+ INVALID_STACK_ID);
+ return true;
+ }
+ }
+ return false;
+ }
+
/** Launches a given task. */
public boolean launchTask(Task task, Rect taskBounds, int destinationStack) {
if (mTaskStackView != null) {
@@ -385,6 +411,8 @@
RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
if (launchState.launchedViaDragGesture) {
setTranslationY(getMeasuredHeight());
+ } else {
+ setTranslationY(0f);
}
}
}
@@ -428,12 +456,6 @@
return super.verifyDrawable(who);
}
- public void disableLayersForOneFrame() {
- if (mTaskStackView != null) {
- mTaskStackView.disableLayersForOneFrame();
- }
- }
-
/**** TaskStackView.TaskStackCallbacks Implementation ****/
@Override
@@ -471,9 +493,6 @@
final TaskStack.DockState dockState = (TaskStack.DockState) event.dropTarget;
// Remove the task after it is docked
- if (event.taskView.isFocusedTask()) {
- mTaskStackView.resetFocusedTask();
- }
event.taskView.animate()
.alpha(0f)
.setDuration(150)
@@ -503,7 +522,22 @@
}
public final void onBusEvent(DraggingInRecentsEndedEvent event) {
- animate().translationY(0f);
+ ViewPropertyAnimator animator = animate();
+ if (event.velocity > mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
+ animator.translationY(getHeight());
+ animator.withEndAction(new Runnable() {
+ @Override
+ public void run() {
+ WindowManagerProxy.getInstance().maximizeDockedStack();
+ }
+ });
+ mFlingAnimationUtils.apply(animator, getTranslationY(), getHeight(), event.velocity);
+ } else {
+ animator.translationY(0f);
+ animator.setListener(null);
+ mFlingAnimationUtils.apply(animator, getTranslationY(), 0, event.velocity);
+ }
+ animator.start();
}
public final void onBusEvent(ShowHistoryEvent event) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
index 6af2ada..7d5daae 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
@@ -114,6 +114,74 @@
public static final float STATE_UNFOCUSED = 0f;
/**
+ * The various stack/freeform states.
+ */
+ public static class StackState {
+
+ public static final StackState FREEFORM_ONLY = new StackState(1f, 0);
+ public static final StackState STACK_ONLY = new StackState(0f, 0);
+ public static final StackState SPLIT = new StackState(0.5f, 255);
+
+ public final float freeformHeightPct;
+ public final int freeformBackgroundAlpha;
+
+ /**
+ * @param freeformHeightPct the percentage of the stack height (not including paddings) to
+ * allocate to the freeform workspace
+ * @param freeformBackgroundAlpha the background alpha for the freeform workspace
+ */
+ StackState(float freeformHeightPct, int freeformBackgroundAlpha) {
+ this.freeformHeightPct = freeformHeightPct;
+ this.freeformBackgroundAlpha = freeformBackgroundAlpha;
+ }
+
+ /**
+ * Resolves the stack state for the layout given a task stack.
+ */
+ public static StackState getStackStateForStack(TaskStack stack) {
+ SystemServicesProxy ssp = Recents.getSystemServices();
+ boolean hasFreeformWorkspaces = ssp.hasFreeformWorkspaceSupport();
+ int taskCount = stack.getStackTaskCount();
+ int freeformCount = stack.getStackTaskFreeformCount();
+ int stackCount = taskCount - freeformCount;
+ if (hasFreeformWorkspaces && stackCount > 0 && freeformCount > 0) {
+ return SPLIT;
+ } else if (hasFreeformWorkspaces && freeformCount > 0) {
+ return FREEFORM_ONLY;
+ } else {
+ return STACK_ONLY;
+ }
+ }
+
+ /**
+ * Computes the freeform and stack rect for this state.
+ *
+ * @param freeformRectOut the freeform rect to be written out
+ * @param stackRectOut the stack rect, we only write out the top of the stack
+ * @param taskStackBounds the full rect that the freeform rect can take up
+ */
+ public void computeRects(Rect freeformRectOut, Rect stackRectOut,
+ Rect taskStackBounds, int widthPadding, int heightPadding, int stackBottomOffset) {
+ int availableHeight = taskStackBounds.height() - stackBottomOffset;
+ int ffPaddedHeight = (int) (availableHeight * freeformHeightPct);
+ int ffHeight = Math.max(0, ffPaddedHeight - (2 * heightPadding));
+ freeformRectOut.set(taskStackBounds.left + widthPadding,
+ taskStackBounds.top + heightPadding,
+ taskStackBounds.right - widthPadding,
+ taskStackBounds.top + heightPadding + ffHeight);
+ stackRectOut.set(taskStackBounds.left + widthPadding,
+ taskStackBounds.top,
+ taskStackBounds.right - widthPadding,
+ taskStackBounds.bottom);
+ if (ffPaddedHeight > 0) {
+ stackRectOut.top += ffPaddedHeight;
+ } else {
+ stackRectOut.top += heightPadding;
+ }
+ }
+ }
+
+ /**
* A Property wrapper around the <code>focusState</code> functionality handled by the
* {@link TaskStackLayoutAlgorithm#setFocusState(float)} and
* {@link TaskStackLayoutAlgorithm#getFocusState()} methods.
@@ -145,21 +213,16 @@
Context mContext;
private TaskStackView mStackView;
- private Interpolator mFastOutSlowInInterpolator;
+ private Interpolator mLinearOutSlowInInterpolator;
+ private StackState mState = StackState.SPLIT;
// The task bounds (untransformed) for layout. This rect is anchored at mTaskRoot.
public Rect mTaskRect = new Rect();
// The freeform workspace bounds, inset from the top by the search bar, and is a fixed height
public Rect mFreeformRect = new Rect();
- // The freeform stack bounds, inset from the top by the search bar and freeform workspace, and
- // runs to the bottom of the screen
- private Rect mFreeformStackRect = new Rect();
// The stack bounds, inset from the top by the search bar, and runs to
// the bottom of the screen
- private Rect mStackRect = new Rect();
- // The current stack rect, can either by mFreeformStackRect or mStackRect depending on whether
- // there is a freeform workspace
- public Rect mCurrentStackRect = new Rect();
+ public Rect mStackRect = new Rect();
// This is the current system insets
public Rect mSystemInsets = new Rect();
// This is the bounds of the history button above the stack rect
@@ -218,7 +281,6 @@
FreeformWorkspaceLayoutAlgorithm mFreeformLayoutAlgorithm;
public TaskStackLayoutAlgorithm(Context context, TaskStackView stackView) {
- SystemServicesProxy ssp = Recents.getSystemServices();
Resources res = context.getResources();
mStackView = stackView;
@@ -233,8 +295,8 @@
mMaxTranslationZ = res.getDimensionPixelSize(R.dimen.recents_task_view_z_max);
mContext = context;
mFreeformLayoutAlgorithm = new FreeformWorkspaceLayoutAlgorithm();
- mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
- com.android.internal.R.interpolator.fast_out_slow_in);
+ mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
+ com.android.internal.R.interpolator.linear_out_slow_in);
}
/**
@@ -249,9 +311,6 @@
*/
public void setSystemInsets(Rect systemInsets) {
mSystemInsets.set(systemInsets);
- if (DEBUG) {
- Log.d(TAG, "setSystemInsets: " + systemInsets);
- }
}
/**
@@ -273,41 +332,29 @@
* Computes the stack and task rects. The given task stack bounds is the whole bounds not
* including the search bar.
*/
- public void initialize(Rect taskStackBounds) {
- SystemServicesProxy ssp = Recents.getSystemServices();
+ public void initialize(Rect taskStackBounds, StackState state) {
RecentsDebugFlags debugFlags = Recents.getDebugFlags();
RecentsConfiguration config = Recents.getConfiguration();
int widthPadding = (int) (config.taskStackWidthPaddingPct * taskStackBounds.width());
int heightPadding = mContext.getResources().getDimensionPixelSize(
R.dimen.recents_stack_top_padding);
- Rect lastStackRect = new Rect(mCurrentStackRect);
+ Rect lastStackRect = new Rect(mStackRect);
// The freeform height is the visible height (not including system insets) - padding above
// freeform and below stack - gap between the freeform and stack
+ mState = state;
mStackTopOffset = mFocusedPeekHeight + heightPadding;
mStackBottomOffset = mSystemInsets.bottom + heightPadding;
- int ffHeight = (taskStackBounds.height() - 2 * heightPadding - mStackBottomOffset) / 2;
- mFreeformRect.set(taskStackBounds.left + widthPadding,
- taskStackBounds.top + heightPadding,
- taskStackBounds.right - widthPadding,
- taskStackBounds.top + heightPadding + ffHeight);
- mFreeformStackRect.set(taskStackBounds.left + widthPadding,
- taskStackBounds.top + heightPadding + ffHeight + heightPadding,
- taskStackBounds.right - widthPadding,
- taskStackBounds.bottom);
- mStackRect.set(taskStackBounds.left + widthPadding,
- taskStackBounds.top + heightPadding,
- taskStackBounds.right - widthPadding,
- taskStackBounds.bottom);
- mCurrentStackRect = ssp.hasFreeformWorkspaceSupport() ? mFreeformStackRect : mStackRect;
- mHistoryButtonRect.set(mCurrentStackRect.left, mCurrentStackRect.top - heightPadding,
- mCurrentStackRect.right, mCurrentStackRect.top + mFocusedPeekHeight);
+ state.computeRects(mFreeformRect, mStackRect, taskStackBounds, widthPadding, heightPadding,
+ mStackBottomOffset);
+ mHistoryButtonRect.set(mStackRect.left, mStackRect.top - heightPadding,
+ mStackRect.right, mStackRect.top + mFocusedPeekHeight);
// Anchor the task rect to the top-center of the non-freeform stack rect
float aspect = (float) (taskStackBounds.width() - mSystemInsets.left - mSystemInsets.right)
/ (taskStackBounds.height() - mSystemInsets.bottom);
int width = mStackRect.width();
- int minHeight = mCurrentStackRect.height() - mFocusedPeekHeight - mStackBottomOffset;
+ int minHeight = mStackRect.height() - mFocusedPeekHeight - mStackBottomOffset;
int height = debugFlags.isFullscreenThumbnailsEnabled()
? (int) Math.min(width / aspect, minHeight)
: width;
@@ -315,7 +362,7 @@
mStackRect.left + width, mStackRect.top + height);
// Short circuit here if the stack rects haven't changed so we don't do all the work below
- if (lastStackRect.equals(mCurrentStackRect)) {
+ if (lastStackRect.equals(mStackRect)) {
return;
}
@@ -328,9 +375,7 @@
if (DEBUG) {
Log.d(TAG, "initialize");
Log.d(TAG, "\tmFreeformRect: " + mFreeformRect);
- Log.d(TAG, "\tmFreeformStackRect: " + mFreeformStackRect);
Log.d(TAG, "\tmStackRect: " + mStackRect);
- Log.d(TAG, "\tmCurrentStackRect: " + mCurrentStackRect);
Log.d(TAG, "\tmTaskRect: " + mTaskRect);
Log.d(TAG, "\tmSystemInsets: " + mSystemInsets);
}
@@ -386,7 +431,7 @@
mMinScrollP = mMaxScrollP = 0;
} else {
float bottomOffsetPct = (float) (mStackBottomOffset + mTaskRect.height()) /
- mCurrentStackRect.height();
+ mStackRect.height();
float normX = mUnfocusedCurveInterpolator.getX(bottomOffsetPct);
mMinScrollP = 0;
mMaxScrollP = Math.max(mMinScrollP,
@@ -408,7 +453,7 @@
mInitialScrollP = Math.max(mMinScrollP, mNumStackTasks - 2);
}
} else {
- float offsetPct = (float) (mTaskRect.height() / 2) / mCurrentStackRect.height();
+ float offsetPct = (float) (mTaskRect.height() / 2) / mStackRect.height();
float normX = mUnfocusedCurveInterpolator.getX(offsetPct);
mInitialScrollP = (mNumStackTasks - 1) - mUnfocusedRange.getAbsoluteX(normX);
}
@@ -428,7 +473,7 @@
public void updateFocusStateOnScroll(int yMovement) {
Utilities.cancelAnimationWithoutCallbacks(mFocusStateAnimator);
if (mFocusState > STATE_UNFOCUSED) {
- float delta = (float) yMovement / (UNFOCUS_MULTIPLIER * mCurrentStackRect.height());
+ float delta = (float) yMovement / (UNFOCUS_MULTIPLIER * mStackRect.height());
mFocusState -= Math.min(mFocusState, Math.abs(delta));
}
}
@@ -441,8 +486,9 @@
if (Float.compare(newState, getFocusState()) != 0) {
mFocusStateAnimator = ObjectAnimator.ofFloat(this, FOCUS_STATE, getFocusState(),
newState);
- mFocusStateAnimator.setDuration(200);
- mFocusStateAnimator.setInterpolator(mFastOutSlowInInterpolator);
+ mFocusStateAnimator.setDuration(mContext.getResources().getInteger(
+ R.integer.recents_animate_task_stack_scroll_duration));
+ mFocusStateAnimator.setInterpolator(mLinearOutSlowInInterpolator);
mFocusStateAnimator.start();
}
}
@@ -453,13 +499,31 @@
public float getDefaultFocusState() {
RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
RecentsDebugFlags debugFlags = Recents.getDebugFlags();
- if (debugFlags.isPageOnToggleEnabled() || launchState.launchedWithAltTab) {
+ if (launchState.launchedWithAltTab ||
+ (debugFlags.isPageOnToggleEnabled() && debugFlags.isInitialStatePaging())) {
return 1f;
}
return 0f;
}
/**
+ * Returns the task progress that would put the task just off the front of the stack.
+ */
+ public float getStackFrontTaskProgress(float stackScroll) {
+ float max = mUnfocusedRange.relativeMax +
+ mFocusState * (mFocusedRange.relativeMax - mUnfocusedRange.relativeMax);
+ return stackScroll + max;
+ }
+
+ /**
+ *
+ * Returns the current stack state.
+ */
+ public StackState getStackState() {
+ return mState;
+ }
+
+ /**
* Computes the maximum number of visible tasks and thumbnails when the scroll is at the initial
* stack scroll. Requires that update() is called first.
*/
@@ -543,8 +607,15 @@
transformOut.reset();
return transformOut;
}
- return getStackTransform(mTaskIndexMap.get(task.key), stackScroll, transformOut,
+ getStackTransform(mTaskIndexMap.get(task.key), stackScroll, transformOut,
frontTransform);
+ if (task.thumbnail != null) {
+ transformOut.thumbnailScale = (float) mTaskRect.width() / task.thumbnail.getWidth();
+ }
+ if (DEBUG) {
+ Log.d(TAG, "getTransform: " + task.key + ", " + transformOut);
+ }
+ return transformOut;
}
}
@@ -558,7 +629,7 @@
float p = mUnfocusedRange.getNormalizedX(taskProgress);
float yp = mUnfocusedCurveInterpolator.getInterpolation(p);
float unfocusedP = p;
- int unFocusedY = (int) (Math.max(0f, (1f - yp)) * mCurrentStackRect.height());
+ int unFocusedY = (int) (Math.max(0f, (1f - yp)) * mStackRect.height());
boolean unfocusedVisible = mUnfocusedRange.isInRange(taskProgress);
int focusedY = 0;
boolean focusedVisible = true;
@@ -566,7 +637,7 @@
mFocusedRange.offset(stackScroll);
p = mFocusedRange.getNormalizedX(taskProgress);
yp = mFocusedCurveInterpolator.getInterpolation(p);
- focusedY = (int) (Math.max(0f, (1f - yp)) * mCurrentStackRect.height());
+ focusedY = (int) (Math.max(0f, (1f - yp)) * mStackRect.height());
focusedVisible = mFocusedRange.isInRange(taskProgress);
}
@@ -583,8 +654,8 @@
// When there is exactly one task, then decouple the task from the stack and just move
// in screen space
p = (mMinScrollP - stackScroll) / mNumStackTasks;
- int centerYOffset = (mCurrentStackRect.top - mTaskRect.top) +
- (mCurrentStackRect.height() - mTaskRect.height()) / 2;
+ int centerYOffset = (mStackRect.top - mTaskRect.top) +
+ (mStackRect.height() - mTaskRect.height()) / 2;
y = centerYOffset + getYForDeltaP(p, 0);
z = mMaxTranslationZ;
relP = 1f;
@@ -592,7 +663,7 @@
} else {
// Otherwise, update the task to the stack layout
y = unFocusedY + (int) (mFocusState * (focusedY - unFocusedY));
- y += (mCurrentStackRect.top - mTaskRect.top);
+ y += (mStackRect.top - mTaskRect.top);
z = Math.max(mMinTranslationZ, Math.min(mMaxTranslationZ,
mMinTranslationZ + (p * (mMaxTranslationZ - mMinTranslationZ))));
relP = unfocusedP;
@@ -600,13 +671,17 @@
// Fill out the transform
transformOut.scale = 1f;
- transformOut.translationX = (mCurrentStackRect.width() - mTaskRect.width()) / 2;
+ transformOut.translationX = (mStackRect.width() - mTaskRect.width()) / 2;
transformOut.translationY = y;
transformOut.translationZ = z;
transformOut.rect.set(mTaskRect);
transformOut.rect.offset(transformOut.translationX, transformOut.translationY);
Utilities.scaleRectAboutCenter(transformOut.rect, transformOut.scale);
- transformOut.visible = true;
+ transformOut.visible = (transformOut.rect.top < mStackRect.bottom) &&
+ (frontTransform == null || transformOut.rect.top != frontTransform.rect.top);
+ transformOut.clipBottom = 0;
+ transformOut.clipRight = 0;
+ transformOut.thumbnailScale = 1f;
transformOut.p = relP;
return transformOut;
}
@@ -633,7 +708,7 @@
* screen along the arc-length proportionally (1/arclength).
*/
public float getDeltaPForY(int downY, int y) {
- float deltaP = (float) (y - downY) / mCurrentStackRect.height() *
+ float deltaP = (float) (y - downY) / mStackRect.height() *
mUnfocusedCurveInterpolator.getArcLength();
return -deltaP;
}
@@ -643,7 +718,7 @@
* of the curve, map back to the screen y.
*/
public int getYForDeltaP(float downScrollP, float p) {
- int y = (int) ((p - downScrollP) * mCurrentStackRect.height() *
+ int y = (int) ((p - downScrollP) * mStackRect.height() *
(1f / mUnfocusedCurveInterpolator.getArcLength()));
return -y;
}
@@ -658,12 +733,12 @@
// Initialize the focused curve. This curve is a piecewise curve composed of several
// quadradic beziers that goes from (0,1) through (0.5, peek height offset),
// (0.667, next task offset), (0.833, bottom task offset), and (1,0).
- float peekHeightPct = (float) mFocusedPeekHeight / mCurrentStackRect.height();
+ float peekHeightPct = (float) mFocusedPeekHeight / mStackRect.height();
Path p = new Path();
p.moveTo(0f, 1f);
p.lineTo(0.5f, 1f - peekHeightPct);
- p.lineTo(0.66666667f, (float) (taskBarHeight * 3) / mCurrentStackRect.height());
- p.lineTo(0.83333333f, (float) (taskBarHeight / 2) / mCurrentStackRect.height());
+ p.lineTo(0.66666667f, (float) (taskBarHeight * 3) / mStackRect.height());
+ p.lineTo(0.83333333f, (float) (taskBarHeight / 2) / mStackRect.height());
p.lineTo(1f, 0f);
return p;
}
@@ -680,7 +755,7 @@
// there is a tangent at (0.5, peek height offset).
float cpoint1X = 0.4f;
float cpoint1Y = 1f;
- float peekHeightPct = (float) mFocusedPeekHeight / mCurrentStackRect.height();
+ float peekHeightPct = (float) mFocusedPeekHeight / mStackRect.height();
float slope = ((1f - peekHeightPct) - cpoint1Y) / (0.5f - cpoint1X);
float b = 1f - slope * cpoint1X;
float cpoint2X = 0.75f;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index 0395e99..cc5aaae 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -16,9 +16,6 @@
package com.android.systemui.recents.views;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.ComponentName;
@@ -27,8 +24,11 @@
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.util.IntProperty;
import android.util.Log;
+import android.util.Property;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@@ -94,6 +94,19 @@
private static final float SHOW_HISTORY_BUTTON_SCROLL_THRESHOLD = 0.3f;
private static final float HIDE_HISTORY_BUTTON_SCROLL_THRESHOLD = 0.3f;
+ public static final Property<ColorDrawable, Integer> COLOR_DRAWABLE_ALPHA =
+ new IntProperty<ColorDrawable>("colorDrawableAlpha") {
+ @Override
+ public void setValue(ColorDrawable object, int alpha) {
+ object.setAlpha(alpha);
+ }
+
+ @Override
+ public Integer get(ColorDrawable object) {
+ return object.getAlpha();
+ }
+ };
+
/** The TaskView callbacks */
interface TaskStackViewCallbacks {
public void onTaskViewClicked(TaskStackView stackView, TaskView tv, TaskStack stack, Task t,
@@ -106,10 +119,11 @@
TaskStackViewTouchHandler mTouchHandler;
TaskStackViewCallbacks mCb;
ColorDrawable mFreeformWorkspaceBackground;
+ ObjectAnimator mFreeformWorkspaceBackgroundAnimator;
ViewPool<TaskView, Task> mViewPool;
ArrayList<TaskViewTransform> mCurrentTaskTransforms = new ArrayList<>();
DozeTrigger mUIDozeTrigger;
- int mFocusedTaskIndex = -1;
+ Task mFocusedTask;
// Optimizations
int mStackViewsAnimationDuration;
boolean mStackViewsDirty = true;
@@ -123,7 +137,6 @@
int[] mTmpVisibleRange = new int[2];
Rect mTmpRect = new Rect();
RectF mTmpTaskRect = new RectF();
- TaskViewTransform mTmpTransform = new TaskViewTransform();
TaskViewTransform mTmpStackBackTransform = new TaskViewTransform();
TaskViewTransform mTmpStackFrontTransform = new TaskViewTransform();
HashMap<Task, TaskView> mTmpTaskViewMap = new HashMap<>();
@@ -131,7 +144,6 @@
List<TaskView> mImmutableTaskViews = new ArrayList<>();
List<TaskView> mTmpTaskViews = new ArrayList<>();
LayoutInflater mInflater;
- boolean mLayersDisabled;
boolean mTouchExplorationEnabled;
Interpolator mFastOutSlowInInterpolator;
@@ -139,11 +151,11 @@
// A convenience update listener to request updating clipping of tasks
private ValueAnimator.AnimatorUpdateListener mRequestUpdateClippingListener =
new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- requestUpdateStackViewsClip();
- }
- };
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ requestUpdateStackViewsClip();
+ }
+ };
// The drop targets for a task drag
private DropTarget mFreeformWorkspaceDropTarget = new DropTarget() {
@@ -156,7 +168,7 @@
private DropTarget mStackDropTarget = new DropTarget() {
@Override
public boolean acceptsDrop(int x, int y, int width, int height) {
- return mLayoutAlgorithm.mCurrentStackRect.contains(x, y);
+ return mLayoutAlgorithm.mStackRect.contains(x, y);
}
};
@@ -190,6 +202,7 @@
setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
mFreeformWorkspaceBackground = new ColorDrawable(0x33000000);
+ mFreeformWorkspaceBackground.setCallback(this);
}
/** Sets the callbacks */
@@ -284,7 +297,7 @@
/** Resets this TaskStackView for reuse. */
void reset() {
// Reset the focused task
- resetFocusedTask();
+ resetFocusedTask(getFocusedTask());
// Return all the views to the pool
List<TaskView> taskViews = getTaskViews();
@@ -401,7 +414,7 @@
if (boundTranslationsToRect) {
transform.translationY = Math.min(transform.translationY,
- mLayoutAlgorithm.mCurrentStackRect.bottom);
+ mLayoutAlgorithm.mStackRect.bottom);
}
frontTransform = transform;
}
@@ -430,7 +443,6 @@
// Return all the invisible children to the pool
mTmpTaskViewMap.clear();
List<TaskView> taskViews = getTaskViews();
- boolean wasLastFocusedTaskAnimated = false;
int lastFocusedTaskIndex = -1;
int taskViewCount = taskViews.size();
for (int i = taskViewCount - 1; i >= 0; i--) {
@@ -441,10 +453,9 @@
visibleStackRange[1] <= taskIndex && taskIndex <= visibleStackRange[0]) {
mTmpTaskViewMap.put(task, tv);
} else {
- if (mTouchExplorationEnabled && tv.isFocusedTask()) {
- wasLastFocusedTaskAnimated = tv.isFocusAnimated();
+ if (mTouchExplorationEnabled) {
lastFocusedTaskIndex = taskIndex;
- resetFocusedTask();
+ resetFocusedTask(task);
}
if (DEBUG) {
Log.d(TAG, "returning to pool: " + task.key);
@@ -468,45 +479,34 @@
Log.d(TAG, "picking up from pool: " + task.key);
}
tv = mViewPool.pickUpViewFromPool(task, task);
- if (mLayersDisabled) {
- tv.disableLayersForOneFrame();
+ } else {
+ // Reattach it in the right z order
+ int taskIndex = mStack.indexOfStackTask(task);
+ int insertIndex = findTaskViewInsertIndex(task, taskIndex);
+ if (insertIndex != getTaskViews().indexOf(tv)){
+ detachViewFromParent(tv);
+ attachViewToParent(tv, insertIndex, tv.getLayoutParams());
}
}
// Animate the task into place
- tv.updateViewPropertiesToTaskTransform(transform,
- mStackViewsAnimationDuration, mRequestUpdateClippingListener);
-
- // Reattach it in the right z order
- detachViewFromParent(tv);
- int insertIndex = -1;
- int taskIndex = mStack.indexOfStackTask(task);
- taskViews = getTaskViews();
- taskViewCount = taskViews.size();
- for (int j = 0; j < taskViewCount; j++) {
- Task tvTask = taskViews.get(j).getTask();
- if (taskIndex < mStack.indexOfStackTask(tvTask)) {
- insertIndex = j;
- break;
- }
- }
- attachViewToParent(tv, insertIndex, tv.getLayoutParams());
+ tv.updateViewPropertiesToTaskTransform(transform, transform.clipBottom,
+ mStackViewsAnimationDuration, mFastOutSlowInInterpolator,
+ mRequestUpdateClippingListener);
// Update the task views list after adding the new task view
updateTaskViewsList();
}
// Pick up all the newly visible children and update all the existing children
- for (int i = visibleStackRange[0]; isValidVisibleStackRange && i >= visibleStackRange[1]; i--) {
+ for (int i = visibleStackRange[0];
+ isValidVisibleStackRange && i >= visibleStackRange[1]; i--) {
Task task = tasks.get(i);
TaskViewTransform transform = mCurrentTaskTransforms.get(i);
TaskView tv = mTmpTaskViewMap.get(task);
if (tv == null) {
tv = mViewPool.pickUpViewFromPool(task, task);
- if (mLayersDisabled) {
- tv.disableLayersForOneFrame();
- }
if (mStackViewsAnimationDuration > 0) {
// For items in the list, put them in start animating them from the
// approriate ends of the list where they are expected to appear
@@ -516,29 +516,36 @@
mLayoutAlgorithm.getStackTransform(0f, 0f, mTmpStackBackTransform,
null);
}
- tv.updateViewPropertiesToTaskTransform(mTmpStackBackTransform, 0);
+ tv.updateViewPropertiesToTaskTransform(mTmpStackBackTransform, 0, 0,
+ mFastOutSlowInInterpolator, mRequestUpdateClippingListener);
} else {
if (!hasStackFrontTransform) {
hasStackFrontTransform = true;
- mLayoutAlgorithm.getStackTransform(1f, 0f, mTmpStackFrontTransform,
- null);
+ mLayoutAlgorithm.getStackTransform(
+ mLayoutAlgorithm.getStackFrontTaskProgress(0f), 0f,
+ mTmpStackFrontTransform, null);
}
- tv.updateViewPropertiesToTaskTransform(mTmpStackFrontTransform, 0);
+ tv.updateViewPropertiesToTaskTransform(mTmpStackFrontTransform, 0, 0,
+ mFastOutSlowInInterpolator, mRequestUpdateClippingListener);
}
}
}
- // Animate the task into place
+ // Animate the task into place, the clip for stack tasks will be calculated in
+ // clipTaskViews()
tv.updateViewPropertiesToTaskTransform(transform,
- mStackViewsAnimationDuration, mRequestUpdateClippingListener);
+ tv.getViewBounds().getClipBottom(), mStackViewsAnimationDuration,
+ mFastOutSlowInInterpolator, mRequestUpdateClippingListener);
}
// Update the focus if the previous focused task was returned to the view pool
if (lastFocusedTaskIndex != -1) {
if (lastFocusedTaskIndex < visibleStackRange[1]) {
- setFocusedTask(visibleStackRange[1], false, wasLastFocusedTaskAnimated);
+ setFocusedTask(visibleStackRange[1], false /* animated */,
+ true /* requestViewFocus */);
} else {
- setFocusedTask(visibleStackRange[0], false, wasLastFocusedTaskAnimated);
+ setFocusedTask(visibleStackRange[0], false /* animated */,
+ true /* requestViewFocus */);
}
}
@@ -610,7 +617,6 @@
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.hasFreeformWorkspaceSupport()) {
mTmpRect.set(mLayoutAlgorithm.mFreeformRect);
- mFreeformWorkspaceBackground.setAlpha(255);
mFreeformWorkspaceBackground.setBounds(mTmpRect);
}
@@ -640,7 +646,7 @@
* @return whether or not the stack will scroll as a part of this focus change
*/
private boolean setFocusedTask(int taskIndex, boolean scrollToTask, final boolean animated,
- final boolean requestViewFocus) {
+ final boolean requestViewFocus) {
// Find the next task to focus
int newFocusedTaskIndex = mStack.getStackTaskCount() > 0 ?
Math.max(0, Math.min(mStack.getStackTaskCount() - 1, taskIndex)) : -1;
@@ -648,16 +654,13 @@
mStack.getStackTasks().get(newFocusedTaskIndex) : null;
// Reset the last focused task state if changed
- if (mFocusedTaskIndex != -1) {
- Task focusedTask = mStack.getStackTasks().get(mFocusedTaskIndex);
- if (focusedTask != newFocusedTask) {
- resetFocusedTask();
- }
+ if (mFocusedTask != null) {
+ resetFocusedTask(mFocusedTask);
}
boolean willScroll = false;
- mFocusedTaskIndex = newFocusedTaskIndex;
- if (mFocusedTaskIndex != -1) {
+ mFocusedTask = newFocusedTask;
+ if (newFocusedTask != null) {
Runnable focusTaskRunnable = new Runnable() {
@Override
public void run() {
@@ -727,13 +730,11 @@
*/
public void setRelativeFocusedTask(boolean forward, boolean stackTasksOnly, boolean animated,
boolean cancelWindowAnimations) {
- int newIndex = -1;
- if (mFocusedTaskIndex != -1) {
+ int newIndex = mStack.indexOfStackTask(mFocusedTask);
+ if (mFocusedTask != null) {
if (stackTasksOnly) {
List<Task> tasks = mStack.getStackTasks();
- newIndex = mFocusedTaskIndex;
- Task task = tasks.get(mFocusedTaskIndex);
- if (task.isFreeformTask()) {
+ if (mFocusedTask.isFreeformTask()) {
// Try and focus the front most stack task
TaskView tv = getFrontMostTaskView(stackTasksOnly);
if (tv != null) {
@@ -741,7 +742,7 @@
}
} else {
// Try the next task if it is a stack task
- int tmpNewIndex = mFocusedTaskIndex + (forward ? -1 : 1);
+ int tmpNewIndex = newIndex + (forward ? -1 : 1);
if (0 <= tmpNewIndex && tmpNewIndex < tasks.size()) {
Task t = tasks.get(tmpNewIndex);
if (!t.isFreeformTask()) {
@@ -753,7 +754,7 @@
// No restrictions, lets just move to the new task (looping forward/backwards if
// necessary)
int taskCount = mStack.getStackTaskCount();
- newIndex = (mFocusedTaskIndex + (forward ? -1 : 1) + taskCount) % taskCount;
+ newIndex = (newIndex + (forward ? -1 : 1) + taskCount) % taskCount;
}
} else {
// We don't have a focused task, so focus the first visible task view
@@ -775,25 +776,21 @@
/**
* Resets the focused task.
*/
- void resetFocusedTask() {
- if (mFocusedTaskIndex != -1) {
- Task t = mStack.getStackTasks().get(mFocusedTaskIndex);
- TaskView tv = getChildViewForTask(t);
+ void resetFocusedTask(Task task) {
+ if (task != null) {
+ TaskView tv = getChildViewForTask(task);
if (tv != null) {
tv.setFocusedState(false, false /* animated */, false /* requestViewFocus */);
}
}
- mFocusedTaskIndex = -1;
+ mFocusedTask = null;
}
/**
* Returns the focused task.
*/
Task getFocusedTask() {
- if (mFocusedTaskIndex != -1) {
- return mStack.getStackTasks().get(mFocusedTaskIndex);
- }
- return null;
+ return mFocusedTask;
}
@Override
@@ -818,12 +815,13 @@
super.onInitializeAccessibilityNodeInfo(info);
List<TaskView> taskViews = getTaskViews();
int taskViewCount = taskViews.size();
- if (taskViewCount > 1 && mFocusedTaskIndex != -1) {
+ if (taskViewCount > 1 && mFocusedTask != null) {
info.setScrollable(true);
- if (mFocusedTaskIndex > 0) {
+ int focusedTaskIndex = mStack.indexOfStackTask(mFocusedTask);
+ if (focusedTaskIndex > 0) {
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
}
- if (mFocusedTaskIndex < mStack.getStackTaskCount() - 1) {
+ if (focusedTaskIndex < mStack.getStackTaskCount() - 1) {
info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
}
}
@@ -880,7 +878,8 @@
/** Computes the stack and task rects */
public void computeRects(Rect taskStackBounds) {
// Compute the rects in the stack algorithm
- mLayoutAlgorithm.initialize(taskStackBounds);
+ mLayoutAlgorithm.initialize(taskStackBounds,
+ TaskStackLayoutAlgorithm.StackState.getStackStateForStack(mStack));
// Update the scroll bounds
updateLayout(false);
@@ -987,13 +986,14 @@
}
requestSynchronizeStackViewsWithModel();
synchronizeStackViewsWithModel();
+ requestUpdateStackViewsClip();
clipTaskViews(true /* forceUpdate */);
}
}
/** Handler for the first layout. */
void onFirstLayout() {
- int offscreenY = mLayoutAlgorithm.mCurrentStackRect.bottom;
+ int offscreenY = mLayoutAlgorithm.mStackRect.bottom;
// Find the launch target task
Task launchTargetTask = mStack.getLaunchTarget();
@@ -1024,6 +1024,11 @@
mStartEnterAnimationContext = null;
}
+ // Animate in the freeform workspace
+ animateFreeformWorkspaceBackgroundAlpha(
+ mLayoutAlgorithm.getStackState().freeformBackgroundAlpha, 150,
+ mFastOutSlowInInterpolator);
+
// Set the task focused state without requesting view focus, and leave the focus animations
// until after the enter-animation
RecentsConfiguration config = Recents.getConfiguration();
@@ -1085,11 +1090,11 @@
// requesting view focus in onFirstLayout(), actually request view focus and
// animate the focused state if we are alt-tabbing now, after the window enter
// animation is completed
- if (mFocusedTaskIndex != -1) {
+ if (mFocusedTask != null) {
RecentsConfiguration config = Recents.getConfiguration();
RecentsActivityLaunchState launchState = config.getLaunchState();
- setFocusedTask(mFocusedTaskIndex, false /* scrollToTask */,
- launchState.launchedWithAltTab);
+ setFocusedTask(mStack.indexOfStackTask(mFocusedTask),
+ false /* scrollToTask */, launchState.launchedWithAltTab);
}
}
});
@@ -1102,7 +1107,12 @@
mStackScroller.stopScroller();
mStackScroller.stopBoundScrollAnimation();
// Animate all the task views out of view
- ctx.offscreenTranslationY = mLayoutAlgorithm.mCurrentStackRect.bottom;
+ ctx.offscreenTranslationY = mLayoutAlgorithm.mStackRect.bottom;
+ // Dismiss the freeform workspace background
+ int taskViewExitToHomeDuration = getResources().getInteger(
+ R.integer.recents_task_exit_to_home_duration);
+ animateFreeformWorkspaceBackgroundAlpha(0, taskViewExitToHomeDuration,
+ mFastOutSlowInInterpolator);
List<TaskView> taskViews = getTaskViews();
int taskViewCount = taskViews.size();
@@ -1130,14 +1140,19 @@
}
}
- public boolean isTransformedTouchPointInView(float x, float y, View child) {
- return isTransformedTouchPointInView(x, y, child, null);
+ public boolean isTransformedTouchPointInView(float x, float y, TaskView tv) {
+ final float[] point = new float[2];
+ point[0] = x;
+ point[1] = y;
+ transformPointToViewLocal(point, tv);
+ x = point[0];
+ y = point[1];
+ return (0 <= x) && (x < (tv.getMeasuredWidth() - tv.getViewBounds().getClipRight())) &&
+ (0 <= y) && (y < (tv.getMeasuredHeight() - tv.getViewBounds().getClipBottom()));
}
@Override
protected void dispatchDraw(Canvas canvas) {
- mLayersDisabled = false;
-
// Draw the freeform workspace background
SystemServicesProxy ssp = Recents.getSystemServices();
if (ssp.hasFreeformWorkspaceSupport()) {
@@ -1149,12 +1164,12 @@
super.dispatchDraw(canvas);
}
- public void disableLayersForOneFrame() {
- mLayersDisabled = true;
- List<TaskView> taskViews = getTaskViews();
- for (int i = 0; i < taskViews.size(); i++) {
- taskViews.get(i).disableLayersForOneFrame();
+ @Override
+ protected boolean verifyDrawable(Drawable who) {
+ if (who == mFreeformWorkspaceBackground) {
+ return true;
}
+ return super.verifyDrawable(who);
}
/**
@@ -1174,6 +1189,10 @@
@Override
public void onStackTaskRemoved(TaskStack stack, Task removedTask, boolean wasFrontMostTask,
Task newFrontMostTask) {
+ if (mFocusedTask == removedTask) {
+ resetFocusedTask(removedTask);
+ }
+
if (!removedTask.isFreeformTask()) {
// Remove the view associated with this task, we can't rely on updateTransforms
// to work here because the task is no longer in the list
@@ -1249,6 +1268,11 @@
}
}
+ @Override
+ public void onHistoryTaskRemoved(TaskStack stack, Task removedTask) {
+ // To be implemented
+ }
+
/**** ViewPoolConsumer Implementation ****/
@Override
@@ -1271,6 +1295,9 @@
// Reset the view properties
tv.resetViewProperties();
+ // Reset the focused view state
+ tv.setFocusedState(false, false /* animated */, false /* requestViewFocus */);
+
// Reset the clip state of the task view
tv.setClipViewInStack(false);
}
@@ -1291,19 +1318,8 @@
tv.setNoUserInteractionState();
// Find the index where this task should be placed in the stack
- int insertIndex = -1;
int taskIndex = mStack.indexOfStackTask(task);
- if (taskIndex != -1) {
- List<TaskView> taskViews = getTaskViews();
- int taskViewCount = taskViews.size();
- for (int i = 0; i < taskViewCount; i++) {
- Task tvTask = taskViews.get(i).getTask();
- if (taskIndex < mStack.indexOfStackTask(tvTask)) {
- insertIndex = i;
- break;
- }
- }
- }
+ int insertIndex = findTaskViewInsertIndex(task, taskIndex);
// Add/attach the view to the hierarchy
if (isNewView) {
@@ -1321,6 +1337,9 @@
tv.setCallbacks(this);
tv.setTouchEnabled(true);
tv.setClipViewInStack(true);
+ if (mFocusedTask == task) {
+ tv.setFocusedState(true, false /* animated */, false /* requestViewFocus */);
+ }
}
@Override
@@ -1342,9 +1361,7 @@
@Override
public void onTaskViewClipStateChanged(TaskView tv) {
- if (!mStackViewsDirty) {
- invalidate();
- }
+ requestUpdateStackViewsClip();
}
/**** TaskStackViewScroller.TaskStackViewScrollerCallbacks ****/
@@ -1406,10 +1423,12 @@
}
public final void onBusEvent(DismissFocusedTaskViewEvent event) {
- if (mFocusedTaskIndex != -1) {
- Task t = mStack.getStackTasks().get(mFocusedTaskIndex);
- TaskView tv = getChildViewForTask(t);
- tv.dismissTask();
+ if (mFocusedTask != null) {
+ TaskView tv = getChildViewForTask(mFocusedTask);
+ if (tv != null) {
+ tv.dismissTask();
+ }
+ resetFocusedTask(mFocusedTask);
}
}
@@ -1424,12 +1443,7 @@
}
}
- private AnimatorSet mDropAnimation;
-
public final void onBusEvent(DragStartEvent event) {
- // Cancel the existing drop animation
- Utilities.cancelAnimationWithoutCallbacks(mDropAnimation);
-
if (event.task.isFreeformTask()) {
// Animate to the front of the stack
mStackScroller.animateScroll(mStackScroller.getStackScroll(),
@@ -1459,47 +1473,20 @@
boolean hasChangedStacks =
(!isFreeformTask && event.dropTarget == mFreeformWorkspaceDropTarget) ||
(isFreeformTask && event.dropTarget == mStackDropTarget);
- if (hasChangedStacks) {
- ArrayList<Animator> animations = new ArrayList<>();
+ event.postAnimationTrigger.increment();
+ if (hasChangedStacks) {
// Move the task to the right position in the stack (ie. the front of the stack if
// freeform or the front of the stack if fullscreen). Note, we MUST move the tasks
// before we update their stack ids, otherwise, the keys will have changed.
if (event.dropTarget == mFreeformWorkspaceDropTarget) {
mStack.moveTaskToStack(event.task, FREEFORM_WORKSPACE_STACK_ID);
- updateLayout(true);
-
- // Update the clipping to match the scaled bitmap rect
- TaskViewThumbnail thumbnailView = event.taskView.mThumbnailView;
- float thumbnailScale = thumbnailView.computeThumbnailScale(true);
- RectF bitmapRect = thumbnailView.getScaledBitmapRect(thumbnailScale);
- AnimateableViewBounds viewBounds = event.taskView.getViewBounds();
- int clipRight = (int) (thumbnailView.getMeasuredWidth() - bitmapRect.width());
- int clipBottom = (int) (thumbnailView.getMeasuredHeight() - bitmapRect.height());
- animations.add(ObjectAnimator.ofFloat(thumbnailView, TaskViewThumbnail.BITMAP_SCALE,
- thumbnailView.getBitmapScale(), thumbnailScale));
- animations.add(ObjectAnimator.ofInt(viewBounds, AnimateableViewBounds.CLIP_BOTTOM,
- viewBounds.getClipBottom(), clipBottom));
- animations.add(ObjectAnimator.ofInt(viewBounds, AnimateableViewBounds.CLIP_RIGHT,
- viewBounds.getClipRight(), clipRight));
} else if (event.dropTarget == mStackDropTarget) {
mStack.moveTaskToStack(event.task, FULLSCREEN_WORKSPACE_STACK_ID);
- updateLayout(true);
-
- // Reset the clipping when animating to the stack
- TaskViewThumbnail thumbnailView = event.taskView.mThumbnailView;
- float thumbnailScale = thumbnailView.computeThumbnailScale(false);
- AnimateableViewBounds viewBounds = event.taskView.getViewBounds();
- animations.add(ObjectAnimator.ofFloat(thumbnailView, TaskViewThumbnail.BITMAP_SCALE,
- thumbnailView.getBitmapScale(), thumbnailScale));
- animations.add(ObjectAnimator.ofInt(viewBounds, AnimateableViewBounds.CLIP_BOTTOM,
- viewBounds.getClipBottom(), 0));
- animations.add(ObjectAnimator.ofInt(viewBounds, AnimateableViewBounds.CLIP_RIGHT,
- viewBounds.getClipRight(), 0));
}
+ updateLayout(true);
// Move the task to the new stack in the system after the animation completes
- event.postAnimationTrigger.increment();
event.postAnimationTrigger.addLastDecrementRunnable(new Runnable() {
@Override
public void run() {
@@ -1507,22 +1494,7 @@
ssp.moveTaskToStack(event.task.key.id, event.task.key.stackId);
}
});
-
- // Animate the normal properties of the view
- mDropAnimation = new AnimatorSet();
- mDropAnimation.playTogether(animations);
- mDropAnimation.setDuration(250);
- mDropAnimation.setInterpolator(mFastOutSlowInInterpolator);
- mDropAnimation.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- event.postAnimationTrigger.decrement();
- }
- });
- mDropAnimation.start();
}
-
- event.postAnimationTrigger.increment();
event.taskView.animate()
.withEndAction(event.postAnimationTrigger.decrementAsRunnable());
@@ -1591,11 +1563,6 @@
private void removeTaskViewFromStack(TaskView tv) {
Task task = tv.getTask();
- // Reset the previously focused task before it is removed from the stack
- if (tv.isFocusedTask()) {
- resetFocusedTask();
- }
-
// Announce for accessibility
tv.announceForAccessibility(getContext().getString(
R.string.accessibility_recents_item_dismissed, tv.getTask().activityLabel));
@@ -1603,4 +1570,50 @@
// Remove the task from the stack
mStack.removeTask(task);
}
+
+ /**
+ * Starts an alpha animation on the freeform workspace background.
+ */
+ private void animateFreeformWorkspaceBackgroundAlpha(int targetAlpha, int duration,
+ Interpolator interpolator) {
+ if (mFreeformWorkspaceBackground.getAlpha() == targetAlpha) {
+ return;
+ }
+
+ Utilities.cancelAnimationWithoutCallbacks(mFreeformWorkspaceBackgroundAnimator);
+ mFreeformWorkspaceBackgroundAnimator = ObjectAnimator.ofInt(mFreeformWorkspaceBackground,
+ COLOR_DRAWABLE_ALPHA, mFreeformWorkspaceBackground.getAlpha(), targetAlpha);
+ mFreeformWorkspaceBackgroundAnimator.setDuration(duration);
+ mFreeformWorkspaceBackgroundAnimator.setInterpolator(interpolator);
+ mFreeformWorkspaceBackgroundAnimator.start();
+ }
+
+ /**
+ * Returns the insert index for the task in the current set of task views. If the given task
+ * is already in the task view list, then this method returns the insert index assuming it
+ * is first removed at the previous index.
+ *
+ * @param task the task we are finding the index for
+ * @param taskIndex the index of the task in the stack
+ */
+ private int findTaskViewInsertIndex(Task task, int taskIndex) {
+ if (taskIndex != -1) {
+ List<TaskView> taskViews = getTaskViews();
+ boolean foundTaskView = false;
+ int taskViewCount = taskViews.size();
+ for (int i = 0; i < taskViewCount; i++) {
+ Task tvTask = taskViews.get(i).getTask();
+ if (tvTask == task) {
+ foundTaskView = true;
+ } else if (taskIndex < mStack.indexOfStackTask(tvTask)) {
+ if (foundTaskView) {
+ return i - 1;
+ } else {
+ return i;
+ }
+ }
+ }
+ }
+ return -1;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
index 90b73fe..56942a8 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewScroller.java
@@ -19,7 +19,6 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
import android.content.Context;
import android.util.Log;
import android.view.animation.AnimationUtils;
@@ -50,7 +49,7 @@
ObjectAnimator mScrollAnimator;
float mFinalAnimatedScroll;
- Interpolator mLinearOutSlowInInterpolator;
+ private Interpolator mLinearOutSlowInInterpolator;
public TaskStackViewScroller(Context context, TaskStackLayoutAlgorithm layoutAlgorithm) {
mContext = context;
@@ -189,7 +188,7 @@
// TODO: Remove
@Deprecated
int progressToScrollRange(float p) {
- return (int) (p * mLayoutAlgorithm.mCurrentStackRect.height());
+ return (int) (p * mLayoutAlgorithm.mStackRect.height());
}
/** Called from the view draw, computes the next scroll. */
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
index 907ed2f..1a6f129 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java
@@ -176,11 +176,11 @@
}
case MotionEvent.ACTION_POINTER_DOWN: {
final int index = ev.getActionIndex();
- mDownX = (int) ev.getX();
- mDownY = (int) ev.getY();
+ mActivePointerId = ev.getPointerId(index);
+ mDownX = (int) ev.getX(index);
+ mDownY = (int) ev.getY(index);
mLastY = mDownY;
mDownScrollP = mScroller.getStackScroll();
- mActivePointerId = ev.getPointerId(index);
mVelocityTracker.addMovement(ev);
break;
}
@@ -221,6 +221,10 @@
// Select a new active pointer id and reset the motion state
final int newPointerIndex = (pointerIndex == 0) ? 1 : 0;
mActivePointerId = ev.getPointerId(newPointerIndex);
+ mDownX = (int) ev.getX(pointerIndex);
+ mDownY = (int) ev.getY(pointerIndex);
+ mLastY = mDownY;
+ mDownScrollP = mScroller.getStackScroll();
}
mVelocityTracker.addMovement(ev);
break;
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 f2c89e6..813a1fc 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -18,6 +18,7 @@
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
@@ -28,6 +29,7 @@
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
@@ -76,10 +78,9 @@
Task mTask;
boolean mTaskDataLoaded;
- boolean mIsFocused;
- boolean mIsFocusAnimated;
boolean mClipViewInStack;
AnimateableViewBounds mViewBounds;
+ private AnimatorSet mClipAnimation;
View mContent;
TaskViewThumbnail mThumbnailView;
@@ -209,23 +210,45 @@
MeasureSpec.makeMeasureSpec(widthWithoutPadding, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(heightWithoutPadding, MeasureSpec.EXACTLY));
mThumbnailView.updateClipToTaskBar(mHeaderView);
+
setMeasuredDimension(width, height);
invalidateOutline();
}
/** Synchronizes this view's properties with the task's transform */
- void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration) {
- updateViewPropertiesToTaskTransform(toTransform, duration, null);
- }
-
- void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration,
- ValueAnimator.AnimatorUpdateListener updateCallback) {
+ void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int clipBottom,
+ int duration, Interpolator interpolator,
+ ValueAnimator.AnimatorUpdateListener updateCallback) {
RecentsConfiguration config = Recents.getConfiguration();
+ Utilities.cancelAnimationWithoutCallbacks(mClipAnimation);
// Apply the transform
- toTransform.applyToTaskView(this, duration, mFastOutSlowInInterpolator, false,
+ toTransform.applyToTaskView(this, duration, interpolator, false,
!config.fakeShadows, updateCallback);
+ // Update the clipping
+ if (duration > 0) {
+ mClipAnimation = new AnimatorSet();
+ mClipAnimation.playTogether(
+ ObjectAnimator.ofInt(mViewBounds, AnimateableViewBounds.CLIP_BOTTOM,
+ mViewBounds.getClipBottom(), clipBottom),
+ ObjectAnimator.ofInt(mViewBounds, AnimateableViewBounds.CLIP_RIGHT,
+ mViewBounds.getClipRight(), toTransform.clipRight),
+ ObjectAnimator.ofFloat(mThumbnailView, TaskViewThumbnail.BITMAP_SCALE,
+ mThumbnailView.getBitmapScale(), toTransform.thumbnailScale));
+ mClipAnimation.setStartDelay(toTransform.startDelay);
+ mClipAnimation.setDuration(duration);
+ mClipAnimation.setInterpolator(interpolator);
+ mClipAnimation.start();
+ } else {
+ mViewBounds.setClipBottom(clipBottom, false /* forceUpdate */);
+ mViewBounds.setClipRight(toTransform.clipRight, false /* forceUpdate */);
+ mThumbnailView.setBitmapScale(toTransform.thumbnailScale);
+ }
+ if (!config.useHardwareLayers) {
+ mThumbnailView.updateThumbnailVisibility(clipBottom - getPaddingBottom());
+ }
+
// Update the task progress
Utilities.cancelAnimationWithoutCallbacks(mTaskProgressAnimator);
if (duration <= 0) {
@@ -615,14 +638,12 @@
public void setFocusedState(boolean isFocused, boolean animated, boolean requestViewFocus) {
if (DEBUG) {
Log.d(TAG, "setFocusedState: " + mTask.activityLabel + " focused: " + isFocused +
- " mIsFocused: " + mIsFocused + " animated: " + animated +
- " requestViewFocus: " + requestViewFocus + " isFocused(): " + isFocused() +
+ " animated: " + animated + " requestViewFocus: " + requestViewFocus +
+ " isFocused(): " + isFocused() +
" isAccessibilityFocused(): " + isAccessibilityFocused());
}
SystemServicesProxy ssp = Recents.getSystemServices();
- mIsFocused = isFocused;
- mIsFocusAnimated = animated;
mHeaderView.onTaskViewFocusChanged(isFocused, animated);
if (isFocused) {
if (requestViewFocus && !isFocused()) {
@@ -638,24 +659,6 @@
}
}
- /**
- * Returns whether we have explicitly been focused.
- */
- public boolean isFocusedTask() {
- return mIsFocused;
- }
-
- /**
- * Returns whether this focused task is animated.
- */
- public boolean isFocusAnimated() {
- return mIsFocusAnimated;
- }
-
- public void disableLayersForOneFrame() {
- mHeaderView.disableLayersForOneFrame();
- }
-
/**** TaskCallbacks Implementation ****/
/** Binds this task view to the task */
@@ -673,11 +676,11 @@
@Override
public void onTaskDataLoaded() {
- SystemServicesProxy ssp = Recents.getSystemServices();
if (mThumbnailView != null && mHeaderView != null) {
// Bind each of the views to the new task data
mThumbnailView.rebindToTask(mTask);
mHeaderView.rebindToTask(mTask);
+
// Rebind any listeners
mActionButtonView.setOnClickListener(this);
setOnLongClickListener(this);
@@ -721,7 +724,11 @@
@Override
public boolean onLongClick(View v) {
SystemServicesProxy ssp = Recents.getSystemServices();
- if (v == this && !ssp.hasDockedTask()) {
+ // Since we are clipping the view to the bounds, manually do the hit test
+ Rect clipBounds = new Rect(mViewBounds.mClipBounds);
+ clipBounds.scale(getScaleX());
+ boolean inBounds = clipBounds.contains(mDownTouchPos.x, mDownTouchPos.y);
+ if (v == this && inBounds && !ssp.hasDockedTask()) {
// Start listening for drag events
setClipViewInStack(false);
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
index 85b4b9b..78a2c7f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java
@@ -55,6 +55,8 @@
public class TaskViewHeader extends FrameLayout
implements View.OnClickListener, View.OnLongClickListener {
+ private static final float FOCUS_TRANSLATION_Z = 4f;
+
Task mTask;
// Header views
@@ -78,13 +80,10 @@
// Header dim, which is only used when task view hardware layers are not used
Paint mDimLayerPaint = new Paint();
- PorterDuffColorFilter mDimColorFilter = new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_ATOP);
Interpolator mFastOutSlowInInterpolator;
Interpolator mFastOutLinearInInterpolator;
- boolean mLayersDisabled;
-
public TaskViewHeader(Context context) {
this(context, null);
}
@@ -109,6 +108,7 @@
});
// Load the dismiss resources
+ mDimLayerPaint.setColor(Color.argb(0, 0, 0, 0));
mLightDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_light);
mDarkDismissDrawable = context.getDrawable(R.drawable.recents_dismiss_dark);
mDismissContentDescription =
@@ -171,21 +171,13 @@
canvas.restoreToCount(count);
}
- @Override
- public boolean hasOverlappingRendering() {
- return false;
- }
-
/**
* Sets the dim alpha, only used when we are not using hardware layers.
* (see RecentsConfiguration.useHardwareLayers)
*/
void setDimAlpha(int alpha) {
- mDimColorFilter.setColor(Color.argb(alpha, 0, 0, 0));
- mDimLayerPaint.setColorFilter(mDimColorFilter);
- if (!mLayersDisabled) {
- setLayerType(LAYER_TYPE_HARDWARE, mDimLayerPaint);
- }
+ mDimLayerPaint.setColor(Color.argb(alpha, 0, 0, 0));
+ invalidate();
}
/** Returns the secondary color for a primary color. */
@@ -339,23 +331,11 @@
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
- if (mLayersDisabled) {
- mLayersDisabled = false;
- postOnAnimation(new Runnable() {
- @Override
- public void run() {
- mLayersDisabled = false;
- setLayerType(LAYER_TYPE_HARDWARE, mDimLayerPaint);
- }
- });
- }
- }
- public void disableLayersForOneFrame() {
- mLayersDisabled = true;
-
- // Disable layer for a frame so we can draw our first frame faster.
- setLayerType(LAYER_TYPE_NONE, null);
+ // Draw the thumbnail with the rounded corners
+ canvas.drawRoundRect(0, 0, getWidth(), getHeight(),
+ mCornerRadius,
+ mCornerRadius, mDimLayerPaint);
}
/** Notifies the associated TaskView has been focused. */
@@ -367,13 +347,14 @@
Utilities.cancelAnimationWithoutCallbacks(mFocusAnimator);
if (focused) {
- // If we are not animating the visible state, just return
- if (!animateFocusedState) return;
-
- // Bump up the translation
- mFocusAnimator = ObjectAnimator.ofFloat(this, "translationZ", 8f);
- mFocusAnimator.setDuration(200);
- mFocusAnimator.start();
+ if (animateFocusedState) {
+ // Bump up the translation
+ mFocusAnimator = ObjectAnimator.ofFloat(this, "translationZ", FOCUS_TRANSLATION_Z);
+ mFocusAnimator.setDuration(200);
+ mFocusAnimator.start();
+ } else {
+ setTranslationZ(FOCUS_TRANSLATION_Z);
+ }
} else {
if (isRunning) {
// Restore the translation
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 c288afb..7bb2c7b 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java
@@ -25,7 +25,6 @@
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
-import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.util.FloatProperty;
@@ -56,15 +55,11 @@
}
};
- private Task mTask;
-
// Drawing
int mCornerRadius;
float mDimAlpha;
Matrix mScaleMatrix = new Matrix();
Paint mDrawPaint = new Paint();
- RectF mBitmapRect = new RectF();
- RectF mLayoutRect = new RectF();
float mBitmapScale = 1f;
BitmapShader mBitmapShader;
LightingColorFilter mLightingColorFilter = new LightingColorFilter(0xffffffff, 0);
@@ -104,15 +99,6 @@
}
@Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- super.onLayout(changed, left, top, right, bottom);
- if (changed) {
- mLayoutRect.set(0, 0, getWidth(), getHeight());
- setBitmapScale(computeThumbnailScale(mTask != null ? mTask.isFreeformTask() : false));
- }
- }
-
- @Override
protected void onDraw(Canvas canvas) {
if (mInvisible) {
return;
@@ -129,16 +115,10 @@
mBitmapShader = new BitmapShader(bm, Shader.TileMode.CLAMP,
Shader.TileMode.CLAMP);
mDrawPaint.setShader(mBitmapShader);
- mBitmapRect.set(0, 0, bm.getWidth(), bm.getHeight());
} else {
mBitmapShader = null;
mDrawPaint.setShader(null);
}
- if (mTask != null) {
- setBitmapScale(computeThumbnailScale(mTask != null ? mTask.isFreeformTask() : false));
- } else {
- setBitmapScale(1f);
- }
}
/** Updates the paint to draw the thumbnail. */
@@ -160,32 +140,6 @@
}
/**
- * Returns the scale to apply to a thumbnail bitmap relative to this view rect.
- */
- public float computeThumbnailScale(boolean isFreeformTask) {
- if (isFreeformTask) {
- // For freeform tasks, we scale the bitmap rect to fit in the layout rect
- return Math.min(mLayoutRect.width() / mBitmapRect.width(),
- mLayoutRect.height() / mBitmapRect.height());
- } else {
- // For stack tasks, we scale the bitmap to fit the width
- return Math.max(1f, mLayoutRect.width() / mBitmapRect.width());
- }
- }
-
- /**
- * Returns the scaled bitmap rect.
- */
- public RectF getScaledBitmapRect(float scale) {
- RectF scaledBitmapRect = new RectF(mBitmapRect);
- scaledBitmapRect.left *= scale;
- scaledBitmapRect.top *= scale;
- scaledBitmapRect.right *= scale;
- scaledBitmapRect.bottom *= scale;
- return scaledBitmapRect;
- }
-
- /**
* Sets the scale of the bitmap relative to this view.
*/
public void setBitmapScale(float scale) {
@@ -235,7 +189,6 @@
/** Binds the thumbnail view to the task */
void rebindToTask(Task t) {
- mTask = t;
if (t.thumbnail != null) {
setThumbnail(t.thumbnail);
} else {
@@ -245,7 +198,6 @@
/** Unbinds the thumbnail view from the task */
void unbindFromTask() {
- mTask = null;
setThumbnail(null);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
index 6d43f9c..c3e0906 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
@@ -18,19 +18,28 @@
import android.animation.ValueAnimator;
import android.graphics.RectF;
-import android.view.View;
import android.view.ViewPropertyAnimator;
import android.view.animation.Interpolator;
/* The transform state for a task view */
public class TaskViewTransform {
+
+ // TODO: Move this out of the transform
public int startDelay = 0;
+
public int translationX = 0;
public int translationY = 0;
public float translationZ = 0;
public float scale = 1f;
public float alpha = 1f;
+
+ // Clip and thumbnail scale are untransformed layout-space properties
+ // The bottom clip is only used for freeform workspace tasks
+ public int clipBottom = 0;
+ public int clipRight = 0;
+ public float thumbnailScale = 1f;
+
public boolean visible = false;
float p = 0f;
@@ -42,18 +51,6 @@
// Do nothing
}
- public TaskViewTransform(TaskViewTransform o) {
- startDelay = o.startDelay;
- translationX = o.translationX;
- translationY = o.translationY;
- translationZ = o.translationZ;
- scale = o.scale;
- alpha = o.alpha;
- visible = o.visible;
- rect.set(o.rect);
- p = o.p;
- }
-
/**
* Resets the current transform.
*/
@@ -64,6 +61,9 @@
translationZ = 0;
scale = 1f;
alpha = 1f;
+ clipBottom = 0;
+ clipRight = 0;
+ thumbnailScale = 1f;
visible = false;
rect.setEmpty();
p = 0f;
@@ -87,7 +87,7 @@
}
/** Applies this transform to a view. */
- public void applyToTaskView(View v, int duration, Interpolator interp, boolean allowLayers,
+ public void applyToTaskView(TaskView v, int duration, Interpolator interp, boolean allowLayers,
boolean allowShadows, ValueAnimator.AnimatorUpdateListener updateCallback) {
// Check to see if any properties have changed, and update the task view
if (duration > 0) {
@@ -149,7 +149,7 @@
}
/** Reset the transform on a view. */
- public static void reset(View v) {
+ public static void reset(TaskView v) {
// Cancel any running animations
v.animate().cancel();
v.setTranslationX(0f);
@@ -158,6 +158,9 @@
v.setScaleX(1f);
v.setScaleY(1f);
v.setAlpha(1f);
+ v.getViewBounds().setClipRight(0, false /* forceUpdate */);
+ v.getViewBounds().setClipBottom(0, false /* forceUpdate */);
+ v.mThumbnailView.setBitmapScale(1f);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 98f3f0c..93264ff 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -74,7 +74,7 @@
private final Rect mTmpRect = new Rect();
private final Rect mLastResizeRect = new Rect();
- private final WindowManagerProxy mWindowManagerProxy = new WindowManagerProxy();
+ private final WindowManagerProxy mWindowManagerProxy = WindowManagerProxy.getInstance();
private Interpolator mFastOutSlowInInterpolator;
private final Interpolator mTouchResponseInterpolator =
new PathInterpolator(0.3f, 0f, 0.1f, 1f);
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
index 0d3f803..58de5d5 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java
@@ -37,6 +37,8 @@
private static final String TAG = "WindowManagerProxy";
+ private static final WindowManagerProxy sInstance = new WindowManagerProxy();
+
@GuardedBy("mResizeRect")
private final Rect mResizeRect = new Rect();
private final Rect mTmpRect = new Rect();
@@ -78,6 +80,13 @@
}
};
+ private WindowManagerProxy() {
+ }
+
+ public static WindowManagerProxy getInstance() {
+ return sInstance;
+ }
+
public void resizeDockedStack(Rect rect) {
synchronized (mResizeRect) {
mResizeRect.set(rect);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
index 6f8cd8c..da3cd54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -130,6 +130,7 @@
private final int mLowPriorityColor;
private boolean mIsBelowSpeedBump;
private FalsingManager mFalsingManager;
+ private boolean mTrackTouch;
public ActivatableNotificationView(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -175,15 +176,30 @@
};
@Override
- public boolean onTouchEvent(MotionEvent event) {
- if (mDimmed) {
+ public boolean dispatchTouchEvent(MotionEvent event) {
+ if (mDimmed && !mActivated) {
return handleTouchEventDimmed(event);
} else {
- return super.onTouchEvent(event);
+ return super.dispatchTouchEvent(event);
}
}
@Override
+ public boolean onTouchEvent(MotionEvent event) {
+ boolean result;
+ if (mDimmed && mActivated) {
+ result = handleTouchEventDimmed(event);
+ } else {
+ result = super.onTouchEvent(event);
+ }
+ if (mActivated && result && event.getAction() == MotionEvent.ACTION_UP) {
+ mFalsingManager.onNotificationDoubleTap();
+ removeCallbacks(mTapTimeoutRunnable);
+ }
+ return result;
+ }
+
+ @Override
public void drawableHotspotChanged(float x, float y) {
if (!mDimmed){
mBackgroundNormal.drawableHotspotChanged(x, y);
@@ -206,14 +222,15 @@
case MotionEvent.ACTION_DOWN:
mDownX = event.getX();
mDownY = event.getY();
+ mTrackTouch = true;
if (mDownY > getActualHeight()) {
- return false;
+ mTrackTouch = false;
}
break;
case MotionEvent.ACTION_MOVE:
if (!isWithinTouchSlop(event)) {
makeInactive(true /* animate */);
- return false;
+ mTrackTouch = false;
}
break;
case MotionEvent.ACTION_UP:
@@ -222,23 +239,23 @@
makeActive();
postDelayed(mTapTimeoutRunnable, DOUBLETAP_TIMEOUT_MS);
} else {
- mFalsingManager.onNotificationDoubleTap();
- boolean performed = performClick();
- if (performed) {
- removeCallbacks(mTapTimeoutRunnable);
+ if (!performClick()) {
+ return false;
}
}
} else {
makeInactive(true /* animate */);
+ mTrackTouch = false;
}
break;
case MotionEvent.ACTION_CANCEL:
makeInactive(true /* animate */);
+ mTrackTouch = false;
break;
default:
break;
}
- return true;
+ return mTrackTouch;
}
private void makeActive() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 5d4c64e..b1847e1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -116,7 +116,8 @@
public abstract class BaseStatusBar extends SystemUI implements
CommandQueue.Callbacks, ActivatableNotificationView.OnActivatedListener,
- ExpandableNotificationRow.ExpansionLogger, NotificationData.Environment {
+ ExpandableNotificationRow.ExpansionLogger, NotificationData.Environment,
+ ExpandableNotificationRow.OnExpandClickListener {
public static final String TAG = "StatusBar";
public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
public static final boolean MULTIUSER_DEBUG = false;
@@ -126,8 +127,8 @@
public static final boolean ENABLE_REMOTE_INPUT =
SystemProperties.getBoolean("debug.enable_remote_input", true);
- public static final boolean ENABLE_CHILD_NOTIFICATIONS = Build.IS_DEBUGGABLE
- && SystemProperties.getBoolean("debug.child_notifs", false);
+ public static final boolean ENABLE_CHILD_NOTIFICATIONS
+ = SystemProperties.getBoolean("debug.child_notifs", true);
protected static final int MSG_SHOW_RECENT_APPS = 1019;
protected static final int MSG_HIDE_RECENT_APPS = 1020;
@@ -1298,9 +1299,14 @@
// Since the number of notifications is determined based on the height of the view, we
// need to update them.
updateRowStates();
+ mStackScroller.onHeightChanged(null, false);
}
}
+ @Override
+ public void onExpandClicked(View clickedView, boolean nowExpanded) {
+ }
+
protected class H extends Handler {
public void handleMessage(Message m) {
switch (m.what) {
@@ -1381,6 +1387,7 @@
parent, false);
row.setExpansionLogger(this, entry.notification.getKey());
row.setGroupManager(mGroupManager);
+ row.setOnExpandClickListener(this);
}
workAroundBadLayerDrawableOpacity(row);
@@ -1537,7 +1544,6 @@
}
}
entry.row = row;
- updateNotificationHeightRange(entry);
entry.row.setOnActivatedListener(this);
entry.row.setExpandable(bigContentViewLocal != null);
@@ -1550,19 +1556,11 @@
row.setUserExpanded(userExpanded);
}
row.setUserLocked(userLocked);
- row.updateStatusBarNotification(entry.notification);
+ row.onNotificationUpdated(entry);
applyRemoteInput(entry);
return true;
}
- private void updateNotificationHeightRange(Entry entry) {
- boolean customView = entry.getContentView().getId()
- != com.android.internal.R.id.status_bar_latest_event_content;
- boolean beforeN = entry.targetSdk < Build.VERSION_CODES.N;
- int minHeight = customView && beforeN ? mRowMinHeightLegacy : mRowMinHeight;
- entry.row.setHeightRange(minHeight, mRowMaxHeight);
- }
-
/**
* Adds RemoteInput actions from the WearableExtender; to be removed once more apps support this
* via first-class API.
@@ -2184,7 +2182,7 @@
// update the contentIntent
mNotificationClicker.register(entry.row, sbn);
- entry.row.updateStatusBarNotification(entry.notification);
+ entry.row.onNotificationUpdated(entry);
entry.row.resetHeight();
applyRemoteInput(entry);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 81e20aa..2b93554 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -22,6 +22,7 @@
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.service.notification.StatusBarNotification;
import android.util.AttributeSet;
import android.view.MotionEvent;
@@ -49,6 +50,11 @@
private static final int DEFAULT_DIVIDER_ALPHA = 0x29;
private static final int COLORED_DIVIDER_ALPHA = 0x7B;
private final LinearInterpolator mLinearInterpolator = new LinearInterpolator();
+ private final int mNotificationMinHeightLegacy;
+ private final int mMaxHeadsUpHeightLegacy;
+ private final int mMaxHeadsUpHeight;
+ private final int mNotificationMinHeight;
+ private final int mNotificationMaxHeight;
private int mRowMinHeight;
/** Does this row contain layouts that can adapt to row expansion */
@@ -86,10 +92,12 @@
private String mLoggingKey;
private boolean mWasReset;
private NotificationGuts mGuts;
+ private NotificationData.Entry mEntry;
private StatusBarNotification mStatusBarNotification;
private boolean mIsHeadsUp;
private boolean mLastChronometerRunning = true;
private NotificationHeaderView mNotificationHeader;
+ private NotificationViewWrapper mNotificationHeaderWrapper;
private ViewStub mChildrenContainerStub;
private NotificationGroupManager mGroupManager;
private boolean mChildrenExpanded;
@@ -99,19 +107,26 @@
private boolean mIsSystemChildExpanded;
private boolean mIsPinned;
private FalsingManager mFalsingManager;
+ private NotificationHeaderUtil mHeaderUtil = new NotificationHeaderUtil(this);
private boolean mJustClicked;
private boolean mIconAnimationRunning;
private boolean mShowNoBackground;
private ExpandableNotificationRow mNotificationParent;
+ private OnExpandClickListener mOnExpandClickListener;
private OnClickListener mExpandClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (mGroupManager.isSummaryOfGroup(mStatusBarNotification)) {
mGroupManager.toggleGroupExpansion(mStatusBarNotification);
+ mOnExpandClickListener.onExpandClicked(ExpandableNotificationRow.this,
+ mGroupManager.isGroupExpanded(mStatusBarNotification));
} else {
- setUserExpanded(!isExpanded());
+ boolean nowExpanded = !isExpanded();
+ setUserExpanded(nowExpanded);
notifyHeightChanged(true);
+ mOnExpandClickListener.onExpandClicked(ExpandableNotificationRow.this,
+ nowExpanded);
}
}
};
@@ -181,10 +196,11 @@
}
}
- public void updateStatusBarNotification(StatusBarNotification statusBarNotification) {
- mStatusBarNotification = statusBarNotification;
- mPrivateLayout.onNotificationUpdated(statusBarNotification);
- mPublicLayout.onNotificationUpdated(statusBarNotification);
+ public void onNotificationUpdated(NotificationData.Entry entry) {
+ mEntry = entry;
+ mStatusBarNotification = entry.notification;
+ mPrivateLayout.onNotificationUpdated(entry.notification);
+ mPublicLayout.onNotificationUpdated(entry.notification);
updateVetoButton();
if (mIsSummaryWithChildren) {
recreateNotificationHeader();
@@ -192,7 +208,28 @@
if (mIconAnimationRunning) {
setIconAnimationRunning(true);
}
+ if (mNotificationParent != null) {
+ mNotificationParent.updateChildrenHeaderAppearance();
+ }
onChildrenCountChanged();
+ updateLimits();
+ }
+
+ private void updateLimits() {
+ boolean customView = getPrivateLayout().getContractedChild().getId()
+ != com.android.internal.R.id.status_bar_latest_event_content;
+ boolean beforeN = mEntry.targetSdk < Build.VERSION_CODES.N;
+ int minHeight = customView && beforeN && !mIsSummaryWithChildren ?
+ mNotificationMinHeightLegacy : mNotificationMinHeight;
+ boolean headsUpCustom = getPrivateLayout().getHeadsUpChild() != null &&
+ getPrivateLayout().getHeadsUpChild().getId()
+ != com.android.internal.R.id.status_bar_latest_event_content;
+ int headsUpheight = headsUpCustom && beforeN ? mMaxHeadsUpHeightLegacy
+ : mMaxHeadsUpHeight;
+ mRowMinHeight = minHeight;
+ mMaxViewHeight = mNotificationMaxHeight;
+ mPrivateLayout.setHeights(mRowMinHeight, headsUpheight);
+ mPublicLayout.setHeights(mRowMinHeight, headsUpheight);
}
public StatusBarNotification getStatusBarNotification() {
@@ -240,6 +277,7 @@
if (mChildrenContainer != null) {
mChildrenContainer.removeNotification(row);
}
+ mHeaderUtil.restoreNotificationHeader(row);
onChildrenCountChanged();
row.setIsChildInGroup(false, null);
}
@@ -355,6 +393,9 @@
}
public int getHeadsUpHeight() {
+ if (mIsSummaryWithChildren) {
+ return mChildrenContainer.getIntrinsicHeight();
+ }
return mHeadsUpHeight;
}
@@ -408,17 +449,15 @@
}
}
- public CharSequence getSubText() {
- Notification notification = mStatusBarNotification.getNotification();
- CharSequence subText = notification.extras.getCharSequence(Notification.EXTRA_SUMMARY_TEXT);
- if (subText == null) {
- subText = notification.extras.getCharSequence(Notification.EXTRA_SUB_TEXT);
+ public NotificationHeaderView getNotificationHeader() {
+ if (mNotificationHeader != null) {
+ return mNotificationHeader;
}
- return subText;
+ return mPrivateLayout.getNotificationHeader();
}
- public void setContentSubTextVisible(boolean visible) {
- mPrivateLayout.setSubTextVisible(visible);
+ public void setOnExpandClickListener(OnExpandClickListener onExpandClickListener) {
+ mOnExpandClickListener = onExpandClickListener;
}
public interface ExpansionLogger {
@@ -428,6 +467,16 @@
public ExpandableNotificationRow(Context context, AttributeSet attrs) {
super(context, attrs);
mFalsingManager = FalsingManager.getInstance(context);
+ mNotificationMinHeightLegacy = getResources().getDimensionPixelSize(
+ R.dimen.notification_min_height_legacy);
+ mNotificationMinHeight = getResources().getDimensionPixelSize(
+ R.dimen.notification_min_height);
+ mNotificationMaxHeight = getResources().getDimensionPixelSize(
+ R.dimen.notification_max_height);
+ mMaxHeadsUpHeightLegacy = getResources().getDimensionPixelSize(
+ R.dimen.notification_max_heads_up_height_legacy);
+ mMaxHeadsUpHeight = getResources().getDimensionPixelSize(
+ R.dimen.notification_max_heads_up_height);
}
/**
@@ -504,13 +553,15 @@
}
}
- private void updateChildrenVisibility(boolean animated) {
+ private void updateChildrenVisibility() {
if (mChildrenContainer == null) {
return;
}
mChildrenContainer.setVisibility(mIsSummaryWithChildren ? VISIBLE : INVISIBLE);
mNotificationHeader.setVisibility(mIsSummaryWithChildren ? VISIBLE : INVISIBLE);
mPrivateLayout.setVisibility(!mIsSummaryWithChildren ? VISIBLE : INVISIBLE);
+ // The limits might have changed if the view suddenly became a group or vice versa
+ updateLimits();
}
@Override
@@ -534,13 +585,10 @@
if (showing != null) {
showing.setDark(dark, fade, delay);
}
- }
-
- public void setHeightRange(int rowMinHeight, int rowMaxHeight) {
- mRowMinHeight = rowMinHeight;
- mMaxViewHeight = rowMaxHeight;
- mPrivateLayout.setSmallHeight(mRowMinHeight);
- mPublicLayout.setSmallHeight(mRowMinHeight);
+ if (mIsSummaryWithChildren) {
+ mChildrenContainer.setDark(dark, fade, delay);
+ mNotificationHeaderWrapper.setDark(dark, fade, delay);
+ }
}
public boolean isExpandable() {
@@ -710,8 +758,9 @@
}
}
mPrivateLayout.updateExpandButtons(isExpandable());
+ updateChildrenHeaderAppearance();
updateHeaderChildCount();
- updateChildrenVisibility(true);
+ updateChildrenVisibility();
}
/**
@@ -831,6 +880,9 @@
public void setChildrenExpanded(boolean expanded, boolean animate) {
mChildrenExpanded = expanded;
+ if (mNotificationHeader != null) {
+ mNotificationHeader.setExpanded(expanded);
+ }
if (mChildrenContainer != null) {
mChildrenContainer.setChildrenExpanded(expanded);
}
@@ -934,13 +986,30 @@
com.android.internal.R.id.expand_button);
expandButton.setVisibility(VISIBLE);
mNotificationHeader.setOnClickListener(mExpandClickListener);
+ mNotificationHeaderWrapper = NotificationViewWrapper.wrap(getContext(),
+ mNotificationHeader);
addView(mNotificationHeader);
} else {
header.reapply(getContext(), mNotificationHeader);
+ mNotificationHeaderWrapper.notifyContentUpdated();
}
+ updateHeaderExpandButton();
+ updateChildrenHeaderAppearance();
updateHeaderChildCount();
}
+ private void updateHeaderExpandButton() {
+ if (mIsSummaryWithChildren) {
+ mNotificationHeader.setIsGroupHeader(true /* isGroupHeader*/);
+ }
+ }
+
+ public void updateChildrenHeaderAppearance() {
+ if (mIsSummaryWithChildren) {
+ mHeaderUtil.updateChildrenHeaderAppearance();
+ }
+ }
+
public boolean isMaxExpandHeightInitialized() {
return mMaxExpandHeight != 0;
}
@@ -986,4 +1055,8 @@
mLogger.logNotificationExpansion(mLoggingKey, userAction, nowExpanded) ;
}
}
+
+ public interface OnExpandClickListener {
+ void onExpandClicked(View clickedView, boolean nowExpanded);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
index fb8086c..2944c4f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -52,8 +52,6 @@
private static final int VISIBLE_TYPE_SINGLELINE = 3;
private final Rect mClipBounds = new Rect();
- private final int mSingleLineHeight;
- private final int mHeadsUpHeight;
private final int mRoundRectRadius;
private final Interpolator mLinearInterpolator = new LinearInterpolator();
private final boolean mRoundRectClippingEnabled;
@@ -78,6 +76,7 @@
private boolean mShowingLegacyBackground;
private boolean mIsChildInGroup;
private int mSmallHeight;
+ private int mHeadsUpHeight;
private StatusBarNotification mStatusBarNotification;
private NotificationGroupManager mGroupManager;
@@ -104,9 +103,6 @@
super(context, attrs);
mHybridViewManager = new HybridNotificationViewManager(getContext(), this);
mFadePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));
- mSingleLineHeight = getResources().getDimensionPixelSize(
- R.dimen.notification_single_line_height);
- mHeadsUpHeight = getResources().getDimensionPixelSize(R.dimen.notification_mid_height);
mRoundRectRadius = getResources().getDimensionPixelSize(
R.dimen.notification_material_rounded_rect_radius);
mRoundRectClippingEnabled = getResources().getBoolean(
@@ -115,8 +111,9 @@
setOutlineProvider(mOutlineProvider);
}
- public void setSmallHeight(int smallHeight) {
+ public void setHeights(int smallHeight, int headsUpMaxHeight) {
mSmallHeight = smallHeight;
+ mHeadsUpHeight = headsUpMaxHeight;
}
@Override
@@ -153,16 +150,15 @@
ViewGroup.LayoutParams layoutParams = mHeadsUpChild.getLayoutParams();
if (layoutParams.height >= 0) {
// An actual height is set
- size = Math.min(maxSize, layoutParams.height);
+ size = Math.min(size, layoutParams.height);
}
mHeadsUpChild.measure(widthMeasureSpec,
MeasureSpec.makeMeasureSpec(size, MeasureSpec.AT_MOST));
maxChildHeight = Math.max(maxChildHeight, mHeadsUpChild.getMeasuredHeight());
}
if (mSingleLineView != null) {
- int size = Math.min(maxSize, mSingleLineHeight);
mSingleLineView.measure(widthMeasureSpec,
- MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY));
+ MeasureSpec.makeMeasureSpec(maxSize, MeasureSpec.AT_MOST));
maxChildHeight = Math.max(maxChildHeight, mSingleLineView.getMeasuredHeight());
}
int ownHeight = Math.min(maxChildHeight, maxSize);
@@ -287,17 +283,17 @@
}
public int getMaxHeight() {
- if (mIsHeadsUp && mHeadsUpChild != null) {
- return mHeadsUpChild.getHeight();
- } else if (mExpandedChild != null) {
+ if (mExpandedChild != null) {
return mExpandedChild.getHeight();
+ } else if (mIsHeadsUp && mHeadsUpChild != null) {
+ return mHeadsUpChild.getHeight();
}
return mSmallHeight;
}
public int getMinHeight() {
if (mIsChildInGroup && !isGroupExpanded()) {
- return mSingleLineHeight;
+ return mSingleLineView.getHeight();
} else {
return mSmallHeight;
}
@@ -461,6 +457,9 @@
if (mDark == dark || mContractedChild == null) return;
mDark = dark;
mContractedWrapper.setDark(dark && !mShowingLegacyBackground, fade, delay);
+ if (mSingleLineView != null) {
+ mSingleLineView.setDark(dark, fade, delay);
+ }
}
public void setHeadsUp(boolean headsUp) {
@@ -509,18 +508,6 @@
}
}
- public void setSubTextVisible(boolean visible) {
- if (mExpandedChild != null) {
- mExpandedWrapper.setSubTextVisible(visible);
- }
- if (mContractedChild != null) {
- mContractedWrapper.setSubTextVisible(visible);
- }
- if (mHeadsUpChild != null) {
- mHeadsUpWrapper.setSubTextVisible(visible);
- }
- }
-
public void setGroupManager(NotificationGroupManager groupManager) {
mGroupManager = groupManager;
}
@@ -540,4 +527,18 @@
mHeadsUpWrapper.updateExpandability(expandable, mExpandClickListener);
}
}
+
+ public NotificationHeaderView getNotificationHeader() {
+ NotificationHeaderView header = null;
+ if (mContractedChild != null) {
+ header = mContractedWrapper.getNotificationHeader();
+ }
+ if (header == null && mExpandedChild != null) {
+ header = mExpandedWrapper.getNotificationHeader();
+ }
+ if (header == null && mHeadsUpChild != null) {
+ header = mHeadsUpWrapper.getNotificationHeader();
+ }
+ return header;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
new file mode 100644
index 0000000..859a330
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderUtil.java
@@ -0,0 +1,346 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.app.Notification;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Icon;
+import android.text.TextUtils;
+import android.view.NotificationHeaderView;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+/**
+ * A Util to manage {@link android.view.NotificationHeaderView} objects and their redundancies.
+ */
+public class NotificationHeaderUtil {
+
+ private static final TextViewComparator sTextViewComparator = new TextViewComparator();
+ private static final VisibilityApplicator sVisibilityApplicator = new VisibilityApplicator();
+ private static final DataExtractor sIconExtractor = new DataExtractor() {
+ @Override
+ public Object extractData(ExpandableNotificationRow row) {
+ return row.getStatusBarNotification().getNotification();
+ }
+ };
+ private static final IconComparator sIconVisibilityComparator = new IconComparator() {
+ public boolean compare(View parent, View child, Object parentData,
+ Object childData) {
+ return hasSameIcon(parentData, childData)
+ && hasSameColor(parentData, childData);
+ }
+ };
+ private static final IconComparator sGreyComparator = new IconComparator() {
+ public boolean compare(View parent, View child, Object parentData,
+ Object childData) {
+ return !hasSameIcon(parentData, childData)
+ || hasSameColor(parentData, childData);
+ }
+ };
+ private final static ResultApplicator mGreyApplicator = new ResultApplicator() {
+ @Override
+ public void apply(View view, boolean apply) {
+ NotificationHeaderView header = (NotificationHeaderView) view;
+ ImageView icon = (ImageView) view.findViewById(
+ com.android.internal.R.id.icon);
+ ImageView expand = (ImageView) view.findViewById(
+ com.android.internal.R.id.expand_button);
+ applyToChild(icon, apply, header.getOriginalIconColor());
+ int color = header.getOriginalNotificationColor();
+ if (color == Notification.COLOR_DEFAULT) {
+ color = view.getContext().getColor(
+ com.android.internal.R.color.notification_icon_default_color);
+ }
+ applyToChild(expand, apply, color);
+ }
+
+ private void applyToChild(View view, boolean shouldApply, int originalColor) {
+ if (view.getVisibility() == View.VISIBLE
+ && originalColor != NotificationHeaderView.NO_COLOR) {
+ ImageView imageView = (ImageView) view;
+ imageView.getDrawable().mutate();
+ if (shouldApply) {
+ // lets gray it out
+ int grey = view.getContext().getColor(
+ com.android.internal.R.color.notification_icon_default_color);
+ imageView.getDrawable().setColorFilter(grey, PorterDuff.Mode.SRC_ATOP);
+ } else {
+ // lets reset it
+ imageView.getDrawable().setColorFilter(originalColor,
+ PorterDuff.Mode.SRC_ATOP);
+ }
+ }
+ }
+ };
+
+ private final ExpandableNotificationRow mRow;
+ private final ArrayList<HeaderProcessor> mComparators = new ArrayList<>();
+ private final HashSet<Integer> mDividers = new HashSet<>();
+
+ NotificationHeaderUtil(ExpandableNotificationRow row) {
+ mRow = row;
+ // To hide the icons if they are the same and the color is the same
+ mComparators.add(new HeaderProcessor(mRow,
+ com.android.internal.R.id.icon,
+ sIconExtractor,
+ sIconVisibilityComparator,
+ sVisibilityApplicator));
+ // To grey them out the icons and expand button when the icons are not the same
+ mComparators.add(new HeaderProcessor(mRow,
+ com.android.internal.R.id.notification_header,
+ sIconExtractor,
+ sGreyComparator,
+ mGreyApplicator));
+ mComparators.add(HeaderProcessor.forTextView(mRow,
+ com.android.internal.R.id.app_name_text));
+ mComparators.add(HeaderProcessor.forTextView(mRow,
+ com.android.internal.R.id.header_sub_text));
+ mComparators.add(HeaderProcessor.forTextView(mRow,
+ com.android.internal.R.id.header_content_info));
+ mDividers.add(com.android.internal.R.id.sub_text_divider);
+ mDividers.add(com.android.internal.R.id.content_info_divider);
+ mDividers.add(com.android.internal.R.id.time_divider);
+ }
+
+ public void updateChildrenHeaderAppearance() {
+ List<ExpandableNotificationRow> notificationChildren = mRow.getNotificationChildren();
+ if (notificationChildren == null) {
+ return;
+ }
+ // Initialize the comparators
+ for (int compI = 0; compI < mComparators.size(); compI++) {
+ mComparators.get(compI).init();
+ }
+
+ // Compare all notification headers
+ for (int i = 0; i < notificationChildren.size(); i++) {
+ ExpandableNotificationRow row = notificationChildren.get(i);
+ for (int compI = 0; compI < mComparators.size(); compI++) {
+ mComparators.get(compI).compareToHeader(row);
+ }
+ }
+
+ // Apply the comparison to the row
+ for (int i = 0; i < notificationChildren.size(); i++) {
+ ExpandableNotificationRow row = notificationChildren.get(i);
+ for (int compI = 0; compI < mComparators.size(); compI++) {
+ mComparators.get(compI).apply(row);
+ }
+ // We need to sanitize the dividers since they might be off-balance now
+ sanitizeDividers(row);
+ }
+ }
+
+ private void sanitizeDividers(ExpandableNotificationRow row) {
+ if (row.isSummaryWithChildren()) {
+ sanitizeHeader(row.getNotificationHeader());
+ return;
+ }
+ final NotificationContentView layout = row.getPrivateLayout();
+ sanitizeChild(layout.getContractedChild());
+ sanitizeChild(layout.getHeadsUpChild());
+ sanitizeChild(layout.getExpandedChild());
+ }
+
+ private void sanitizeChild(View child) {
+ if (child != null) {
+ NotificationHeaderView header = (NotificationHeaderView) child.findViewById(
+ com.android.internal.R.id.notification_header);
+ sanitizeHeader(header);
+ }
+ }
+
+ private void sanitizeHeader(NotificationHeaderView rowHeader) {
+ if (rowHeader == null) {
+ return;
+ }
+ View left = null;
+ View right;
+ final int childCount = rowHeader.getChildCount();
+ for (int i = 1; i < childCount - 1 ; i++) {
+ View child = rowHeader.getChildAt(i);
+ if (mDividers.contains(Integer.valueOf(child.getId()))) {
+ boolean visible = false;
+ // Lets find the item to the right
+ for (i++; i < childCount - 1; i++) {
+ right = rowHeader.getChildAt(i);
+ if (mDividers.contains(Integer.valueOf(right.getId()))) {
+ // A divider was found, this needs to be hidden
+ i--;
+ break;
+ } else if (right.getVisibility() == View.VISIBLE) {
+ visible = left != null;
+ left = right;
+ break;
+ }
+ }
+ child.setVisibility(visible ? View.VISIBLE : View.GONE);
+ } else if (child.getVisibility() == View.VISIBLE) {
+ left = child;
+ }
+ }
+ }
+
+ public void restoreNotificationHeader(ExpandableNotificationRow row) {
+ for (int compI = 0; compI < mComparators.size(); compI++) {
+ mComparators.get(compI).apply(row, true /* reset */);
+ }
+ sanitizeDividers(row);
+ }
+
+ private static class HeaderProcessor {
+ private final int mId;
+ private final DataExtractor mExtractor;
+ private final ResultApplicator mApplicator;
+ private final ExpandableNotificationRow mParentRow;
+ private boolean mApply;
+ private View mParentView;
+ private ViewComparator mComparator;
+ private Object mParentData;
+
+ public static HeaderProcessor forTextView(ExpandableNotificationRow row, int id) {
+ return new HeaderProcessor(row, id, null, sTextViewComparator, sVisibilityApplicator);
+ }
+
+ HeaderProcessor(ExpandableNotificationRow row, int id, DataExtractor extractor,
+ ViewComparator comparator,
+ ResultApplicator applicator) {
+ mId = id;
+ mExtractor = extractor;
+ mApplicator = applicator;
+ mComparator = comparator;
+ mParentRow = row;
+ }
+
+ public void init() {
+ mParentView = mParentRow.getNotificationHeader().findViewById(mId);
+ mParentData = mExtractor == null ? null : mExtractor.extractData(mParentRow);
+ mApply = !mComparator.isEmpty(mParentView);
+ }
+ public void compareToHeader(ExpandableNotificationRow row) {
+ if (!mApply) {
+ return;
+ }
+ NotificationHeaderView header = row.getNotificationHeader();
+ if (header == null) {
+ mApply = false;
+ return;
+ }
+ Object childData = mExtractor == null ? null : mExtractor.extractData(row);
+ mApply = mComparator.compare(mParentView, header.findViewById(mId),
+ mParentData, childData);
+ }
+
+ public void apply(ExpandableNotificationRow row) {
+ apply(row, false /* reset */);
+ }
+
+ public void apply(ExpandableNotificationRow row, boolean reset) {
+ boolean apply = mApply && !reset;
+ if (row.isSummaryWithChildren()) {
+ applyToView(apply, row.getNotificationHeader());
+ return;
+ }
+ applyToView(apply, row.getPrivateLayout().getContractedChild());
+ applyToView(apply, row.getPrivateLayout().getHeadsUpChild());
+ applyToView(apply, row.getPrivateLayout().getExpandedChild());
+ }
+
+ private void applyToView(boolean apply, View parent) {
+ if (parent != null) {
+ View view = parent.findViewById(mId);
+ if (view != null && !mComparator.isEmpty(view)) {
+ mApplicator.apply(view, apply);
+ }
+ }
+ }
+ }
+
+ private interface ViewComparator {
+ /**
+ * @param parent the parent view
+ * @param child the child view
+ * @param parentData optional data for the parent
+ * @param childData optional data for the child
+ * @return whether to views are the same
+ */
+ boolean compare(View parent, View child, Object parentData, Object childData);
+ boolean isEmpty(View view);
+ }
+
+ private interface DataExtractor {
+ Object extractData(ExpandableNotificationRow row);
+ }
+
+ private static class TextViewComparator implements ViewComparator {
+ @Override
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
+ TextView parentView = (TextView) parent;
+ TextView childView = (TextView) child;
+ return parentView.getText().equals(childView.getText());
+ }
+
+ @Override
+ public boolean isEmpty(View view) {
+ return TextUtils.isEmpty(((TextView) view).getText());
+ }
+ }
+
+ private static abstract class IconComparator implements ViewComparator {
+ @Override
+ public boolean compare(View parent, View child, Object parentData, Object childData) {
+ return false;
+ }
+
+ protected boolean hasSameIcon(Object parentData, Object childData) {
+ Icon parentIcon = ((Notification) parentData).getSmallIcon();
+ Icon childIcon = ((Notification) childData).getSmallIcon();
+ return parentIcon.sameAs(childIcon);
+ }
+
+ /**
+ * @return whether two ImageViews have the same colorFilterSet or none at all
+ */
+ protected boolean hasSameColor(Object parentData, Object childData) {
+ int parentColor = ((Notification) parentData).color;
+ int childColor = ((Notification) childData).color;
+ return parentColor == childColor;
+ }
+
+ @Override
+ public boolean isEmpty(View view) {
+ return false;
+ }
+ }
+
+ private interface ResultApplicator {
+ void apply(View view, boolean apply);
+ }
+
+ private static class VisibilityApplicator implements ResultApplicator {
+
+ @Override
+ public void apply(View view, boolean apply) {
+ view.setVisibility(apply ? View.GONE : View.VISIBLE);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderViewWrapper.java
new file mode 100644
index 0000000..ddad2e0
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationHeaderViewWrapper.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.drawable.Drawable;
+import android.view.NotificationHeaderView;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import android.widget.ImageView;
+
+import com.android.systemui.R;
+import com.android.systemui.ViewInvertHelper;
+import com.android.systemui.statusbar.phone.NotificationPanelView;
+
+import java.util.ArrayList;
+
+/**
+ * Wraps a notification header view.
+ */
+public class NotificationHeaderViewWrapper extends NotificationViewWrapper {
+
+ private final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix();
+ private final PorterDuffColorFilter mIconColorFilter = new PorterDuffColorFilter(
+ 0, PorterDuff.Mode.SRC_ATOP);
+ private final int mIconDarkAlpha;
+ private final int mIconDarkColor = 0xffffffff;
+ protected final Interpolator mLinearOutSlowInInterpolator;
+ protected final ViewInvertHelper mInvertHelper;
+
+ protected int mColor;
+ private ImageView mIcon;
+
+ private ImageView mExpandButton;
+ private NotificationHeaderView mNotificationHeader;
+
+ protected NotificationHeaderViewWrapper(Context ctx, View view) {
+ super(view);
+ mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha);
+ mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(ctx,
+ android.R.interpolator.linear_out_slow_in);
+ mInvertHelper = new ViewInvertHelper(ctx, NotificationPanelView.DOZE_ANIMATION_DURATION);
+ resolveHeaderViews();
+ }
+
+ protected void resolveHeaderViews() {
+ mIcon = (ImageView) mView.findViewById(com.android.internal.R.id.icon);
+ mExpandButton = (ImageView) mView.findViewById(com.android.internal.R.id.expand_button);
+ mColor = resolveColor(mExpandButton);
+ mNotificationHeader = (NotificationHeaderView) mView.findViewById(
+ com.android.internal.R.id.notification_header);
+ for (int i = 0; i < mNotificationHeader.getChildCount(); i++) {
+ View child = mNotificationHeader.getChildAt(i);
+ if (child != mIcon) {
+ mInvertHelper.addTarget(child);
+ }
+ }
+ }
+
+ private int resolveColor(ImageView icon) {
+ if (icon != null && icon.getDrawable() != null) {
+ ColorFilter filter = icon.getDrawable().getColorFilter();
+ if (filter instanceof PorterDuffColorFilter) {
+ return ((PorterDuffColorFilter) filter).getColor();
+ }
+ }
+ return 0;
+ }
+
+ @Override
+ public void notifyContentUpdated() {
+ mInvertHelper.clearTargets();
+ // Reinspect the notification.
+ resolveHeaderViews();
+ }
+
+ @Override
+ public void setDark(boolean dark, boolean fade, long delay) {
+ if (fade) {
+ mInvertHelper.fade(dark, delay);
+ } else {
+ mInvertHelper.update(dark);
+ }
+ if (mIcon != null) {
+ boolean hadColorFilter = mNotificationHeader.getOriginalIconColor()
+ != NotificationHeaderView.NO_COLOR;
+ if (fade) {
+ if (hadColorFilter) {
+ fadeIconColorFilter(mIcon, dark, delay);
+ fadeIconAlpha(mIcon, dark, delay);
+ } else {
+ fadeGrayscale(mIcon, dark, delay);
+ }
+ } else {
+ if (hadColorFilter) {
+ updateIconColorFilter(mIcon, dark);
+ updateIconAlpha(mIcon, dark);
+ } else {
+ updateGrayscale(mIcon, dark);
+ }
+ }
+ }
+ }
+
+ protected void startIntensityAnimation(ValueAnimator.AnimatorUpdateListener updateListener,
+ boolean dark, long delay, Animator.AnimatorListener listener) {
+ float startIntensity = dark ? 0f : 1f;
+ float endIntensity = dark ? 1f : 0f;
+ ValueAnimator animator = ValueAnimator.ofFloat(startIntensity, endIntensity);
+ animator.addUpdateListener(updateListener);
+ animator.setDuration(NotificationPanelView.DOZE_ANIMATION_DURATION);
+ animator.setInterpolator(mLinearOutSlowInInterpolator);
+ animator.setStartDelay(delay);
+ if (listener != null) {
+ animator.addListener(listener);
+ }
+ animator.start();
+ }
+
+ private void fadeIconColorFilter(final ImageView target, boolean dark, long delay) {
+ startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ updateIconColorFilter(target, (Float) animation.getAnimatedValue());
+ }
+ }, dark, delay, null /* listener */);
+ }
+
+ private void fadeIconAlpha(final ImageView target, boolean dark, long delay) {
+ startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ float t = (float) animation.getAnimatedValue();
+ target.setImageAlpha((int) (255 * (1f - t) + mIconDarkAlpha * t));
+ }
+ }, dark, delay, null /* listener */);
+ }
+
+ protected void fadeGrayscale(final ImageView target, final boolean dark, long delay) {
+ startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ updateGrayscaleMatrix((float) animation.getAnimatedValue());
+ target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix));
+ }
+ }, dark, delay, new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (!dark) {
+ target.setColorFilter(null);
+ }
+ }
+ });
+ }
+
+ private void updateIconColorFilter(ImageView target, boolean dark) {
+ updateIconColorFilter(target, dark ? 1f : 0f);
+ }
+
+ private void updateIconColorFilter(ImageView target, float intensity) {
+ int color = interpolateColor(mColor, mIconDarkColor, intensity);
+ mIconColorFilter.setColor(color);
+ Drawable iconDrawable = target.getDrawable();
+
+ // Also, the notification might have been modified during the animation, so background
+ // might be null here.
+ if (iconDrawable != null) {
+ iconDrawable.mutate().setColorFilter(mIconColorFilter);
+ }
+ }
+
+ private void updateIconAlpha(ImageView target, boolean dark) {
+ target.setImageAlpha(dark ? mIconDarkAlpha : 255);
+ }
+
+ protected void updateGrayscale(ImageView target, boolean dark) {
+ if (dark) {
+ updateGrayscaleMatrix(1f);
+ target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix));
+ } else {
+ target.setColorFilter(null);
+ }
+ }
+
+ @Override
+ public void updateExpandability(boolean expandable, View.OnClickListener onClickListener) {
+ mExpandButton.setVisibility(expandable ? View.VISIBLE : View.GONE);
+ mNotificationHeader.setOnClickListener(expandable ? onClickListener : null);
+ }
+
+ private void updateGrayscaleMatrix(float intensity) {
+ mGrayscaleColorMatrix.setSaturation(1 - intensity);
+ }
+
+ private static int interpolateColor(int source, int target, float t) {
+ int aSource = Color.alpha(source);
+ int rSource = Color.red(source);
+ int gSource = Color.green(source);
+ int bSource = Color.blue(source);
+ int aTarget = Color.alpha(target);
+ int rTarget = Color.red(target);
+ int gTarget = Color.green(target);
+ int bTarget = Color.blue(target);
+ return Color.argb(
+ (int) (aSource * (1f - t) + aTarget * t),
+ (int) (rSource * (1f - t) + rTarget * t),
+ (int) (gSource * (1f - t) + gTarget * t),
+ (int) (bSource * (1f - t) + bTarget * t));
+ }
+
+ @Override
+ public NotificationHeaderView getNotificationHeader() {
+ return mNotificationHeader;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
index f20ccd5..77e8c55 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationTemplateViewWrapper.java
@@ -16,77 +16,31 @@
package com.android.systemui.statusbar;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
-import android.content.res.ColorStateList;
import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
-import android.graphics.PorterDuff;
-import android.graphics.PorterDuffColorFilter;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.text.TextUtils;
-import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.ProgressBar;
-import android.widget.TextView;
-
-import com.android.systemui.R;
-import com.android.systemui.ViewInvertHelper;
-import com.android.systemui.statusbar.phone.NotificationPanelView;
-
-import java.util.ArrayList;
/**
* Wraps a notification view inflated from a template.
*/
-public class NotificationTemplateViewWrapper extends NotificationViewWrapper {
+public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapper {
- private final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix();
- private final PorterDuffColorFilter mIconColorFilter = new PorterDuffColorFilter(
- 0, PorterDuff.Mode.SRC_ATOP);
- private final int mIconDarkAlpha;
- private final int mIconDarkColor = 0xffffffff;
- private final int mDarkProgressTint = 0xffffffff;
- private final Interpolator mLinearOutSlowInInterpolator;
+ private static final int mDarkProgressTint = 0xffffffff;
- private int mColor;
- private ViewInvertHelper mInvertHelper;
- private ImageView mIcon;
protected ImageView mPicture;
-
- private TextView mSubText;
- private View mSubTextDivider;
- private ImageView mExpandButton;
- private ViewGroup mNotificationHeader;
private ProgressBar mProgressBar;
protected NotificationTemplateViewWrapper(Context ctx, View view) {
- super(view);
- mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha);
- mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(ctx,
- android.R.interpolator.linear_out_slow_in);
-
- resolveViews();
+ super(ctx, view);
+ resolveTemplateViews();
}
- private void resolveViews() {
+ private void resolveTemplateViews() {
View mainColumn = mView.findViewById(com.android.internal.R.id.notification_main_column);
- mIcon = (ImageView) mView.findViewById(com.android.internal.R.id.icon);
mPicture = (ImageView) mView.findViewById(com.android.internal.R.id.right_icon);
- mSubText = (TextView) mView.findViewById(com.android.internal.R.id.header_sub_text);
- mSubTextDivider = mView.findViewById(com.android.internal.R.id.sub_text_divider);
- mExpandButton = (ImageView) mView.findViewById(com.android.internal.R.id.expand_button);
- mColor = resolveColor(mExpandButton);
final View progress = mView.findViewById(com.android.internal.R.id.progress);
if (progress instanceof ProgressBar) {
mProgressBar = (ProgressBar) progress;
@@ -94,30 +48,9 @@
// It's still a viewstub
mProgressBar = null;
}
- mNotificationHeader = (ViewGroup) mView.findViewById(
- com.android.internal.R.id.notification_header);
- ArrayList<View> viewsToInvert = new ArrayList<>();
if (mainColumn != null) {
- viewsToInvert.add(mainColumn);
+ mInvertHelper.addTarget(mainColumn);
}
- for (int i = 0; i < mNotificationHeader.getChildCount(); i++) {
- View child = mNotificationHeader.getChildAt(i);
- if (child != mIcon) {
- viewsToInvert.add(child);
- }
- }
- mInvertHelper = new ViewInvertHelper(viewsToInvert,
- NotificationPanelView.DOZE_ANIMATION_DURATION);
- }
-
- private int resolveColor(ImageView icon) {
- if (icon != null && icon.getDrawable() != null) {
- ColorFilter filter = icon.getDrawable().getColorFilter();
- if (filter instanceof PorterDuffColorFilter) {
- return ((PorterDuffColorFilter) filter).getColor();
- }
- }
- return 0;
}
@Override
@@ -125,27 +58,12 @@
super.notifyContentUpdated();
// Reinspect the notification.
- resolveViews();
+ resolveTemplateViews();
}
@Override
public void setDark(boolean dark, boolean fade, long delay) {
- if (mInvertHelper != null) {
- if (fade) {
- mInvertHelper.fade(dark, delay);
- } else {
- mInvertHelper.update(dark);
- }
- }
- if (mIcon != null) {
- if (fade) {
- fadeIconColorFilter(mIcon, dark, delay);
- fadeIconAlpha(mIcon, dark, delay);
- } else {
- updateIconColorFilter(mIcon, dark);
- updateIconAlpha(mIcon, dark);
- }
- }
+ super.setDark(dark, fade, delay);
setPictureGrayscale(dark, fade, delay);
setProgressBarDark(dark, fade, delay);
}
@@ -190,111 +108,6 @@
}
}
- private void startIntensityAnimation(ValueAnimator.AnimatorUpdateListener updateListener,
- boolean dark, long delay, Animator.AnimatorListener listener) {
- float startIntensity = dark ? 0f : 1f;
- float endIntensity = dark ? 1f : 0f;
- ValueAnimator animator = ValueAnimator.ofFloat(startIntensity, endIntensity);
- animator.addUpdateListener(updateListener);
- animator.setDuration(NotificationPanelView.DOZE_ANIMATION_DURATION);
- animator.setInterpolator(mLinearOutSlowInInterpolator);
- animator.setStartDelay(delay);
- if (listener != null) {
- animator.addListener(listener);
- }
- animator.start();
- }
-
- private void fadeIconColorFilter(final ImageView target, boolean dark, long delay) {
- startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- updateIconColorFilter(target, (Float) animation.getAnimatedValue());
- }
- }, dark, delay, null /* listener */);
- }
-
- private void fadeIconAlpha(final ImageView target, boolean dark, long delay) {
- startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- float t = (float) animation.getAnimatedValue();
- target.setImageAlpha((int) (255 * (1f - t) + mIconDarkAlpha * t));
- }
- }, dark, delay, null /* listener */);
- }
-
- protected void fadeGrayscale(final ImageView target, final boolean dark, long delay) {
- startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() {
- @Override
- public void onAnimationUpdate(ValueAnimator animation) {
- updateGrayscaleMatrix((float) animation.getAnimatedValue());
- target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix));
- }
- }, dark, delay, new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- if (!dark) {
- target.setColorFilter(null);
- }
- }
- });
- }
-
- private void updateIconColorFilter(ImageView target, boolean dark) {
- updateIconColorFilter(target, dark ? 1f : 0f);
- }
-
- private void updateIconColorFilter(ImageView target, float intensity) {
- int color = interpolateColor(mColor, mIconDarkColor, intensity);
- mIconColorFilter.setColor(color);
- Drawable iconDrawable = target.getDrawable();
-
- // Also, the notification might have been modified during the animation, so background
- // might be null here.
- if (iconDrawable != null) {
- iconDrawable.mutate().setColorFilter(mIconColorFilter);
- }
- }
-
- private void updateIconAlpha(ImageView target, boolean dark) {
- target.setImageAlpha(dark ? mIconDarkAlpha : 255);
- }
-
- protected void updateGrayscale(ImageView target, boolean dark) {
- if (dark) {
- updateGrayscaleMatrix(1f);
- target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix));
- } else {
- target.setColorFilter(null);
- }
- }
-
- @Override
- public void setSubTextVisible(boolean visible) {
- if (mSubText == null) {
- return;
- }
- boolean subTextAvailable = !TextUtils.isEmpty(mSubText.getText());
- if (visible && subTextAvailable) {
- mSubText.setVisibility(View.VISIBLE);
- mSubTextDivider.setVisibility(View.VISIBLE);
- } else {
- mSubText.setVisibility(View.GONE);
- mSubTextDivider.setVisibility(View.GONE);
- }
- }
-
- @Override
- public void updateExpandability(boolean expandable, View.OnClickListener onClickListener) {
- mExpandButton.setVisibility(expandable ? View.VISIBLE : View.GONE);
- mNotificationHeader.setOnClickListener(expandable ? onClickListener : null);
- }
-
- private void updateGrayscaleMatrix(float intensity) {
- mGrayscaleColorMatrix.setSaturation(1 - intensity);
- }
-
private static int interpolateColor(int source, int target, float t) {
int aSource = Color.alpha(source);
int rSource = Color.red(source);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java
index e83ecb7..61499de 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationViewWrapper.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar;
import android.content.Context;
+import android.view.NotificationHeaderView;
import android.view.View;
/**
@@ -25,16 +26,13 @@
*/
public abstract class NotificationViewWrapper {
- private static final String TAG_BIG_MEDIA_NARROW = "bigMediaNarrow";
- private static final String TAG_MEDIA = "media";
- private static final String TAG_BIG_PICTURE = "bigPicture";
-
protected final View mView;
- private boolean mSubTextVisible = true;
public static NotificationViewWrapper wrap(Context ctx, View v) {
if (v.getId() == com.android.internal.R.id.status_bar_latest_event_content) {
return new NotificationTemplateViewWrapper(ctx, v);
+ } else if (v instanceof NotificationHeaderView) {
+ return new NotificationHeaderViewWrapper(ctx, v);
} else {
return new NotificationCustomViewWrapper(v);
}
@@ -56,9 +54,7 @@
/**
* Notifies this wrapper that the content of the view might have changed.
*/
- public void notifyContentUpdated() {
- setSubTextVisible(mSubTextVisible);
- }
+ public void notifyContentUpdated() {};
/**
* @return true if this template might need to be clipped with a round rect to make it look
@@ -69,18 +65,17 @@
}
/**
- * Change the subTextVisibility
- * @param visible Should the subtext be visible
- */
- public void setSubTextVisible(boolean visible) {
- mSubTextVisible = visible;
- }
-
- /**
* Update the appearance of the expand button.
*
* @param expandable should this view be expandable
* @param onClickListener the listener to invoke when the expand affordance is clicked on
*/
public void updateExpandability(boolean expandable, View.OnClickListener onClickListener) {}
+
+ /**
+ * @return the notification header if it exists
+ */
+ public NotificationHeaderView getNotificationHeader() {
+ return null;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationView.java
index 8f46e89..5fb6fec 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationView.java
@@ -18,23 +18,22 @@
import android.annotation.Nullable;
import android.content.Context;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
+import com.android.keyguard.AlphaOptimizedLinearLayout;
import com.android.systemui.R;
-import com.android.systemui.statusbar.AlphaOptimizedFrameLayout;
+import com.android.systemui.ViewInvertHelper;
+import com.android.systemui.statusbar.phone.NotificationPanelView;
/**
* A hybrid view which may contain information about one ore more notifications.
*/
-public class HybridNotificationView extends AlphaOptimizedFrameLayout {
+public class HybridNotificationView extends AlphaOptimizedLinearLayout {
- protected final int mSingleLineHeight;
- protected final int mStartMargin;
- protected final int mEndMargin;
protected TextView mTitleView;
protected TextView mTextView;
+ private ViewInvertHelper mInvertHelper;
public HybridNotificationView(Context context) {
this(context, null);
@@ -51,62 +50,6 @@
public HybridNotificationView(Context context, @Nullable AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- mSingleLineHeight = context.getResources().getDimensionPixelSize(
- R.dimen.notification_single_line_height);
- mStartMargin = context.getResources().getDimensionPixelSize(
- R.dimen.notification_content_margin_start);
- mEndMargin = context.getResources().getDimensionPixelSize(
- R.dimen.notification_content_margin_end);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int totalWidth = MeasureSpec.getSize(widthMeasureSpec);
- int remainingWidth = totalWidth - mStartMargin - mEndMargin;
- int newHeightSpec = MeasureSpec.makeMeasureSpec(
- MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.AT_MOST);
- int newWidthSpec = MeasureSpec.makeMeasureSpec(remainingWidth, MeasureSpec.AT_MOST);
- mTitleView.measure(newWidthSpec, newHeightSpec);
- int maxTitleLength = getResources().getDimensionPixelSize(
- R.dimen.notification_maximum_title_length);
- int titleWidth = mTitleView.getMeasuredWidth();
- int heightSpec = MeasureSpec.makeMeasureSpec(mSingleLineHeight, MeasureSpec.AT_MOST);
- boolean hasText = !TextUtils.isEmpty(mTextView.getText());
- if (titleWidth > maxTitleLength && hasText) {
- titleWidth = maxTitleLength;
- int widthSpec = MeasureSpec.makeMeasureSpec(titleWidth, MeasureSpec.EXACTLY);
- mTitleView.measure(widthSpec, heightSpec);
- }
- if (hasText) {
- remainingWidth -= titleWidth;
- int widthSpec = MeasureSpec.makeMeasureSpec(remainingWidth, MeasureSpec.AT_MOST);
- mTextView.measure(widthSpec, newHeightSpec);
- }
- setMeasuredDimension(totalWidth, mSingleLineHeight);
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- int childLeft = mStartMargin;
- int childRight = childLeft + mTitleView.getMeasuredWidth();
- int childBottom = (mSingleLineHeight + mTitleView.getMeasuredHeight()) / 2;
- int childTop = childBottom - mTitleView.getMeasuredHeight();
- int rtlLeft = transformForRtl(childLeft);
- int rtlRight = transformForRtl(childRight);
- mTitleView.layout(Math.min(rtlLeft, rtlRight), childTop, Math.max(rtlLeft, rtlRight),
- childBottom);
- childLeft = childRight;
- childRight = childLeft + mTextView.getMeasuredWidth();
- childTop = mTitleView.getTop() + mTitleView.getBaseline() - mTextView.getBaseline();
- childBottom = childTop + mTextView.getMeasuredHeight();
- rtlLeft = transformForRtl(childLeft);
- rtlRight = transformForRtl(childRight);
- mTextView.layout(Math.min(rtlLeft, rtlRight), childTop, Math.max(rtlLeft, rtlRight),
- childBottom);
- }
-
- private int transformForRtl(int left) {
- return isLayoutRtl() ? getWidth() - left : left;
}
@Override
@@ -114,6 +57,7 @@
super.onFinishInflate();
mTitleView = (TextView) findViewById(R.id.notification_title);
mTextView = (TextView) findViewById(R.id.notification_text);
+ mInvertHelper = new ViewInvertHelper(this, NotificationPanelView.DOZE_ANIMATION_DURATION);
}
public void bind(CharSequence title) {
@@ -125,4 +69,8 @@
mTextView.setText(text);
requestLayout();
}
+
+ public void setDark(boolean dark, boolean fade, long delay) {
+ mInvertHelper.setInverted(dark, fade, delay);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationViewManager.java
index 987f7b8..b8adf5b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridNotificationViewManager.java
@@ -68,9 +68,9 @@
}
private CharSequence resolveText(Notification notification) {
- CharSequence contentText = notification.extras.getCharSequence(Notification.EXTRA_BIG_TEXT);
+ CharSequence contentText = notification.extras.getCharSequence(Notification.EXTRA_TEXT);
if (contentText == null) {
- contentText = notification.extras.getCharSequence(Notification.EXTRA_TEXT);
+ contentText = notification.extras.getCharSequence(Notification.EXTRA_BIG_TEXT);
}
return contentText;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
index 1601b83..a3f404a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/BarTransitions.java
@@ -146,7 +146,8 @@
mWarning = 0xffff0000;
} else {
mOpaque = context.getColor(R.color.system_bar_background_opaque);
- mSemiTransparent = context.getColor(R.color.system_bar_background_semi_transparent);
+ mSemiTransparent = context.getColor(
+ com.android.internal.R.color.system_bar_background_semi_transparent);
mTransparent = context.getColor(R.color.system_bar_background_transparent);
mWarning = context.getColor(com.android.internal.R.color.battery_saver_mode_color);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
index d91bfb9..d35e57b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarGestureHelper.java
@@ -16,30 +16,29 @@
package com.android.systemui.statusbar.phone;
+import android.app.ActivityManager;
import android.content.Context;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
-import android.os.SystemProperties;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.ViewConfiguration;
-import android.view.WindowManager;
import com.android.systemui.R;
import com.android.systemui.RecentsComponent;
import com.android.systemui.stackdivider.Divider;
-import com.android.systemui.statusbar.BaseStatusBar;
+import com.android.systemui.tuner.TunerService;
import static android.view.WindowManager.*;
/**
* Class to detect gestures on the navigation bar.
*/
-public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureListener {
+public class NavigationBarGestureHelper extends GestureDetector.SimpleOnGestureListener
+ implements TunerService.Tunable {
- private static final String DOCK_WINDOW_GESTURE_ENABLED_PROP = "persist.dock_gesture_enabled";
+ private static final String KEY_DOCK_WINDOW_GESTURE = "overview_nav_bar_gesture";
/**
* When dragging from the navigation bar, we drag in recents.
@@ -53,6 +52,7 @@
private RecentsComponent mRecentsComponent;
private Divider mDivider;
+ private Context mContext;
private boolean mIsVertical;
private boolean mIsRTL;
@@ -69,13 +69,14 @@
private int mDragMode;
public NavigationBarGestureHelper(Context context) {
+ mContext = context;
ViewConfiguration configuration = ViewConfiguration.get(context);
Resources r = context.getResources();
mScrollTouchSlop = r.getDimensionPixelSize(R.dimen.navigation_bar_min_swipe_distance);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
mMinFlingVelocity = configuration.getScaledMinimumFlingVelocity();
mTaskSwitcherDetector = new GestureDetector(context, this);
- mDockWindowEnabled = SystemProperties.getBoolean(DOCK_WINDOW_GESTURE_ENABLED_PROP, false);
+ TunerService.get(context).addTunable(this, KEY_DOCK_WINDOW_GESTURE);
}
public void setComponents(RecentsComponent recentsComponent, Divider divider) {
@@ -172,6 +173,7 @@
== DOCKED_INVALID) {
mDragMode = calculateDragMode();
Rect initialBounds = null;
+ int createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
if (mDragMode == DRAG_MODE_DIVIDER) {
initialBounds = new Rect();
mDivider.getView().calculateBoundsForPosition(mIsVertical
@@ -181,8 +183,12 @@
? DOCKED_TOP
: DOCKED_LEFT,
initialBounds);
+ } else if (mDragMode == DRAG_MODE_RECENTS && mTouchDownX
+ < mContext.getResources().getDisplayMetrics().widthPixels / 2) {
+ createMode = ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
}
- mRecentsComponent.dockTopTask(mDragMode == DRAG_MODE_RECENTS, initialBounds);
+ mRecentsComponent.dockTopTask(mDragMode == DRAG_MODE_RECENTS, createMode,
+ initialBounds);
if (mDragMode == DRAG_MODE_DIVIDER) {
mDivider.getView().startDragging();
}
@@ -259,4 +265,14 @@
}
return true;
}
+
+ @Override
+ public void onTuningChanged(String key, String newValue) {
+ switch (key) {
+ case KEY_DOCK_WINDOW_GESTURE:
+ mDockWindowEnabled = (newValue == null) ||
+ (Integer.parseInt(newValue) != 0);
+ break;
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
index 08da0d3..f6fc259 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -21,6 +21,7 @@
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.NotificationData;
+import com.android.systemui.statusbar.StatusBarState;
import java.util.HashMap;
import java.util.HashSet;
@@ -146,6 +147,20 @@
return !group.children.isEmpty();
}
+ public void setStatusBarState(int newState) {
+ if (mBarState == newState) {
+ return;
+ }
+ mBarState = newState;
+ if (mBarState == StatusBarState.KEYGUARD) {
+ for (NotificationGroup group : mGroupMap.values()) {
+ if (group.expanded) {
+ setGroupExpanded(group, false);
+ }
+ }
+ }
+ }
+
/**
* @return whether a given notification is a child in a group which has a summary
*/
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 c0e3ec1..6a2b32d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -44,7 +44,6 @@
import android.view.animation.PathInterpolator;
import android.widget.FrameLayout;
import android.widget.TextView;
-
import com.android.internal.logging.MetricsLogger;
import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.DejankUtils;
@@ -65,7 +64,6 @@
import com.android.systemui.statusbar.policy.KeyguardUserSwitcher;
import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.stack.StackStateAnimator;
-import com.android.systemui.tuner.TunerService;
import java.util.List;
@@ -73,7 +71,7 @@
ExpandableView.OnHeightChangedListener, ObservableScrollView.Listener,
View.OnClickListener, NotificationStackScrollLayout.OnOverscrollTopChangedListener,
KeyguardAffordanceHelper.Callback, NotificationStackScrollLayout.OnEmptySpaceClickListener,
- HeadsUpManager.OnHeadsUpChangedListener, TunerService.Tunable {
+ HeadsUpManager.OnHeadsUpChangedListener {
private static final boolean DEBUG = false;
@@ -221,13 +219,10 @@
private final Interpolator mTouchResponseInterpolator =
new PathInterpolator(0.3f, 0f, 0.1f, 1f);
- private boolean mNewQs;
-
public NotificationPanelView(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(!DEBUG);
mFalsingManager = FalsingManager.getInstance(context);
- TunerService.get(context).addTunable(this, QSPanel.QS_THE_NEW_QS);
}
public void setStatusBar(PhoneStatusBar bar) {
@@ -235,26 +230,10 @@
}
@Override
- public void onTuningChanged(String key, String newValue) {
- if (QSPanel.QS_THE_NEW_QS.equals(key)) {
- boolean b = newValue != null && Integer.parseInt(newValue) != 0;
- if (mNewQs != b) {
- if (mHeader != null) {
- // We are too late, no good way to re-initialize yet, just die and come back up.
- android.os.Process.killProcess(android.os.Process.myPid());
- } else {
- mNewQs = b;
- }
- }
- }
- }
-
- @Override
protected void onFinishInflate() {
super.onFinishInflate();
ViewStub stub = (ViewStub) findViewById(R.id.status_bar_header);
- stub.setLayoutResource(mNewQs
- ? R.layout.quick_status_bar_expanded_header : R.layout.status_bar_expanded_header);
+ stub.setLayoutResource(R.layout.quick_status_bar_expanded_header);
mHeader = (BaseStatusBarHeader) stub.inflate();
mHeader.setOnClickListener(this);
mKeyguardStatusBar = (KeyguardStatusBarView) findViewById(R.id.keyguard_header);
@@ -955,15 +934,7 @@
mQsTracking = false;
mTrackingPointer = -1;
trackMovement(event);
- float fraction = getQsExpansionFraction();
- if ((fraction != 0f || y >= mInitialTouchY)
- && (fraction != 1f || y <= mInitialTouchY)) {
- flingQsWithCurrentVelocity(y,
- event.getActionMasked() == MotionEvent.ACTION_CANCEL);
- } else {
- logQsSwipeDown(y);
- mScrollYOverride = -1;
- }
+ flingQsWithCurrentVelocity(y, event.getActionMasked() == MotionEvent.ACTION_CANCEL);
if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 05660ec..181e6aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -25,7 +25,6 @@
import android.app.IActivityManager;
import android.app.Notification;
import android.app.PendingIntent;
-import android.app.RemoteInput;
import android.app.StatusBarManager;
import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks2;
@@ -1134,7 +1133,9 @@
@Override
public boolean onLongClick(View v) {
if (mRecents != null) {
- mRecents.dockTopTask(false /* draggingInRecents */, null /* initialBounds */);
+ mRecents.dockTopTask(false /* draggingInRecents */,
+ ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT,
+ null /* initialBounds */);
return true;
}
return false;
@@ -2232,6 +2233,10 @@
mHandler.post(mAnimateCollapsePanels);
}
+ public void postAnimateOpenPanels() {
+ mHandler.sendEmptyMessage(MSG_OPEN_SETTINGS_PANEL);
+ }
+
public void animateCollapsePanels(int flags) {
animateCollapsePanels(flags, false /* force */, false /* delayed */,
1.0f /* speedUpFactor */);
@@ -2487,12 +2492,14 @@
// update status bar mode
final int sbMode = computeBarMode(oldVal, newVal, mStatusBarView.getBarTransitions(),
- View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT);
+ View.STATUS_BAR_TRANSIENT, View.STATUS_BAR_TRANSLUCENT,
+ View.STATUS_BAR_TRANSPARENT);
// update navigation bar mode
final int nbMode = mNavigationBarView == null ? -1 : computeBarMode(
oldVal, newVal, mNavigationBarView.getBarTransitions(),
- View.NAVIGATION_BAR_TRANSIENT, View.NAVIGATION_BAR_TRANSLUCENT);
+ View.NAVIGATION_BAR_TRANSIENT, View.NAVIGATION_BAR_TRANSLUCENT,
+ View.NAVIGATION_BAR_TRANSPARENT);
final boolean sbModeChanged = sbMode != -1;
final boolean nbModeChanged = nbMode != -1;
boolean checkBarModes = false;
@@ -2543,21 +2550,21 @@
}
private int computeBarMode(int oldVis, int newVis, BarTransitions transitions,
- int transientFlag, int translucentFlag) {
- final int oldMode = barMode(oldVis, transientFlag, translucentFlag);
- final int newMode = barMode(newVis, transientFlag, translucentFlag);
+ int transientFlag, int translucentFlag, int transparentFlag) {
+ final int oldMode = barMode(oldVis, transientFlag, translucentFlag, transparentFlag);
+ final int newMode = barMode(newVis, transientFlag, translucentFlag, transparentFlag);
if (oldMode == newMode) {
return -1; // no mode change
}
return newMode;
}
- private int barMode(int vis, int transientFlag, int translucentFlag) {
- int lightsOutTransparent = View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_TRANSPARENT;
+ private int barMode(int vis, int transientFlag, int translucentFlag, int transparentFlag) {
+ int lightsOutTransparent = View.SYSTEM_UI_FLAG_LOW_PROFILE | transparentFlag;
return (vis & transientFlag) != 0 ? MODE_SEMI_TRANSPARENT
: (vis & translucentFlag) != 0 ? MODE_TRANSLUCENT
: (vis & lightsOutTransparent) == lightsOutTransparent ? MODE_LIGHTS_OUT_TRANSPARENT
- : (vis & View.SYSTEM_UI_TRANSPARENT) != 0 ? MODE_TRANSPARENT
+ : (vis & transparentFlag) != 0 ? MODE_TRANSPARENT
: (vis & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0 ? MODE_LIGHTS_OUT
: MODE_OPAQUE;
}
@@ -3129,10 +3136,6 @@
mNaturalBarHeight = res.getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
- mRowMinHeightLegacy = res.getDimensionPixelSize(R.dimen.notification_min_height_legacy);
- mRowMinHeight = res.getDimensionPixelSize(R.dimen.notification_min_height);
- mRowMaxHeight = res.getDimensionPixelSize(R.dimen.notification_max_height);
-
mMaxAllowedKeyguardNotifications = res.getInteger(R.integer.keyguard_max_notification_count);
if (DEBUG) Log.v(TAG, "updateResources");
@@ -3279,6 +3282,16 @@
return !isDeviceProvisioned() || (mDisabled1 & StatusBarManager.DISABLE_SEARCH) != 0;
}
+ public void postQSRunnableDismissingKeyguard(final Runnable runnable) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mLeaveOpenOnKeyguardHide = true;
+ executeRunnableDismissingKeyguard(runnable, null, false, true);
+ }
+ });
+ }
+
public void postStartActivityDismissingKeyguard(final PendingIntent intent) {
mHandler.post(new Runnable() {
@Override
@@ -3859,6 +3872,7 @@
clearNotificationEffects();
}
mState = state;
+ mGroupManager.setStatusBarState(state);
mFalsingManager.setStatusBarState(state);
mStatusBarWindowManager.setStatusBarState(state);
updateDozing();
@@ -3999,6 +4013,13 @@
}
}
+ @Override
+ public void onExpandClicked(View clickedView, boolean nowExpanded) {
+ if (mState == StatusBarState.KEYGUARD && nowExpanded) {
+ goToLockedShade(clickedView);
+ }
+ }
+
/**
* Goes back to the keyguard after hanging around in {@link StatusBarState#SHADE_LOCKED}.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 83edc96..b89cd22 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -16,11 +16,12 @@
package com.android.systemui.statusbar.phone;
+import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.AlarmManager;
import android.app.AlarmManager.AlarmClockInfo;
-import android.app.IUserSwitchObserver;
import android.app.StatusBarManager;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,7 +29,6 @@
import android.content.pm.UserInfo;
import android.media.AudioManager;
import android.os.Handler;
-import android.os.IRemoteCallback;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@@ -72,6 +72,7 @@
private final HotspotController mHotspot;
private final AlarmManager mAlarmManager;
private final UserInfoController mUserInfoController;
+ private final UserManager mUserManager;
// Assume it's all good unless we hear otherwise. We don't always seem
// to get broadcasts that it *is* there.
@@ -84,7 +85,8 @@
private int mZen;
private boolean mManagedProfileFocused = false;
- private boolean mManagedProfileIconVisible = true;
+ private boolean mManagedProfileIconVisible = false;
+ private boolean mManagedProfileInQuietMode = false;
private boolean mKeyguardVisible = true;
private BluetoothController mBluetooth;
@@ -106,6 +108,10 @@
else if (action.equals(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED)) {
updateTTY(intent);
}
+ else if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED)) {
+ updateQuietState();
+ updateManagedProfile();
+ }
}
};
@@ -127,6 +133,7 @@
mService = (StatusBarManager) context.getSystemService(Context.STATUS_BAR_SERVICE);
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
mUserInfoController = userInfoController;
+ mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
// listen for broadcasts
IntentFilter filter = new IntentFilter();
@@ -135,6 +142,7 @@
filter.addAction(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION);
filter.addAction(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
filter.addAction(TelecomManager.ACTION_CURRENT_TTY_MODE_CHANGED);
+ filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED);
mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);
// listen for user / profile change.
@@ -178,7 +186,7 @@
// managed profile
mService.setIcon(SLOT_MANAGED_PROFILE, R.drawable.stat_sys_managed_profile_status, 0,
mContext.getString(R.string.accessibility_managed_profile));
- mService.setIconVisibility(SLOT_MANAGED_PROFILE, false);
+ mService.setIconVisibility(SLOT_MANAGED_PROFILE, mManagedProfileIconVisible);
}
public void setZenMode(int zen) {
@@ -349,8 +357,18 @@
}
}
+ private void updateQuietState() {
+ mManagedProfileInQuietMode = false;
+ int currentUserId = ActivityManager.getCurrentUser();
+ for (UserInfo ui : mUserManager.getEnabledProfiles(currentUserId)) {
+ if (ui.isManagedProfile() && ui.isQuietModeEnabled()) {
+ mManagedProfileInQuietMode = true;
+ return;
+ }
+ }
+ }
+
private void profileChanged(int userId) {
- UserManager userManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
UserInfo user = null;
if (userId == UserHandle.USER_CURRENT) {
try {
@@ -359,7 +377,7 @@
// Ignore
}
} else {
- user = userManager.getUserInfo(userId);
+ user = mUserManager.getUserInfo(userId);
}
mManagedProfileFocused = user != null && user.isManagedProfile();
@@ -371,30 +389,37 @@
if (DEBUG) Log.v(TAG, "updateManagedProfile: mManagedProfileFocused: "
+ mManagedProfileFocused
+ " mKeyguardVisible: " + mKeyguardVisible);
- boolean showIcon = mManagedProfileFocused && !mKeyguardVisible;
+ final boolean showIcon;
+ if (mManagedProfileFocused && !mKeyguardVisible) {
+ showIcon = true;
+ mService.setIcon(SLOT_MANAGED_PROFILE, R.drawable.stat_sys_managed_profile_status, 0,
+ mContext.getString(R.string.accessibility_managed_profile));
+ } else if (mManagedProfileInQuietMode) {
+ showIcon = true;
+ mService.setIcon(SLOT_MANAGED_PROFILE, R.drawable.stat_sys_managed_profile_status_off, 0,
+ mContext.getString(R.string.accessibility_managed_profile));
+ } else {
+ showIcon = false;
+ }
if (mManagedProfileIconVisible != showIcon) {
mService.setIconVisibility(SLOT_MANAGED_PROFILE, showIcon);
mManagedProfileIconVisible = showIcon;
}
}
- private final IUserSwitchObserver.Stub mUserSwitchListener =
- new IUserSwitchObserver.Stub() {
+ private final SynchronousUserSwitchObserver mUserSwitchListener =
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
mUserInfoController.reloadUserInfo();
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {
updateAlarm();
profileChanged(newUserId);
+ updateQuietState();
+ updateManagedProfile();
}
@Override
@@ -430,5 +455,6 @@
if (mCurrentUserSetup == userSetup) return;
mCurrentUserSetup = userSetup;
updateAlarm();
+ updateQuietState();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
index 57c2648..7f27ba7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
@@ -16,6 +16,7 @@
package com.android.systemui.statusbar.phone;
+import android.app.ActivityManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
@@ -27,10 +28,11 @@
import android.os.Looper;
import android.os.Process;
import android.os.RemoteException;
+import android.provider.Settings;
import android.service.quicksettings.IQSService;
import android.service.quicksettings.Tile;
+import android.text.TextUtils;
import android.util.Log;
-
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
import com.android.systemui.qs.tiles.AirplaneModeTile;
@@ -45,15 +47,10 @@
import com.android.systemui.qs.tiles.HotspotTile;
import com.android.systemui.qs.tiles.IntentTile;
import com.android.systemui.qs.tiles.LocationTile;
-import com.android.systemui.qs.tiles.QAirplaneTile;
-import com.android.systemui.qs.tiles.QBluetoothTile;
-import com.android.systemui.qs.tiles.QFlashlightTile;
-import com.android.systemui.qs.tiles.QLockTile;
-import com.android.systemui.qs.tiles.QRotationLockTile;
-import com.android.systemui.qs.tiles.QWifiTile;
import com.android.systemui.qs.tiles.RotationLockTile;
import com.android.systemui.qs.tiles.UserTile;
import com.android.systemui.qs.tiles.WifiTile;
+import com.android.systemui.qs.tiles.WorkModeTile;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.CastController;
@@ -136,7 +133,7 @@
TunerService.get(mContext).addTunable(this, TILES_SETTING);
}
- PhoneStatusBar getPhoneStatusBar() {
+ public PhoneStatusBar getPhoneStatusBar() {
return mStatusBar;
}
@@ -165,6 +162,11 @@
}
@Override
+ public void startRunnableDismissingKeyguard(Runnable runnable) {
+ mStatusBar.postQSRunnableDismissingKeyguard(runnable);
+ }
+
+ @Override
public void warn(String message, Throwable t) {
// already logged
}
@@ -175,6 +177,11 @@
}
@Override
+ public void openPanels() {
+ mStatusBar.postAnimateOpenPanels();
+ }
+
+ @Override
public Looper getLooper() {
return mLooper;
}
@@ -272,8 +279,10 @@
if (DEBUG) Log.d(TAG, "Creating tile: " + tileSpec);
try {
QSTile<?> tile = createTile(tileSpec);
- tile.setTileSpec(tileSpec);
- newTiles.put(tileSpec, tile);
+ if (tile != null) {
+ tile.setTileSpec(tileSpec);
+ newTiles.put(tileSpec, tile);
+ }
} catch (Throwable t) {
Log.w(TAG, "Error creating tile for spec: " + tileSpec, t);
}
@@ -289,16 +298,33 @@
}
@Override
+ public void removeTile(String tileSpec) {
+ ArrayList<String> specs = new ArrayList<>(mTileSpecs);
+ specs.remove(tileSpec);
+ Settings.Secure.putStringForUser(mContext.getContentResolver(), TILES_SETTING,
+ TextUtils.join(",", specs), ActivityManager.getCurrentUser());
+ }
+
+ @Override
public void updateQsTile(Tile tile) throws RemoteException {
verifyCaller(tile.getComponentName().getPackageName());
CustomTile customTile = getTileForComponent(tile.getComponentName());
if (customTile != null) {
- Log.d("TileService", "Got tile update for " + tile.getComponentName());
customTile.updateState(tile);
customTile.refreshState();
}
}
+ @Override
+ public void onShowDialog(Tile tile) throws RemoteException {
+ verifyCaller(tile.getComponentName().getPackageName());
+ CustomTile customTile = getTileForComponent(tile.getComponentName());
+ if (customTile != null) {
+ customTile.onDialogShown();
+ collapsePanels();
+ }
+ }
+
private void verifyCaller(String packageName) {
try {
int uid = mContext.getPackageManager().getPackageUid(packageName,
@@ -324,12 +350,17 @@
}
public QSTile<?> createTile(String tileSpec) {
- if (tileSpec.equals("wifi")) return new WifiTile(this, false);
- else if (tileSpec.equals("bt")) return new BluetoothTile(this, false);
+ if (tileSpec.equals("wifi")) return WifiTile.isSupported(this)
+ ? new WifiTile(this) : null;
+ else if (tileSpec.equals("bt")) return BluetoothTile.isSupported(this)
+ ? new BluetoothTile(this) : null;
+ else if (tileSpec.equals("cell")) return CellularTile.isSupported(this)
+ ? new CellularTile(this) : null;
+ else if (tileSpec.equals("dnd")) return DndTile.isSupported(this)
+ ? new DndTile(this) : null;
else if (tileSpec.equals("inversion")) return new ColorInversionTile(this);
- else if (tileSpec.equals("cell")) return new CellularTile(this);
else if (tileSpec.equals("airplane")) return new AirplaneModeTile(this);
- else if (tileSpec.equals("dnd")) return new DndTile(this);
+ else if (tileSpec.equals("work")) return new WorkModeTile(this);
else if (tileSpec.equals("rotation")) return new RotationLockTile(this);
else if (tileSpec.equals("flashlight")) return new FlashlightTile(this);
else if (tileSpec.equals("location")) return new LocationTile(this);
@@ -337,16 +368,6 @@
else if (tileSpec.equals("hotspot")) return new HotspotTile(this);
else if (tileSpec.equals("user")) return new UserTile(this);
else if (tileSpec.equals("battery")) return new BatteryTile(this);
- // Detail only versions of wifi and bluetooth.
- else if (tileSpec.equals("dwifi")) return new WifiTile(this, true);
- else if (tileSpec.equals("dbt")) return new BluetoothTile(this, true);
- // Quick tiles, no text.
- else if (tileSpec.equals("qwifi")) return new QWifiTile(this);
- else if (tileSpec.equals("qbt")) return new QBluetoothTile(this);
- else if (tileSpec.equals("qairplane")) return new QAirplaneTile(this);
- else if (tileSpec.equals("qrotation")) return new QRotationLockTile(this);
- else if (tileSpec.equals("qflashlight")) return new QFlashlightTile(this);
- else if (tileSpec.equals("qlock")) return new QLockTile(this);
// Intent tiles.
else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(this,tileSpec);
else if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(this,tileSpec);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
index cc9f5c7..c4930a9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java
@@ -24,16 +24,18 @@
import android.graphics.drawable.Animatable;
import android.graphics.drawable.RippleDrawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;
-
+import com.android.keyguard.KeyguardStatusView;
import com.android.systemui.R;
import com.android.systemui.qs.QSPanel;
import com.android.systemui.qs.QSTile;
+import com.android.systemui.qs.QuickQSPanel;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.UserInfoController;
@@ -42,6 +44,7 @@
public class QuickStatusBarHeader extends BaseStatusBarHeader implements
NextAlarmController.NextAlarmChangeCallback, View.OnClickListener {
+ private static final String TAG = "QuickStatusBarHeader";
private ActivityStarter mActivityStarter;
private NextAlarmController mNextAlarmController;
private SettingsButton mSettingsButton;
@@ -63,7 +66,7 @@
private boolean mListening;
private AlarmManager.AlarmClockInfo mNextAlarm;
- private QSPanel mHeaderQsPanel;
+ private QuickQSPanel mHeaderQsPanel;
public QuickStatusBarHeader(Context context, AttributeSet attrs) {
super(context, attrs);
@@ -75,7 +78,7 @@
mExpandedGroup = (ViewGroup) findViewById(R.id.expanded_group);
- mHeaderQsPanel = (QSPanel) findViewById(R.id.quick_qs_panel);
+ mHeaderQsPanel = (QuickQSPanel) findViewById(R.id.quick_qs_panel);
mSettingsButton = (SettingsButton) findViewById(R.id.settings_button);
mSettingsContainer = findViewById(R.id.settings_button_container);
@@ -118,14 +121,15 @@
@Override
public void setExpanded(boolean expanded) {
mExpanded = expanded;
+ updateEverything();
}
@Override
public void onNextAlarmChanged(AlarmManager.AlarmClockInfo nextAlarm) {
mNextAlarm = nextAlarm;
+ Log.d(TAG, "Got alarm update " + (nextAlarm != null));
if (nextAlarm != null) {
- // TODO:...
-// mAlarmStatus.setText(KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm));
+ mAlarmStatus.setText(KeyguardStatusView.formatNextAlarm(getContext(), nextAlarm));
}
mAlarmShowing = nextAlarm != null;
updateEverything();
@@ -133,9 +137,10 @@
@Override
public void setExpansion(float headerExpansionFraction) {
- float offset = getHeight() * headerExpansionFraction;
- mExpandedGroup.setTranslationY(offset - getHeight());
- mHeaderQsPanel.setTranslationY(offset);
+ mExpandedGroup.setAlpha(headerExpansionFraction);
+ mExpandedGroup.setVisibility(headerExpansionFraction > 0 ? View.VISIBLE : View.INVISIBLE);
+ mHeaderQsPanel.setAlpha(1 - headerExpansionFraction);
+ mHeaderQsPanel.setVisibility(headerExpansionFraction < 1 ? View.VISIBLE : View.INVISIBLE);
}
public void setListening(boolean listening) {
@@ -153,7 +158,7 @@
}
private void updateVisibilities() {
- mAlarmStatus.setVisibility(mExpanded && mAlarmShowing ? View.VISIBLE : View.GONE);
+ mAlarmStatus.setVisibility(mAlarmShowing ? View.VISIBLE : View.GONE);
mQsDetailHeader.setVisibility(mExpanded && mShowingDetail ? View.VISIBLE : View.INVISIBLE);
mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
TunerService.isTunerEnabled(mContext) ? View.VISIBLE : View.INVISIBLE);
@@ -161,8 +166,10 @@
private void updateListeners() {
if (mListening) {
+ Log.d(TAG, "Listening for Alarms");
mNextAlarmController.addStateChangedCallback(this);
} else {
+ Log.d(TAG, "Not listening for Alarms");
mNextAlarmController.removeStateChangedCallback(this);
}
}
@@ -190,7 +197,9 @@
host.getUserSwitcherController(), host.getUserInfoController(),
host.getKeyguardMonitor(), host.getSecurityController(),
host.getBatteryController());
+ mHeaderQsPanel.setQSPanelAndHeader(mQsPanel, this);
mHeaderQsPanel.setHost(myHost);
+ mHeaderQsPanel.setMaxTiles(5);
mHeaderQsPanel.setTiles(myHost.getTiles());
myHost.addCallback(new QSTile.Host.Callback() {
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
index 6cda561..3d21f44 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarHeaderView.java
@@ -59,7 +59,7 @@
*/
public class StatusBarHeaderView extends BaseStatusBarHeader implements View.OnClickListener,
BatteryController.BatteryStateChangeCallback, NextAlarmController.NextAlarmChangeCallback,
- EmergencyListener, TunerService.Tunable {
+ EmergencyListener {
private boolean mExpanded;
private boolean mListening;
@@ -234,28 +234,6 @@
updateClockCollapsedMargin();
}
- @Override
- protected void onAttachedToWindow() {
- super.onAttachedToWindow();
- TunerService.get(mContext).addTunable(this, QSPanel.QS_THE_NEW_QS);
- }
-
- @Override
- protected void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- TunerService.get(mContext).removeTunable(this);
- }
-
- @Override
- public void onTuningChanged(String key, String newValue) {
- if (QSPanel.QS_THE_NEW_QS.equals(key)) {
- mAllowExpand = newValue == null || Integer.parseInt(newValue) == 0;
- if (!mAllowExpand) {
- setExpanded(false);
- }
- }
- }
-
private void updateClockCollapsedMargin() {
Resources res = getResources();
int padding = res.getDimensionPixelSize(R.dimen.clock_collapsed_bottom_margin);
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 e00b890..b010761 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java
@@ -342,7 +342,7 @@
private void stopUserId(int id) {
try {
- ActivityManagerNative.getDefault().stopUser(id, null);
+ ActivityManagerNative.getDefault().stopUser(id, /* force= */ false, null);
} catch (RemoteException e) {
Log.e(TAG, "Couldn't stop user.", e);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
index 77a9871..2b71ce9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
@@ -23,9 +23,11 @@
import android.view.ViewGroup;
import com.android.systemui.R;
+import com.android.systemui.ViewInvertHelper;
import com.android.systemui.statusbar.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.HybridNotificationView;
import com.android.systemui.statusbar.notification.HybridNotificationViewManager;
+import com.android.systemui.statusbar.phone.NotificationPanelView;
import java.util.ArrayList;
import java.util.List;
@@ -46,9 +48,10 @@
private final List<ExpandableNotificationRow> mChildren = new ArrayList<>();
private final int mNotificationHeaderHeight;
private final int mNotificationAppearDistance;
- private final float mHeaderTopPaddingSubstraction;
+ private final int mNotificatonTopPadding;
private final HybridNotificationViewManager mHybridViewManager;
private final float mCollapsedBottompadding;
+ private ViewInvertHelper mOverflowInvertHelper;
private boolean mChildrenExpanded;
private ExpandableNotificationRow mNotificationParent;
private HybridNotificationView mGroupOverflowContainer;
@@ -78,28 +81,23 @@
mNotificationAppearDistance = getResources().getDimensionPixelSize(
R.dimen.notification_appear_distance);
mNotificationHeaderHeight = getResources().getDimensionPixelSize(
- com.android.internal.R.dimen.notification_header_height);
- mHeaderTopPaddingSubstraction = 2 * getResources().getDisplayMetrics().density;
- mCollapsedBottompadding = 10 * getResources().getDisplayMetrics().density;
+ com.android.internal.R.dimen.notification_content_margin_top);
+ mNotificatonTopPadding = getResources().getDimensionPixelSize(
+ R.dimen.notification_children_container_top_padding);
+ mCollapsedBottompadding = 11.5f * getResources().getDisplayMetrics().density;
mHybridViewManager = new HybridNotificationViewManager(getContext(), this);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = mChildren.size();
- boolean firstChild = true;
for (int i = 0; i < childCount; i++) {
View child = mChildren.get(i);
- boolean viewGone = child.getVisibility() == View.GONE;
- if (viewGone) {
+ if (child.getVisibility() == View.GONE) {
continue;
}
child.layout(0, 0, getWidth(), child.getMeasuredHeight());
- if (!firstChild) {
- mDividers.get(i - 1).layout(0, 0, getWidth(), mDividerHeight);
- } else {
- firstChild = false;
- }
+ mDividers.get(i).layout(0, 0, getWidth(), mDividerHeight);
}
if (mGroupOverflowContainer != null) {
mGroupOverflowContainer.layout(0, 0, getWidth(),
@@ -119,21 +117,17 @@
}
int newHeightSpec = MeasureSpec.makeMeasureSpec(ownMaxHeight, MeasureSpec.AT_MOST);
int dividerHeightSpec = MeasureSpec.makeMeasureSpec(mDividerHeight, MeasureSpec.EXACTLY);
- int height = mNotificationHeaderHeight;
+ int height = mNotificationHeaderHeight + mNotificatonTopPadding;
int childCount = mChildren.size();
- boolean firstChild = true;
for (int i = 0; i < childCount; i++) {
View child = mChildren.get(i);
child.measure(widthMeasureSpec, newHeightSpec);
height += child.getMeasuredHeight();
- if (!firstChild) {
- // layout the divider
- View divider = mDividers.get(i - 1);
- divider.measure(widthMeasureSpec, dividerHeightSpec);
- height += mChildPadding;
- } else {
- firstChild = false;
- }
+
+ // layout the divider
+ View divider = mDividers.get(i);
+ divider.measure(widthMeasureSpec, dividerHeightSpec);
+ height += mDividerHeight;
}
int width = MeasureSpec.getSize(widthMeasureSpec);
if (mGroupOverflowContainer != null) {
@@ -152,11 +146,11 @@
int newIndex = childIndex < 0 ? mChildren.size() : childIndex;
mChildren.add(newIndex, row);
addView(row);
- if (mChildren.size() != 1) {
- View divider = inflateDivider();
- addView(divider);
- mDividers.add(Math.max(newIndex - 1, 0), divider);
- }
+
+ View divider = inflateDivider();
+ addView(divider);
+ mDividers.add(newIndex, divider);
+
updateGroupOverflow();
}
@@ -164,10 +158,10 @@
int childIndex = mChildren.indexOf(row);
mChildren.remove(row);
removeView(row);
- if (!mDividers.isEmpty()) {
- View divider = mDividers.remove(Math.max(childIndex - 1, 0));
- removeView(divider);
- }
+
+ View divider = mDividers.remove(childIndex);
+ removeView(divider);
+
row.setSystemChildExpanded(false);
updateGroupOverflow();
}
@@ -181,12 +175,17 @@
if (hasOverflow) {
mGroupOverflowContainer = mHybridViewManager.bindFromNotificationGroup(
mGroupOverflowContainer, mChildren, lastVisibleIndex + 1);
+ if (mOverflowInvertHelper == null) {
+ mOverflowInvertHelper= new ViewInvertHelper(mGroupOverflowContainer,
+ NotificationPanelView.DOZE_ANIMATION_DURATION);
+ }
if (mGroupOverFlowState == null) {
mGroupOverFlowState = new ViewState();
}
} else if (mGroupOverflowContainer != null) {
removeView(mGroupOverflowContainer);
mGroupOverflowContainer = null;
+ mOverflowInvertHelper = null;
mGroupOverFlowState = null;
}
}
@@ -246,7 +245,10 @@
* in @param maxAllowedVisibleChildren
*/
private int getIntrinsicHeight(float maxAllowedVisibleChildren) {
- int intrinsicHeight = mNotificationHeaderHeight;;
+ int intrinsicHeight = mNotificationHeaderHeight;
+ if (mChildrenExpanded) {
+ intrinsicHeight += mNotificatonTopPadding;
+ }
int visibleChildren = 0;
int childCount = mChildren.size();
for (int i = 0; i < childCount; i++) {
@@ -254,14 +256,15 @@
break;
}
ExpandableNotificationRow child = mChildren.get(i);
- if (i == 0 && child.hasSameBgColor(mNotificationParent)) {
- intrinsicHeight -= mHeaderTopPaddingSubstraction;
- }
intrinsicHeight += child.getIntrinsicHeight();
visibleChildren++;
}
if (visibleChildren > 0) {
- intrinsicHeight += (visibleChildren - 1) * mDividerHeight;
+ if (mChildrenExpanded) {
+ intrinsicHeight += visibleChildren * mDividerHeight;
+ } else {
+ intrinsicHeight += (visibleChildren - 1) * mChildPadding;
+ }
}
if (!mChildrenExpanded) {
intrinsicHeight += mCollapsedBottompadding;
@@ -288,12 +291,9 @@
for (int i = 0; i < childCount; i++) {
ExpandableNotificationRow child = mChildren.get(i);
if (!firstChild) {
- // There's a divider
- yPosition += mChildPadding;
+ yPosition += mChildrenExpanded ? mDividerHeight : mChildPadding;
} else {
- if (child.hasSameBgColor(mNotificationParent)) {
- yPosition -= mHeaderTopPaddingSubstraction;
- }
+ yPosition += mChildrenExpanded ? mNotificatonTopPadding + mDividerHeight : 0;
firstChild = false;
}
StackViewState childState = resultState.getViewStateForView(child);
@@ -332,7 +332,7 @@
if (!likeCollapsed && (mChildrenExpanded || mNotificationParent.isUserLocked())) {
return NUMBER_OF_CHILDREN_WHEN_CHILDREN_EXPANDED;
}
- if (mNotificationParent.isExpanded()) {
+ if (mNotificationParent.isExpanded() || mNotificationParent.isHeadsUp()) {
return NUMBER_OF_CHILDREN_WHEN_SYSTEM_EXPANDED;
}
return NUMBER_OF_CHILDREN_WHEN_COLLAPSED;
@@ -340,23 +340,18 @@
public void applyState(StackScrollState state) {
int childCount = mChildren.size();
- boolean firstChild = true;
ViewState tmpState = new ViewState();
for (int i = 0; i < childCount; i++) {
ExpandableNotificationRow child = mChildren.get(i);
StackViewState viewState = state.getViewStateForView(child);
- if (!firstChild) {
- // layout the divider
- View divider = mDividers.get(i - 1);
- tmpState.initFrom(divider);
- tmpState.yTranslation = (int) (viewState.yTranslation
- - (mChildPadding + mDividerHeight) / 2.0f);
- tmpState.alpha = mChildrenExpanded && viewState.alpha != 0 ? 0.5f : 0;
- state.applyViewState(divider, tmpState);
- } else {
- firstChild = false;
- }
state.applyState(child, viewState);
+
+ // layout the divider
+ View divider = mDividers.get(i);
+ tmpState.initFrom(divider);
+ tmpState.yTranslation = viewState.yTranslation - mDividerHeight;
+ tmpState.alpha = mChildrenExpanded && viewState.alpha != 0 ? 0.5f : 0;
+ state.applyViewState(divider, tmpState);
}
if (mGroupOverflowContainer != null) {
state.applyViewState(mGroupOverflowContainer, mGroupOverFlowState);
@@ -375,61 +370,57 @@
return;
}
int childCount = mChildren.size();
- boolean firstChild = true;
StackViewState sourceState = new StackViewState();
ViewState dividerState = new ViewState();
for (int i = 0; i < childCount; i++) {
ExpandableNotificationRow child = mChildren.get(i);
StackViewState viewState = state.getViewStateForView(child);
- if (!firstChild) {
- // layout the divider
- View divider = mDividers.get(i - 1);
- dividerState.initFrom(divider);
- dividerState.yTranslation = viewState.yTranslation
- - (mChildPadding + mDividerHeight) / 2.0f + mNotificationAppearDistance;
- dividerState.alpha = 0;
- state.applyViewState(divider, dividerState);
- } else {
- firstChild = false;
- }
sourceState.copyFrom(viewState);
sourceState.alpha = 0;
sourceState.yTranslation += mNotificationAppearDistance;
state.applyState(child, sourceState);
+
+ // layout the divider
+ View divider = mDividers.get(i);
+ dividerState.initFrom(divider);
+ dividerState.yTranslation = viewState.yTranslation - mDividerHeight
+ + mNotificationAppearDistance;
+ dividerState.alpha = 0;
+ state.applyViewState(divider, dividerState);
+
}
}
public void startAnimationToState(StackScrollState state, StackStateAnimator stateAnimator,
boolean withDelays, long baseDelay, long duration) {
int childCount = mChildren.size();
- boolean firstChild = true;
ViewState tmpState = new ViewState();
- int notGoneIndex = 0;
- for (int i = 0; i < childCount; i++) {
+ int delayIndex = 0;
+ int maxAllowChildCount = getMaxAllowedVisibleChildren(true /* likeCollapsed */);
+ for (int i = childCount - 1; i >= 0; i--) {
ExpandableNotificationRow child = mChildren.get(i);
StackViewState viewState = state.getViewStateForView(child);
int difference = Math.min(StackStateAnimator.DELAY_EFFECT_MAX_INDEX_DIFFERENCE_CHILDREN,
- notGoneIndex + 1);
+ delayIndex);
long delay = withDelays
? difference * StackStateAnimator.ANIMATION_DELAY_PER_ELEMENT_EXPAND_CHILDREN
: 0;
- delay += baseDelay;
- if (!firstChild) {
- // layout the divider
- View divider = mDividers.get(i - 1);
- tmpState.initFrom(divider);
- tmpState.yTranslation = viewState.yTranslation
- - (mChildPadding + mDividerHeight) / 2.0f;
- tmpState.alpha = mChildrenExpanded && viewState.alpha != 0 ? 0.5f : 0;;
- stateAnimator.startViewAnimations(divider, tmpState, delay, duration);
- } else {
- firstChild = false;
- }
+ delay = (long) (delay * (mChildrenExpanded ? 1.0f : 0.5f) + baseDelay);
stateAnimator.startStackAnimations(child, viewState, state, -1, delay);
- notGoneIndex++;
+
+ // layout the divider
+ View divider = mDividers.get(i);
+ tmpState.initFrom(divider);
+ tmpState.yTranslation = viewState.yTranslation - mDividerHeight;
+ tmpState.alpha = mChildrenExpanded && viewState.alpha != 0 ? 0.5f : 0;
+ stateAnimator.startViewAnimations(divider, tmpState, delay, duration);
+ if (i < maxAllowChildCount) {
+ delayIndex++;
+ }
}
if (mGroupOverflowContainer != null) {
- stateAnimator.startViewAnimations(mGroupOverflowContainer, mGroupOverFlowState, -1, 0);
+ stateAnimator.startViewAnimations(mGroupOverflowContainer, mGroupOverFlowState,
+ baseDelay, duration);
}
}
@@ -463,4 +454,10 @@
public int getMinHeight() {
return getIntrinsicHeight(getMaxAllowedVisibleChildren(true /* forceCollapsed */));
}
+
+ public void setDark(boolean dark, boolean fade, long delay) {
+ if (mGroupOverflowContainer != null) {
+ mOverflowInvertHelper.setInverted(dark, fade, delay);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/tuner/QSPagingSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/QSPagingSwitch.java
index 04a51f0..d19a825 100644
--- a/packages/SystemUI/src/com/android/systemui/tuner/QSPagingSwitch.java
+++ b/packages/SystemUI/src/com/android/systemui/tuner/QSPagingSwitch.java
@@ -9,8 +9,8 @@
public class QSPagingSwitch extends TunerSwitch {
public static final String QS_PAGE_TILES =
- "dwifi,dbt,dnd,cell,battery,user,rotation,flashlight,location,"
- + "hotspot,qwifi,qbt,qlock,qflashlight,qairplane,inversion,cast";
+ "dnd,cell,battery,user,rotation,flashlight,location,"
+ + "hotspot,inversion,cast";
public QSPagingSwitch(Context context, AttributeSet attrs) {
super(context, attrs);
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
index 76b2346..2fe6648 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.net.IConnectivityManager;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.ServiceManager;
@@ -50,8 +51,8 @@
private Handler mHandler;
@Override
- protected void onResume() {
- super.onResume();
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
if (getCallingPackage() != null) {
Log.e(TAG, getCallingPackage() + " cannot start this activity");
@@ -108,11 +109,11 @@
}
@Override
- protected void onPause() {
- super.onPause();
+ protected void onDestroy() {
if (!isFinishing()) {
finish();
}
+ super.onDestroy();
}
@Override
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 11fdbb5..8cf25b3 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -3987,6 +3987,9 @@
private final Uri mDisplayDaltonizerUri = Settings.Secure.getUriFor(
Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER);
+ private final Uri mDisplayColorMatrixUri = Settings.Secure.getUriFor(
+ Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX);
+
private final Uri mHighTextContrastUri = Settings.Secure.getUriFor(
Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED);
@@ -4017,6 +4020,8 @@
contentResolver.registerContentObserver(
mDisplayDaltonizerUri, false, this, UserHandle.USER_ALL);
contentResolver.registerContentObserver(
+ mDisplayColorMatrixUri, false, this, UserHandle.USER_ALL);
+ contentResolver.registerContentObserver(
mHighTextContrastUri, false, this, UserHandle.USER_ALL);
}
@@ -4066,6 +4071,8 @@
if (readDisplayColorAdjustmentSettingsLocked(userState)) {
updateDisplayColorAdjustmentSettingsLocked(userState);
}
+ } else if (mDisplayColorMatrixUri.equals(uri)) {
+ updateDisplayColorAdjustmentSettingsLocked(userState);
} else if (mHighTextContrastUri.equals(uri)) {
if (readHighTextContrastEnabledSettingLocked(userState)) {
onUserStateChangedLocked(userState);
diff --git a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
index d0b5898..1a7de25 100644
--- a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
+++ b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
@@ -107,9 +107,24 @@
setDaltonizerMode(AccessibilityManager.DALTONIZER_DISABLED);
}
+ String matrix = Settings.Secure.getStringForUser(cr,
+ Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX, userId);
+ if (matrix != null) {
+ colorMatrix = multiply(colorMatrix, getMatrix(matrix));
+ }
+
setColorTransform(colorMatrix);
}
+ private static float[] getMatrix(String matrix) {
+ String[] strValues = matrix.split(",");
+ float[] values = new float[strValues.length];
+ for (int i = 0; i < values.length; i++) {
+ values[i] = Float.parseFloat(strValues[i]);
+ }
+ return values;
+ }
+
private static float[] multiply(float[] matrix, float[] other) {
if (matrix == null) {
return other;
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index f6af942..5f57a76 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -1233,14 +1233,6 @@
}
}
- // direct-callback alarms must be wakeup alarms (otherwise they should just be
- // posting work to a Handler)
- if (directReceiver != null) {
- if (type != RTC_WAKEUP && type != ELAPSED_REALTIME_WAKEUP) {
- throw new IllegalArgumentException("Only wakeup alarms can use AlarmReceivers");
- }
- }
-
if (workSource != null) {
getContext().enforcePermission(
android.Manifest.permission.UPDATE_DEVICE_STATS,
@@ -1363,7 +1355,7 @@
pw.print(" nowRTC="); pw.print(nowRTC);
pw.print("="); pw.print(sdf.format(new Date(nowRTC)));
- pw.print(" nowELAPSED="); TimeUtils.formatDuration(nowELAPSED, pw);
+ pw.print(" nowELAPSED="); pw.print(nowELAPSED);
pw.println();
pw.print(" mLastTimeChangeClockTime="); pw.print(mLastTimeChangeClockTime);
pw.print("="); pw.println(sdf.format(new Date(mLastTimeChangeClockTime)));
@@ -1464,6 +1456,15 @@
pw.print(" Broadcast ref count: "); pw.println(mBroadcastRefCount);
pw.println();
+ if (mInFlight.size() > 0) {
+ pw.println("Outstanding deliveries:");
+ for (int i = 0; i < mInFlight.size(); i++) {
+ pw.print(" #"); pw.print(i); pw.print(": ");
+ pw.println(mInFlight.get(i));
+ }
+ pw.println();
+ }
+
pw.print(" mAllowWhileIdleMinTime=");
TimeUtils.formatDuration(mAllowWhileIdleMinTime, pw);
pw.println();
@@ -2956,6 +2957,11 @@
// is a repeating alarm, so toss it
removeImpl(alarm.operation);
}
+ // No actual delivery was possible, so the delivery tracker's
+ // 'finished' callback won't be invoked. We also don't need
+ // to do any wakelock or stats tracking, so we have nothing
+ // left to do here but go on to the next thing.
+ return;
}
} else {
// Direct listener callback alarm
@@ -2974,6 +2980,11 @@
Slog.i(TAG, "Alarm undeliverable to listener "
+ alarm.listener.asBinder(), e);
}
+ // As in the PendingIntent.CanceledException case, delivery of the
+ // alarm was not possible, so we have no wakelock or timeout or
+ // stats management to do. It threw before we posted the delayed
+ // timeout message, so we're done here.
+ return;
}
}
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index a5cef1a..7fcedc6 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -513,33 +513,35 @@
String[] uidPackageNames = getPackagesForUid(uid);
ArrayMap<Callback, ArraySet<String>> callbackSpecs = null;
- ArrayList<Callback> callbacks = mOpModeWatchers.get(code);
- if (callbacks != null) {
- final int callbackCount = callbacks.size();
- for (int i = 0; i < callbackCount; i++) {
- Callback callback = callbacks.get(i);
- ArraySet<String> changedPackages = new ArraySet<>();
- Collections.addAll(changedPackages, uidPackageNames);
- callbackSpecs = new ArrayMap<>();
- callbackSpecs.put(callback, changedPackages);
- }
- }
-
- for (String uidPackageName : uidPackageNames) {
- callbacks = mPackageModeWatchers.get(uidPackageName);
+ synchronized (this) {
+ ArrayList<Callback> callbacks = mOpModeWatchers.get(code);
if (callbacks != null) {
- if (callbackSpecs == null) {
- callbackSpecs = new ArrayMap<>();
- }
final int callbackCount = callbacks.size();
for (int i = 0; i < callbackCount; i++) {
Callback callback = callbacks.get(i);
- ArraySet<String> changedPackages = callbackSpecs.get(callback);
- if (changedPackages == null) {
- changedPackages = new ArraySet<>();
- callbackSpecs.put(callback, changedPackages);
+ ArraySet<String> changedPackages = new ArraySet<>();
+ Collections.addAll(changedPackages, uidPackageNames);
+ callbackSpecs = new ArrayMap<>();
+ callbackSpecs.put(callback, changedPackages);
+ }
+ }
+
+ for (String uidPackageName : uidPackageNames) {
+ callbacks = mPackageModeWatchers.get(uidPackageName);
+ if (callbacks != null) {
+ if (callbackSpecs == null) {
+ callbackSpecs = new ArrayMap<>();
}
- changedPackages.add(uidPackageName);
+ final int callbackCount = callbacks.size();
+ for (int i = 0; i < callbackCount; i++) {
+ Callback callback = callbacks.get(i);
+ ArraySet<String> changedPackages = callbackSpecs.get(callback);
+ if (changedPackages == null) {
+ changedPackages = new ArraySet<>();
+ callbackSpecs.put(callback, changedPackages);
+ }
+ changedPackages.add(uidPackageName);
+ }
}
}
}
@@ -786,6 +788,9 @@
@Override
public void startWatchingMode(int op, String packageName, IAppOpsCallback callback) {
+ if (callback == null) {
+ return;
+ }
synchronized (this) {
op = (op != AppOpsManager.OP_NONE) ? AppOpsManager.opToSwitch(op) : op;
Callback cb = mModeWatchers.get(callback.asBinder());
@@ -814,6 +819,9 @@
@Override
public void stopWatchingMode(IAppOpsCallback callback) {
+ if (callback == null) {
+ return;
+ }
synchronized (this) {
Callback cb = mModeWatchers.remove(callback.asBinder());
if (cb != null) {
@@ -2051,7 +2059,7 @@
private static String[] getPackagesForUid(int uid) {
String[] packageNames = null;
try {
- packageNames= AppGlobals.getPackageManager().getPackagesForUid(uid);
+ packageNames = AppGlobals.getPackageManager().getPackagesForUid(uid);
} catch (RemoteException e) {
/* ignore - local call */
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 42dd9a8..45c1ed2 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -43,11 +43,11 @@
import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.AppOpsManager;
-import android.app.IUserSwitchObserver;
import android.app.KeyguardManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -80,7 +80,6 @@
import android.os.Handler;
import android.os.IBinder;
import android.os.IInterface;
-import android.os.IRemoteCallback;
import android.os.Message;
import android.os.Parcel;
import android.os.Process;
@@ -788,18 +787,13 @@
int userId = 0;
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId)
+ throws RemoteException {
synchronized(mMethodMap) {
switchUserLocked(newUserId);
}
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index d6c6f13..033a4b8 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -21,6 +21,8 @@
import android.app.admin.DevicePolicyManager;
import android.app.backup.BackupManager;
import android.app.trust.IStrongAuthTracker;
+import android.app.trust.ITrustManager;
+import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,6 +40,7 @@
import android.os.IBinder;
import android.os.RemoteException;
import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -621,7 +624,13 @@
byte[] hash = credentialUtil.toHash(credential, userId);
if (Arrays.equals(hash, storedHash.hash)) {
unlockKeystore(credentialUtil.adjustForKeystore(credential), userId);
- unlockUser(userId, null);
+
+ // TODO: pass through a meaningful token from gatekeeper to
+ // unlock credential keys; for now pass through a stub value to
+ // indicate that we came from a user challenge.
+ final byte[] token = String.valueOf(userId).getBytes();
+ unlockUser(userId, token);
+
// migrate credential to GateKeeper
credentialUtil.setCredential(credential, null, userId);
if (!hasChallenge) {
@@ -674,7 +683,19 @@
if (response.getResponseCode() == VerifyCredentialResponse.RESPONSE_OK) {
// credential has matched
unlockKeystore(credential, userId);
- unlockUser(userId, null);
+
+ // TODO: pass through a meaningful token from gatekeeper to
+ // unlock credential keys; for now pass through a stub value to
+ // indicate that we came from a user challenge.
+ final byte[] token = String.valueOf(userId).getBytes();
+ unlockUser(userId, token);
+
+ UserInfo info = UserManager.get(mContext).getUserInfo(userId);
+ if (LockPatternUtils.isSeparateWorkChallengeEnabled() && info.isManagedProfile()) {
+ TrustManager trustManager =
+ (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
+ trustManager.setDeviceLockedForUser(userId, false);
+ }
if (shouldReEnroll) {
credentialUtil.setCredential(credential, credential, userId);
}
diff --git a/services/core/java/com/android/server/LockSettingsStorage.java b/services/core/java/com/android/server/LockSettingsStorage.java
index eb49a78..137fa27 100644
--- a/services/core/java/com/android/server/LockSettingsStorage.java
+++ b/services/core/java/com/android/server/LockSettingsStorage.java
@@ -17,6 +17,7 @@
package com.android.server;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.widget.LockPatternUtils;
import android.content.ContentValues;
import android.content.Context;
@@ -25,9 +26,7 @@
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
-import android.os.SystemProperties;
import android.os.UserManager;
-import android.os.storage.StorageManager;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Slog;
@@ -389,7 +388,7 @@
private int getUserParentOrSelfId(int userId) {
// Device supports per user encryption, so lock is applied to the given user.
- if (StorageManager.isFileBasedEncryptionEnabled()) {
+ if (LockPatternUtils.isSeparateWorkChallengeEnabled()) {
return userId;
}
// Device uses Block Based Encryption, and the parent user's lock is used for the whole
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index bd43a71..184f890 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -57,6 +57,7 @@
import android.os.Looper;
import android.os.Message;
import android.os.ParcelFileDescriptor;
+import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -100,6 +101,7 @@
import com.android.internal.util.HexDump;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
+import com.android.internal.widget.LockPatternUtils;
import com.android.server.NativeDaemonConnector.Command;
import com.android.server.NativeDaemonConnector.SensitiveArg;
import com.android.server.pm.PackageManagerService;
@@ -174,8 +176,8 @@
}
@Override
- public void onStartUser(int userHandle) {
- mMountService.onStartUser(userHandle);
+ public void onUnlockUser(int userHandle) {
+ mMountService.onUnlockUser(userHandle);
}
@Override
@@ -285,10 +287,12 @@
*/
private final Object mLock = new Object();
+ /** Set of users that we know are unlocked. */
@GuardedBy("mLock")
- private int[] mStartedUsers = EmptyArray.INT;
+ private int[] mLocalUnlockedUsers = EmptyArray.INT;
+ /** Set of users that system knows are unlocked. */
@GuardedBy("mLock")
- private int[] mUnlockedUsers = EmptyArray.INT;
+ private int[] mSystemUnlockedUsers = EmptyArray.INT;
/** Map from disk ID to disk */
@GuardedBy("mLock")
@@ -435,6 +439,7 @@
private PackageManagerService mPms;
private final Callbacks mCallbacks;
+ private final LockPatternUtils mLockPatternUtils;
// Two connectors - mConnector & mCryptConnector
private final CountDownLatch mConnectedSignal = new CountDownLatch(2);
@@ -832,12 +837,21 @@
private void initIfReadyAndConnected() {
Slog.d(TAG, "Thinking about init, mSystemReady=" + mSystemReady
+ ", mDaemonConnected=" + mDaemonConnected);
- if (mSystemReady && mDaemonConnected && StorageManager.isFileBasedEncryptionEnabled()) {
- final List<UserInfo> users = mContext.getSystemService(UserManager.class)
- .getUsers();
+ if (mSystemReady && mDaemonConnected
+ && !StorageManager.isNativeFileBasedEncryptionEnabled()) {
+ // When booting a device without native support, make sure that our
+ // user directories are locked or unlocked based on the current
+ // emulation status.
+ final boolean initLocked = StorageManager.isEmulatedFileBasedEncryptionEnabled();
+ final List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
for (UserInfo user : users) {
try {
- mCryptConnector.execute("cryptfs", "lock_user_key", user.id);
+ if (initLocked) {
+ mCryptConnector.execute("cryptfs", "lock_user_key", user.id);
+ } else {
+ mCryptConnector.execute("cryptfs", "unlock_user_key", user.id,
+ user.serialNumber, "!");
+ }
} catch (NativeDaemonConnectorException e) {
Slog.w(TAG, "Failed to init vold", e);
}
@@ -852,9 +866,9 @@
final List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
killMediaProvider(users);
- final int[] startedUsers;
+ final int[] systemUnlockedUsers;
synchronized (mLock) {
- startedUsers = mStartedUsers;
+ systemUnlockedUsers = mSystemUnlockedUsers;
mDisks.clear();
mVolumes.clear();
@@ -869,7 +883,7 @@
for (UserInfo user : users) {
mConnector.execute("volume", "user_added", user.id, user.serialNumber);
}
- for (int userId : startedUsers) {
+ for (int userId : systemUnlockedUsers) {
mConnector.execute("volume", "user_started", userId);
}
} catch (NativeDaemonConnectorException e) {
@@ -878,8 +892,8 @@
}
}
- private void onStartUser(int userId) {
- Slog.d(TAG, "onStartUser " + userId);
+ private void onUnlockUser(int userId) {
+ Slog.d(TAG, "onUnlockUser " + userId);
// We purposefully block here to make sure that user-specific
// staging area is ready so it's ready for zygote-forked apps to
@@ -902,7 +916,7 @@
mCallbacks.notifyStorageStateChanged(userVol.getPath(), envState, envState);
}
}
- mStartedUsers = ArrayUtils.appendInt(mStartedUsers, userId);
+ mSystemUnlockedUsers = ArrayUtils.appendInt(mSystemUnlockedUsers, userId);
}
}
@@ -915,7 +929,7 @@
}
synchronized (mVolumes) {
- mStartedUsers = ArrayUtils.removeInt(mStartedUsers, userId);
+ mSystemUnlockedUsers = ArrayUtils.removeInt(mSystemUnlockedUsers, userId);
}
}
@@ -1335,7 +1349,7 @@
// Kick state changed event towards all started users. Any users
// started after this point will trigger additional
// user-specific broadcasts.
- for (int userId : mStartedUsers) {
+ for (int userId : mSystemUnlockedUsers) {
if (vol.isVisibleForRead(userId)) {
final StorageVolume userVol = vol.buildStorageVolume(mContext, userId, false);
mHandler.obtainMessage(H_VOLUME_BROADCAST, userVol).sendToTarget();
@@ -1429,6 +1443,7 @@
mContext = context;
mCallbacks = new Callbacks(FgThread.get().getLooper());
+ mLockPatternUtils = new LockPatternUtils(mContext);
// XXX: This will go away soon in favor of IMountServiceObserver
mPms = (PackageManagerService) ServiceManager.getService("package");
@@ -1923,8 +1938,16 @@
waitForReady();
if ((mask & StorageManager.DEBUG_EMULATE_FBE) != 0) {
+ if (StorageManager.isNativeFileBasedEncryptionEnabled()) {
+ throw new IllegalStateException(
+ "Emulation not available on device with native FBE");
+ }
+
final boolean emulateFbe = (flags & StorageManager.DEBUG_EMULATE_FBE) != 0;
SystemProperties.set(StorageManager.PROP_EMULATE_FBE, Boolean.toString(emulateFbe));
+
+ // Perform hard reboot to kick policy into place
+ mContext.getSystemService(PowerManager.class).reboot(null);
}
if ((mask & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0) {
@@ -2693,12 +2716,13 @@
}
@Override
- public void createUserKey(int userId, int serialNumber) {
+ public void createUserKey(int userId, int serialNumber, boolean ephemeral) {
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
waitForReady();
try {
- mCryptConnector.execute("cryptfs", "create_user_key", userId, serialNumber);
+ mCryptConnector.execute("cryptfs", "create_user_key", userId, serialNumber,
+ ephemeral ? 1 : 0);
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
@@ -2721,6 +2745,12 @@
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
waitForReady();
+ // When a user has secure lock screen, require a challenge token to
+ // actually unlock. This check is mostly in place for emulation mode.
+ if (mLockPatternUtils.isSecure(userId) && ArrayUtils.isEmpty(token)) {
+ throw new IllegalStateException("Token required to unlock secure user " + userId);
+ }
+
final String encodedToken;
if (ArrayUtils.isEmpty(token)) {
encodedToken = "!";
@@ -2736,7 +2766,7 @@
}
synchronized (mLock) {
- mUnlockedUsers = ArrayUtils.appendInt(mUnlockedUsers, userId);
+ mLocalUnlockedUsers = ArrayUtils.appendInt(mLocalUnlockedUsers, userId);
}
}
@@ -2752,7 +2782,7 @@
}
synchronized (mLock) {
- mUnlockedUsers = ArrayUtils.removeInt(mUnlockedUsers, userId);
+ mLocalUnlockedUsers = ArrayUtils.removeInt(mLocalUnlockedUsers, userId);
}
}
@@ -2760,7 +2790,7 @@
public boolean isUserKeyUnlocked(int userId) {
if (StorageManager.isFileBasedEncryptionEnabled()) {
synchronized (mLock) {
- return ArrayUtils.contains(mUnlockedUsers, userId);
+ return ArrayUtils.contains(mLocalUnlockedUsers, userId);
}
} else {
return true;
@@ -2768,13 +2798,14 @@
}
@Override
- public void prepareUserStorage(String volumeUuid, int userId, int serialNumber) {
+ public void prepareUserStorage(
+ String volumeUuid, int userId, int serialNumber, boolean ephemeral) {
enforcePermission(android.Manifest.permission.STORAGE_INTERNAL);
waitForReady();
try {
mCryptConnector.execute("cryptfs", "prepare_user_storage", escapeNull(volumeUuid),
- userId, serialNumber);
+ userId, serialNumber, ephemeral ? 1 : 0);
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
@@ -2827,21 +2858,25 @@
@Override
public StorageVolume[] getVolumeList(int uid, String packageName, int flags) {
+ final int userId = UserHandle.getUserId(uid);
final boolean forWrite = (flags & StorageManager.FLAG_FOR_WRITE) != 0;
- final ArrayList<StorageVolume> res = new ArrayList<>();
+ boolean reportUnmounted = false;
boolean foundPrimary = false;
- final int userId = UserHandle.getUserId(uid);
- final boolean reportUnmounted;
final long identity = Binder.clearCallingIdentity();
try {
- reportUnmounted = !mMountServiceInternal.hasExternalStorage(
- uid, packageName);
+ if (!mMountServiceInternal.hasExternalStorage(uid, packageName)) {
+ reportUnmounted = true;
+ }
+ if (!isUserKeyUnlocked(userId)) {
+ reportUnmounted = true;
+ }
} finally {
Binder.restoreCallingIdentity(identity);
}
+ final ArrayList<StorageVolume> res = new ArrayList<>();
synchronized (mLock) {
for (int i = 0; i < mVolumes.size(); i++) {
final VolumeInfo vol = mVolumes.valueAt(i);
@@ -3521,8 +3556,8 @@
pw.println("Primary storage UUID: " + mPrimaryStorageUuid);
pw.println("Force adoptable: " + mForceAdoptable);
pw.println();
- pw.println("Started users: " + Arrays.toString(mStartedUsers));
- pw.println("Unlocked users: " + Arrays.toString(mUnlockedUsers));
+ pw.println("Local unlocked users: " + Arrays.toString(mLocalUnlockedUsers));
+ pw.println("System unlocked users: " + Arrays.toString(mSystemUnlockedUsers));
}
synchronized (mObbMounts) {
diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java
index e6b6074..d6dbad8 100644
--- a/services/core/java/com/android/server/NativeDaemonConnector.java
+++ b/services/core/java/com/android/server/NativeDaemonConnector.java
@@ -177,6 +177,7 @@
mCallbacks.onDaemonConnected();
+ FileDescriptor[] fdList = null;
byte[] buffer = new byte[BUFFER_SIZE];
int start = 0;
@@ -186,6 +187,7 @@
loge("got " + count + " reading with start = " + start);
break;
}
+ fdList = socket.getAncillaryFileDescriptors();
// Add our starting point to the count and reset the start.
count += start;
@@ -200,8 +202,8 @@
boolean releaseWl = false;
try {
- final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(
- rawEvent);
+ final NativeDaemonEvent event =
+ NativeDaemonEvent.parseRawEvent(rawEvent, fdList);
log("RCV <- {" + event + "}");
diff --git a/services/core/java/com/android/server/NativeDaemonEvent.java b/services/core/java/com/android/server/NativeDaemonEvent.java
index 4e61c0b..e6feda3 100644
--- a/services/core/java/com/android/server/NativeDaemonEvent.java
+++ b/services/core/java/com/android/server/NativeDaemonEvent.java
@@ -19,6 +19,7 @@
import android.util.Slog;
import com.google.android.collect.Lists;
+import java.io.FileDescriptor;
import java.util.ArrayList;
/**
@@ -35,15 +36,17 @@
private final String mRawEvent;
private final String mLogMessage;
private String[] mParsed;
+ private FileDescriptor[] mFdList;
private NativeDaemonEvent(int cmdNumber, int code, String message,
- String rawEvent, String logMessage) {
+ String rawEvent, String logMessage, FileDescriptor[] fdList) {
mCmdNumber = cmdNumber;
mCode = code;
mMessage = message;
mRawEvent = rawEvent;
mLogMessage = logMessage;
mParsed = null;
+ mFdList = fdList;
}
static public final String SENSITIVE_MARKER = "{{sensitive}}";
@@ -60,6 +63,10 @@
return mMessage;
}
+ public FileDescriptor[] getFileDescriptors() {
+ return mFdList;
+ }
+
@Deprecated
public String getRawEvent() {
return mRawEvent;
@@ -127,7 +134,7 @@
* @throws IllegalArgumentException when line doesn't match format expected
* from native side.
*/
- public static NativeDaemonEvent parseRawEvent(String rawEvent) {
+ public static NativeDaemonEvent parseRawEvent(String rawEvent, FileDescriptor[] fdList) {
final String[] parsed = rawEvent.split(" ");
if (parsed.length < 2) {
throw new IllegalArgumentException("Insufficient arguments");
@@ -164,7 +171,7 @@
final String message = rawEvent.substring(skiplength);
- return new NativeDaemonEvent(cmdNumber, code, message, rawEvent, logMessage);
+ return new NativeDaemonEvent(cmdNumber, code, message, rawEvent, logMessage, fdList);
}
/**
diff --git a/services/core/java/com/android/server/SystemService.java b/services/core/java/com/android/server/SystemService.java
index e0a9ab4..ce3166d 100644
--- a/services/core/java/com/android/server/SystemService.java
+++ b/services/core/java/com/android/server/SystemService.java
@@ -133,6 +133,15 @@
public void onStartUser(int userHandle) {}
/**
+ * Called when an existing user is unlocked. This means the
+ * credential-encrypted storage for that user is now available, and
+ * encryption-aware component filtering is no longer in effect.
+ *
+ * @param userHandle The identifier of the user.
+ */
+ public void onUnlockUser(int userHandle) {}
+
+ /**
* Called when switching to a different foreground user, for system services that have
* special behavior for whichever user is currently in the foreground. This is called
* before any application processes are aware of the new user.
diff --git a/services/core/java/com/android/server/SystemServiceManager.java b/services/core/java/com/android/server/SystemServiceManager.java
index 92e6814..ecc69e9 100644
--- a/services/core/java/com/android/server/SystemServiceManager.java
+++ b/services/core/java/com/android/server/SystemServiceManager.java
@@ -165,6 +165,19 @@
}
}
+ public void unlockUser(final int userHandle) {
+ final int serviceLen = mServices.size();
+ for (int i = 0; i < serviceLen; i++) {
+ final SystemService service = mServices.get(i);
+ try {
+ service.onUnlockUser(userHandle);
+ } catch (Exception ex) {
+ Slog.wtf(TAG, "Failure reporting unlock of user " + userHandle
+ + " to service " + service.getClass().getName(), ex);
+ }
+ }
+ }
+
public void switchUser(final int userHandle) {
final int serviceLen = mServices.size();
for (int i = 0; i < serviceLen; i++) {
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index fcd56eb7..c4b4cbe 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -29,7 +29,7 @@
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
-import android.app.IUserSwitchObserver;
+import android.app.SynchronousUserSwitchObserver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -45,7 +45,6 @@
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -102,18 +101,12 @@
int userId = UserHandle.USER_SYSTEM;
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
synchronized(mSpellCheckerMap) {
switchUserLocked(newUserId);
}
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 0b67ad8..6f713cd 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -57,7 +57,6 @@
private static final boolean LOG = false;
// Enable launching of applications when entering the dock.
- private static final boolean ENABLE_LAUNCH_CAR_DOCK_APP = true;
private static final boolean ENABLE_LAUNCH_DESK_DOCK_APP = true;
final Object mLock = new Object();
@@ -76,6 +75,13 @@
private boolean mComputedNightMode;
private int mCarModeEnableFlags;
+ // flag set by resource, whether to enable Car dock launch when starting car mode.
+ private boolean mEnableCarDockLaunch = true;
+ // flag set by resource, whether to lock UI mode to the default one or not.
+ private boolean mUiModeLocked = false;
+ // flag set by resource, whether to night mode change for normal all or not.
+ private boolean mNightModeLocked = false;
+
int mCurUiMode = 0;
private int mSetUiMode = 0;
private boolean mHoldingConfiguration = false;
@@ -176,6 +182,10 @@
com.android.internal.R.integer.config_carDockKeepsScreenOn) == 1);
mDeskModeKeepsScreenOn = (res.getInteger(
com.android.internal.R.integer.config_deskDockKeepsScreenOn) == 1);
+ mEnableCarDockLaunch = res.getBoolean(
+ com.android.internal.R.bool.config_enableCarDockHomeLaunch);
+ mUiModeLocked = res.getBoolean(com.android.internal.R.bool.config_lockUiMode);
+ mNightModeLocked = res.getBoolean(com.android.internal.R.bool.config_lockDayNightMode);
final PackageManager pm = context.getPackageManager();
mTelevision = pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION)
@@ -199,6 +209,10 @@
private final IBinder mService = new IUiModeManager.Stub() {
@Override
public void enableCarMode(int flags) {
+ if (isUiModeLocked()) {
+ Slog.e(TAG, "enableCarMode while UI mode is locked");
+ return;
+ }
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -214,6 +228,10 @@
@Override
public void disableCarMode(int flags) {
+ if (isUiModeLocked()) {
+ Slog.e(TAG, "disableCarMode while UI mode is locked");
+ return;
+ }
final long ident = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
@@ -241,6 +259,13 @@
@Override
public void setNightMode(int mode) {
+ if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
+ android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
+ != PackageManager.PERMISSION_GRANTED)) {
+ Slog.e(TAG,
+ "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
+ return;
+ }
switch (mode) {
case UiModeManager.MODE_NIGHT_NO:
case UiModeManager.MODE_NIGHT_YES:
@@ -273,6 +298,20 @@
}
@Override
+ public boolean isUiModeLocked() {
+ synchronized (mLock) {
+ return mUiModeLocked;
+ }
+ }
+
+ @Override
+ public boolean isNightModeLocked() {
+ synchronized (mLock) {
+ return mNightModeLocked;
+ }
+ }
+
+ @Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
!= PackageManager.PERMISSION_GRANTED) {
@@ -293,10 +332,13 @@
pw.print(" mDockState="); pw.print(mDockState);
pw.print(" mLastBroadcastState="); pw.println(mLastBroadcastState);
pw.print(" mNightMode="); pw.print(mNightMode);
+ pw.print(" mNightModeLocked="); pw.print(mNightModeLocked);
pw.print(" mCarModeEnabled="); pw.print(mCarModeEnabled);
pw.print(" mComputedNightMode="); pw.print(mComputedNightMode);
- pw.print(" mCarModeEnableFlags="); pw.println(mCarModeEnableFlags);
+ pw.print(" mCarModeEnableFlags="); pw.print(mCarModeEnableFlags);
+ pw.print(" mEnableCarDockLaunch="); pw.println(mEnableCarDockLaunch);
pw.print(" mCurUiMode=0x"); pw.print(Integer.toHexString(mCurUiMode));
+ pw.print(" mUiModeLocked="); pw.print(mUiModeLocked);
pw.print(" mSetUiMode=0x"); pw.println(Integer.toHexString(mSetUiMode));
pw.print(" mHoldingConfiguration="); pw.print(mHoldingConfiguration);
pw.print(" mSystemReady="); pw.println(mSystemReady);
@@ -356,7 +398,9 @@
private void updateConfigurationLocked() {
int uiMode = mDefaultUiModeType;
- if (mTelevision) {
+ if (mUiModeLocked) {
+ // no-op, keeps default one
+ } else if (mTelevision) {
uiMode = Configuration.UI_MODE_TYPE_TELEVISION;
} else if (mWatch) {
uiMode = Configuration.UI_MODE_TYPE_WATCH;
@@ -460,7 +504,7 @@
} else {
String category = null;
if (mCarModeEnabled) {
- if (ENABLE_LAUNCH_CAR_DOCK_APP
+ if (mEnableCarDockLaunch
&& (enableFlags & UiModeManager.ENABLE_CAR_MODE_GO_CAR_HOME) != 0) {
category = Intent.CATEGORY_CAR_DOCK;
}
@@ -503,7 +547,7 @@
if (UiModeManager.ACTION_ENTER_CAR_MODE.equals(action)) {
// Only launch car home when car mode is enabled and the caller
// has asked us to switch to it.
- if (ENABLE_LAUNCH_CAR_DOCK_APP
+ if (mEnableCarDockLaunch
&& (enableFlags & UiModeManager.ENABLE_CAR_MODE_GO_CAR_HOME) != 0) {
category = Intent.CATEGORY_CAR_DOCK;
}
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 93eaf0e..502d61a 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -2475,6 +2475,129 @@
}
}
+ @Override
+ public void finishSession(IAccountManagerResponse response,
+ @NonNull Bundle sessionBundle,
+ boolean expectActivityLaunch,
+ Bundle appInfo) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG,
+ "finishSession: response "+ response
+ + ", expectActivityLaunch " + expectActivityLaunch
+ + ", caller's uid " + Binder.getCallingUid()
+ + ", pid " + Binder.getCallingPid());
+ }
+ if (response == null) {
+ throw new IllegalArgumentException("response is null");
+ }
+
+ // Session bundle is the encrypted bundle of the original bundle created by authenticator.
+ // Account type is added to it before encryption.
+ if (sessionBundle == null || sessionBundle.size() == 0) {
+ throw new IllegalArgumentException("sessionBundle is empty");
+ }
+
+ int userId = Binder.getCallingUserHandle().getIdentifier();
+ if (!canUserModifyAccounts(userId)) {
+ sendErrorResponse(response,
+ AccountManager.ERROR_CODE_USER_RESTRICTED,
+ "User is not allowed to add an account!");
+ showCantAddAccount(AccountManager.ERROR_CODE_USER_RESTRICTED, userId);
+ return;
+ }
+
+ final int pid = Binder.getCallingPid();
+ final int uid = Binder.getCallingUid();
+ final Bundle decryptedBundle;
+ final String accountType;
+ // First decrypt session bundle to get account type for checking permission.
+ try {
+ CryptoHelper cryptoHelper = CryptoHelper.getInstance();
+ decryptedBundle = cryptoHelper.decryptBundle(sessionBundle);
+ if (decryptedBundle == null) {
+ sendErrorResponse(
+ response,
+ AccountManager.ERROR_CODE_BAD_REQUEST,
+ "failed to decrypt session bundle");
+ return;
+ }
+ accountType = decryptedBundle.getString(AccountManager.KEY_ACCOUNT_TYPE);
+ // Account type cannot be null. This should not happen if session bundle was created
+ // properly by #StartAccountSession.
+ if (TextUtils.isEmpty(accountType)) {
+ sendErrorResponse(
+ response,
+ AccountManager.ERROR_CODE_BAD_ARGUMENTS,
+ "accountType is empty");
+ return;
+ }
+
+ // If by any chances, decryptedBundle contains colliding keys with
+ // system info
+ // such as AccountManager.KEY_ANDROID_PACKAGE_NAME required by the add account flow or
+ // update credentials flow, we should replace with the new values of the current call.
+ if (appInfo != null) {
+ decryptedBundle.putAll(appInfo);
+ }
+
+ // Add info that may be used by add account or update credentials flow.
+ decryptedBundle.putInt(AccountManager.KEY_CALLER_UID, uid);
+ decryptedBundle.putInt(AccountManager.KEY_CALLER_PID, pid);
+ } catch (GeneralSecurityException e) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.v(TAG, "Failed to decrypt session bundle!", e);
+ }
+ sendErrorResponse(
+ response,
+ AccountManager.ERROR_CODE_BAD_REQUEST,
+ "failed to decrypt session bundle");
+ return;
+ }
+
+ if (!canUserModifyAccountsForType(userId, accountType)) {
+ sendErrorResponse(
+ response,
+ AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
+ "User cannot modify accounts of this type (policy).");
+ showCantAddAccount(AccountManager.ERROR_CODE_MANAGEMENT_DISABLED_FOR_ACCOUNT_TYPE,
+ userId);
+ return;
+ }
+
+ long identityToken = clearCallingIdentity();
+ try {
+ UserAccounts accounts = getUserAccounts(userId);
+ logRecordWithUid(
+ accounts,
+ DebugDbHelper.ACTION_CALLED_ACCOUNT_SESSION_FINISH,
+ TABLE_ACCOUNTS,
+ uid);
+ new Session(
+ accounts,
+ response,
+ accountType,
+ expectActivityLaunch,
+ true /* stripAuthTokenFromResult */,
+ null /* accountName */,
+ false /* authDetailsRequired */,
+ true /* updateLastAuthenticationTime */) {
+ @Override
+ public void run() throws RemoteException {
+ mAuthenticator.finishSession(this, mAccountType, decryptedBundle);
+ }
+
+ @Override
+ protected String toDebugString(long now) {
+ return super.toDebugString(now)
+ + ", finishSession"
+ + ", accountType " + accountType;
+ }
+ }.bind();
+ } finally {
+ restoreCallingIdentity(identityToken);
+ }
+ }
+
private void showCantAddAccount(int errorCode, int userId) {
Intent cantAddAccount = new Intent(mContext, CantAddAccountActivity.class);
cantAddAccount.putExtra(CantAddAccountActivity.EXTRA_ERROR_CODE, errorCode);
@@ -3484,6 +3607,14 @@
return false;
}
+ final ActivityManager am = mContext.getSystemService(ActivityManager.class);
+ if (am.isUserRunningAndLocked(mAccounts.userId)
+ && !authenticatorInfo.componentInfo.encryptionAware) {
+ Slog.w(TAG, "Blocking binding to authenticator " + authenticatorInfo.componentName
+ + " which isn't encryption aware");
+ return false;
+ }
+
Intent intent = new Intent();
intent.setAction(AccountManager.ACTION_AUTHENTICATOR_INTENT);
intent.setComponent(authenticatorInfo.componentName);
@@ -3498,7 +3629,6 @@
return false;
}
-
return true;
}
}
@@ -3582,10 +3712,11 @@
private static String ACTION_CALLED_ACCOUNT_ADD = "action_called_account_add";
private static String ACTION_CALLED_ACCOUNT_REMOVE = "action_called_account_remove";
- // TODO: This action doesn't add account to accountdb. Account is only
- // added in finishAddAccount or finishAddAccountAsUser which may be in
- // a different user profile.
+ //This action doesn't add account to accountdb. Account is only
+ // added in finishSession which may be in a different user profile.
private static String ACTION_CALLED_START_ACCOUNT_ADD = "action_called_start_account_add";
+ private static String ACTION_CALLED_ACCOUNT_SESSION_FINISH =
+ "action_called_account_session_finish";
private static SimpleDateFormat dateFromat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 2742c65..4348913 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -1240,8 +1240,9 @@
try {
// Before going further -- if this app is not allowed to run in the
// background, then at this point we aren't going to let it period.
- if (!mAm.checkAllowBackgroundLocked(sInfo.applicationInfo.uid,
- sInfo.packageName, callingPid)) {
+ final int allowed = mAm.checkAllowBackgroundLocked(
+ sInfo.applicationInfo.uid, sInfo.packageName, callingPid);
+ if (allowed != ActivityManager.APP_START_MODE_NORMAL) {
Slog.w(TAG, "Background execution not allowed: service "
+ r.intent + " to " + name.flattenToShortString()
+ " from pid=" + callingPid + " uid=" + callingUid
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index bbf8652..e4a6f3c 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16,65 +16,9 @@
package com.android.server.am;
-import static android.Manifest.permission.INTERACT_ACROSS_USERS;
-import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
-import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-import static com.android.internal.util.XmlUtils.readBooleanAttribute;
-import static com.android.internal.util.XmlUtils.readIntAttribute;
-import static com.android.internal.util.XmlUtils.readLongAttribute;
-import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
-import static com.android.internal.util.XmlUtils.writeIntAttribute;
-import static com.android.internal.util.XmlUtils.writeLongAttribute;
-import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST;
-import static com.android.server.am.ActivityManagerDebugConfig.*;
-import static com.android.server.am.TaskRecord.INVALID_TASK_ID;
-import static com.android.server.am.TaskRecord.LOCK_TASK_AUTH_DONT_LOCK;
-import static com.android.server.am.TaskRecord.LOCK_TASK_AUTH_LAUNCHABLE_PRIV;
-import static com.android.server.am.TaskRecord.LOCK_TASK_AUTH_PINNABLE;
-import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
-import static org.xmlpull.v1.XmlPullParser.START_TAG;
-
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
-import android.Manifest;
-import android.app.AppOpsManager;
-import android.app.ApplicationThreadNative;
-import android.app.BroadcastOptions;
-import android.app.IActivityContainer;
-import android.app.IActivityContainerCallback;
-import android.app.IAppTask;
-import android.app.ITaskStackListener;
-import android.app.ProfilerInfo;
-import android.app.assist.AssistContent;
-import android.app.assist.AssistStructure;
-import android.app.usage.UsageEvents;
-import android.app.usage.UsageStatsManagerInternal;
-import android.appwidget.AppWidgetManager;
-import android.content.pm.PackageManagerInternal;
-import android.content.pm.PermissionInfo;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.graphics.Rect;
-import android.os.BatteryStats;
-import android.os.PersistableBundle;
-import android.os.PowerManager;
-import android.os.Trace;
-import android.os.TransactionTooLargeException;
-import android.os.WorkSource;
-import android.os.storage.IMountService;
-import android.os.storage.MountServiceInternal;
-import android.os.storage.StorageManager;
-import android.service.voice.IVoiceInteractionSession;
-import android.service.voice.VoiceInteractionSession;
-import android.util.ArrayMap;
-import android.util.ArraySet;
-import android.util.DebugUtils;
-import android.util.SparseIntArray;
-import android.view.Display;
-
import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.AssistUtils;
@@ -185,6 +129,7 @@
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;
@@ -305,6 +250,7 @@
import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
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.content.pm.PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.provider.Settings.Global.ALWAYS_FINISH_ACTIVITIES;
@@ -333,6 +279,7 @@
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_LRU;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_OOM_ADJ;
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PERMISSIONS_REVIEW;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_POWER_QUICK;
import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_PROCESSES;
@@ -499,9 +446,6 @@
// interaction with foreground processes.
static final long USAGE_STATS_INTERACTION_INTERVAL = 24*60*60*1000L;
- // Maximum number of users we allow to be running at a time.
- static final int MAX_RUNNING_USERS = 3;
-
// This is the amount of time we allow an app to settle after it goes into the background,
// before we start restricting what it can do.
static final int BACKGROUND_SETTLE_TIME = 1*60*1000;
@@ -1487,6 +1431,7 @@
static final int APP_BOOST_DEACTIVATE_MSG = 58;
static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG = 59;
static final int IDLE_UIDS_MSG = 60;
+ static final int SYSTEM_USER_UNLOCK_MSG = 61;
static final int FIRST_ACTIVITY_STACK_MSG = 100;
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -1989,6 +1934,10 @@
mSystemServiceManager.startUser(msg.arg1);
break;
}
+ case SYSTEM_USER_UNLOCK_MSG: {
+ mSystemServiceManager.unlockUser(msg.arg1);
+ break;
+ }
case SYSTEM_USER_CURRENT_MSG: {
mBatteryStatsService.noteEvent(
BatteryStats.HistoryItem.EVENT_USER_FOREGROUND_FINISH,
@@ -2771,57 +2720,60 @@
}
final void setFocusedActivityLocked(ActivityRecord r, String reason) {
- if (r != null && mFocusedActivity != r) {
- if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedActivityLocked: r=" + r);
- ActivityRecord last = mFocusedActivity;
- mFocusedActivity = r;
- if (r.task.taskType != ActivityRecord.HOME_ACTIVITY_TYPE
- && r.task.taskType != ActivityRecord.RECENTS_ACTIVITY_TYPE) {
- if (mCurAppTimeTracker != r.appTimeTracker) {
- // We are switching app tracking. Complete the current one.
- if (mCurAppTimeTracker != null) {
- mCurAppTimeTracker.stop();
- mHandler.obtainMessage(REPORT_TIME_TRACKER_MSG,
- mCurAppTimeTracker).sendToTarget();
- mStackSupervisor.clearOtherAppTimeTrackers(r.appTimeTracker);
- mCurAppTimeTracker = null;
- }
- if (r.appTimeTracker != null) {
- mCurAppTimeTracker = r.appTimeTracker;
- startTimeTrackingFocusedActivityLocked();
- }
- } else {
+ if (r == null || mFocusedActivity == r) {
+ return;
+ }
+
+ if (DEBUG_FOCUS) Slog.d(TAG_FOCUS, "setFocusedActivityLocked: r=" + r);
+ final ActivityRecord last = mFocusedActivity;
+ mFocusedActivity = r;
+ if (r.task.isApplicationTask()) {
+ if (mCurAppTimeTracker != r.appTimeTracker) {
+ // We are switching app tracking. Complete the current one.
+ if (mCurAppTimeTracker != null) {
+ mCurAppTimeTracker.stop();
+ mHandler.obtainMessage(
+ REPORT_TIME_TRACKER_MSG, mCurAppTimeTracker).sendToTarget();
+ mStackSupervisor.clearOtherAppTimeTrackers(r.appTimeTracker);
+ mCurAppTimeTracker = null;
+ }
+ if (r.appTimeTracker != null) {
+ mCurAppTimeTracker = r.appTimeTracker;
startTimeTrackingFocusedActivityLocked();
}
} else {
- r.appTimeTracker = null;
+ startTimeTrackingFocusedActivityLocked();
}
- if (r.task != null && r.task.voiceInteractor != null) {
- startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid);
- } else {
- finishRunningVoiceLocked();
- if (last != null && last.task.voiceSession != null) {
- // We had been in a voice interaction session, but now focused has
- // move to something different. Just finish the session, we can't
- // return to it and retain the proper state and synchronization with
- // the voice interaction service.
- finishVoiceTask(last.task.voiceSession);
- }
- }
- if (mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) {
- mWindowManager.setFocusedApp(r.appToken, true);
- }
- applyUpdateLockStateLocked(r);
- if (mFocusedActivity.userId != mLastFocusedUserId) {
- mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG);
- mHandler.sendMessage(mHandler.obtainMessage(FOREGROUND_PROFILE_CHANGED_MSG,
- mFocusedActivity.userId, 0));
- mLastFocusedUserId = mFocusedActivity.userId;
+ } else {
+ r.appTimeTracker = null;
+ }
+ if (r.task.voiceInteractor != null) {
+ startRunningVoiceLocked(r.task.voiceSession, r.info.applicationInfo.uid);
+ } else {
+ finishRunningVoiceLocked();
+ if (last != null && last.task.voiceSession != null) {
+ // We had been in a voice interaction session, but now focused has
+ // move to something different. Just finish the session, we can't
+ // return to it and retain the proper state and synchronization with
+ // the voice interaction service.
+ finishVoiceTask(last.task.voiceSession);
}
}
- EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY,
+ if (mStackSupervisor.setFocusedStack(r, reason + " setFocusedActivity")) {
+ mWindowManager.setFocusedApp(r.appToken, true);
+ }
+ applyUpdateLockStateLocked(r);
+ if (mFocusedActivity.userId != mLastFocusedUserId) {
+ mHandler.removeMessages(FOREGROUND_PROFILE_CHANGED_MSG);
+ mHandler.obtainMessage(
+ FOREGROUND_PROFILE_CHANGED_MSG, mFocusedActivity.userId, 0).sendToTarget();
+ mLastFocusedUserId = mFocusedActivity.userId;
+ }
+
+ EventLogTags.writeAmFocusedActivity(
mFocusedActivity == null ? -1 : mFocusedActivity.userId,
- mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName);
+ mFocusedActivity == null ? "NULL" : mFocusedActivity.shortComponentName,
+ reason);
}
final void clearFocusedActivity(ActivityRecord r) {
@@ -2837,7 +2789,7 @@
}
}
mFocusedActivity = null;
- EventLog.writeEvent(EventLogTags.AM_FOCUSED_ACTIVITY, -1, "NULL");
+ EventLogTags.writeAmFocusedActivity(-1, "NULL", "clearFocusedActivity");
}
}
@@ -5386,6 +5338,11 @@
removeUriPermissionsForPackageLocked(packageName, userId, true);
}
+ // Remove all zen rules created by this package; revoke it's zen access.
+ INotificationManager inm = NotificationManager.getService();
+ inm.removeAutomaticZenRules(packageName);
+ inm.setNotificationPolicyAccessGranted(packageName, false);
+
Intent intent = new Intent(Intent.ACTION_PACKAGE_DATA_CLEARED,
Uri.fromParts("package", packageName, null));
intent.putExtra(Intent.EXTRA_UID, pkgUid);
@@ -6069,6 +6026,8 @@
"No more processes in " + old.uidRecord);
enqueueUidChangeLocked(old.uidRecord, -1, UidRecord.CHANGE_GONE);
mActiveUids.remove(uid);
+ mBatteryStatsService.noteUidProcessState(uid,
+ ActivityManager.PROCESS_STATE_NONEXISTENT);
}
old.uidRecord = null;
}
@@ -6093,6 +6052,7 @@
if (DEBUG_UID_OBSERVERS) Slog.i(TAG_UID_OBSERVERS,
"Creating new process uid: " + uidRec);
mActiveUids.put(proc.uid, uidRec);
+ mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState);
enqueueUidChangeLocked(uidRec, -1, UidRecord.CHANGE_ACTIVE);
}
proc.uidRecord = uidRec;
@@ -7194,6 +7154,29 @@
}
}
+ @Override
+ public boolean inMultiWindowMode(IBinder token) {
+ synchronized(this) {
+ final ActivityRecord r = ActivityRecord.isInStackLocked(token);
+ if (r == null) {
+ return false;
+ }
+ // An activity is consider to be in multi-window mode if its task isn't fullscreen.
+ return !r.task.mFullscreen;
+ }
+ }
+
+ @Override
+ public boolean inPictureInPictureMode(IBinder token) {
+ synchronized(this) {
+ final ActivityStack stack = ActivityRecord.getStackLocked(token);
+ if (stack == null) {
+ return false;
+ }
+ return stack.mStackId == PINNED_STACK_ID;
+ }
+ }
+
// =========================================================
// PROCESS INFO
// =========================================================
@@ -7227,6 +7210,11 @@
*/
public void getProcessStatesAndOomScoresForPIDs(
/*in*/ int[] pids, /*out*/ int[] states, /*out*/ int[] scores) {
+ if (scores != null) {
+ enforceCallingPermission(android.Manifest.permission.GET_PROCESS_STATE_AND_OOM_SCORE,
+ "getProcessStatesAndOomScoresForPIDs()");
+ }
+
if (pids == null) {
throw new NullPointerException("pids");
} else if (states == null) {
@@ -7475,13 +7463,11 @@
public int getAppStartMode(int uid, String packageName) {
synchronized (this) {
- boolean bg = checkAllowBackgroundLocked(uid, packageName, -1);
- return bg ? ActivityManager.APP_START_MODE_NORMAL
- : ActivityManager.APP_START_MODE_DISABLED;
+ return checkAllowBackgroundLocked(uid, packageName, -1);
}
}
- boolean checkAllowBackgroundLocked(int uid, String packageName, int callingPid) {
+ int checkAllowBackgroundLocked(int uid, String packageName, int callingPid) {
UidRecord uidRec = mActiveUids.get(uid);
if (uidRec == null || uidRec.idle) {
if (callingPid >= 0) {
@@ -7492,15 +7478,15 @@
if (proc != null && proc.curProcState < ActivityManager.PROCESS_STATE_RECEIVER) {
// Whoever is instigating this is in the foreground, so we will allow it
// to go through.
- return true;
+ return ActivityManager.APP_START_MODE_NORMAL;
}
}
if (mAppOpsService.noteOperation(AppOpsManager.OP_RUN_IN_BACKGROUND, uid, packageName)
!= AppOpsManager.MODE_ALLOWED) {
- return false;
+ return ActivityManager.APP_START_MODE_DELAYED;
}
}
- return true;
+ return ActivityManager.APP_START_MODE_NORMAL;
}
private ProviderInfo getProviderInfoLocked(String authority, int userHandle) {
@@ -8842,7 +8828,7 @@
task.inRecents = true;
mRecentTasks.add(task);
- r.task.stack.addTask(task, false, false);
+ r.task.stack.addTask(task, false, "addAppTask");
task.setLastThumbnailLocked(thumbnail);
task.freeLastThumbnail();
@@ -11203,9 +11189,10 @@
}
}
- public void requestBugReport() {
+ public void requestBugReport(boolean progress) {
+ final String service = progress ? "bugreportplus" : "bugreport";
enforceCallingPermission(android.Manifest.permission.DUMP, "requestBugReport");
- SystemProperties.set("ctl.start", "bugreport");
+ SystemProperties.set("ctl.start", service);
}
public static long getInputDispatchingTimeoutLocked(ActivityRecord r) {
@@ -17011,6 +16998,15 @@
}
}
+ final String action = intent.getAction();
+ final boolean isProtectedBroadcast;
+ try {
+ isProtectedBroadcast = AppGlobals.getPackageManager().isProtectedBroadcast(action);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Remote exception", e);
+ return ActivityManager.BROADCAST_SUCCESS;
+ }
+
/*
* Prevent non-system code (defined here to be non-persistent
* processes) from sending protected broadcasts.
@@ -17020,49 +17016,54 @@
|| callingAppId == Process.SHELL_UID || callingAppId == Process.BLUETOOTH_UID
|| callingAppId == Process.NFC_UID || callingUid == 0) {
// Always okay.
+
+ // Yell if the system is trying to send a non-protected broadcast.
+ // The vast majority of broadcasts sent from system callers should
+ // be protected to avoid security holes, so exceptions here should
+ // be incredibly rare.
+ if (!isProtectedBroadcast
+ && !Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
+ // TODO: eventually switch over to hard throw
+ Log.wtf(TAG, "Sending non-protected broadcast " + action
+ + " from system", new Throwable());
+ }
+
} else if (callerApp == null || !callerApp.persistent) {
- try {
- if (AppGlobals.getPackageManager().isProtectedBroadcast(
- intent.getAction())) {
+ if (isProtectedBroadcast) {
+ String msg = "Permission Denial: not allowed to send broadcast "
+ + action + " from pid="
+ + callingPid + ", uid=" + callingUid;
+ Slog.w(TAG, msg);
+ throw new SecurityException(msg);
+ } else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)) {
+ // Special case for compatibility: we don't want apps to send this,
+ // but historically it has not been protected and apps may be using it
+ // to poke their own app widget. So, instead of making it protected,
+ // just limit it to the caller.
+ if (callerApp == null) {
String msg = "Permission Denial: not allowed to send broadcast "
- + intent.getAction() + " from pid="
- + callingPid + ", uid=" + callingUid;
+ + action + " from unknown caller.";
Slog.w(TAG, msg);
throw new SecurityException(msg);
- } else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(intent.getAction())) {
- // Special case for compatibility: we don't want apps to send this,
- // but historically it has not been protected and apps may be using it
- // to poke their own app widget. So, instead of making it protected,
- // just limit it to the caller.
- if (callerApp == null) {
+ } else if (intent.getComponent() != null) {
+ // They are good enough to send to an explicit component... verify
+ // it is being sent to the calling app.
+ if (!intent.getComponent().getPackageName().equals(
+ callerApp.info.packageName)) {
String msg = "Permission Denial: not allowed to send broadcast "
- + intent.getAction() + " from unknown caller.";
+ + action + " to "
+ + intent.getComponent().getPackageName() + " from "
+ + callerApp.info.packageName;
Slog.w(TAG, msg);
throw new SecurityException(msg);
- } else if (intent.getComponent() != null) {
- // They are good enough to send to an explicit component... verify
- // it is being sent to the calling app.
- if (!intent.getComponent().getPackageName().equals(
- callerApp.info.packageName)) {
- String msg = "Permission Denial: not allowed to send broadcast "
- + intent.getAction() + " to "
- + intent.getComponent().getPackageName() + " from "
- + callerApp.info.packageName;
- Slog.w(TAG, msg);
- throw new SecurityException(msg);
- }
- } else {
- // Limit broadcast to their own package.
- intent.setPackage(callerApp.info.packageName);
}
+ } else {
+ // Limit broadcast to their own package.
+ intent.setPackage(callerApp.info.packageName);
}
- } catch (RemoteException e) {
- Slog.w(TAG, "Remote exception", e);
- return ActivityManager.BROADCAST_SUCCESS;
}
}
- final String action = intent.getAction();
if (action != null) {
switch (action) {
case Intent.ACTION_UID_REMOVED:
@@ -17900,7 +17901,7 @@
if (mSupportedSystemLocales == null) {
mSupportedSystemLocales = Resources.getSystem().getAssets().getLocales();
}
- final Locale locale = values.getLocales().getBestMatch(mSupportedSystemLocales);
+ final Locale locale = values.getLocales().getFirstMatch(mSupportedSystemLocales);
SystemProperties.set("persist.sys.locale", locale.toLanguageTag());
mHandler.sendMessage(mHandler.obtainMessage(SEND_LOCALE_TO_MOUNT_DAEMON_MSG,
locale));
@@ -19494,10 +19495,6 @@
if (proc.baseProcessTracker != null) {
proc.baseProcessTracker.setState(proc.repProcState, memFactor, now, proc.pkgList);
}
- if (proc.repProcState >= 0) {
- mBatteryStatsService.noteProcessState(proc.processName, proc.info.uid,
- proc.repProcState);
- }
}
}
@@ -19997,6 +19994,7 @@
}
uidRec.setProcState = uidRec.curProcState;
enqueueUidChangeLocked(uidRec, -1, uidChange);
+ mBatteryStatsService.noteUidProcessState(uidRec.uid, uidRec.curProcState);
}
}
@@ -20424,8 +20422,8 @@
}
@Override
- public int stopUser(final int userId, final IStopUserCallback callback) {
- return mUserController.stopUser(userId, callback);
+ public int stopUser(final int userId, boolean force, final IStopUserCallback callback) {
+ return mUserController.stopUser(userId, force, callback);
}
void onUserRemovedLocked(int userId) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index ea8a12f..d215fc6 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -180,6 +180,7 @@
private boolean inHistory; // are we in the history stack?
final ActivityStackSupervisor mStackSupervisor;
boolean mStartingWindowShown = false;
+ boolean mUpdateTaskThumbnailWhenHidden;
ActivityContainer mInitialActivityContainer;
TaskDescription taskDescription; // the recents information for this activity
@@ -384,6 +385,19 @@
mSmallestSizeConfigurations = smallestSizeConfigurations;
}
+ void scheduleConfigurationChanged(Configuration config, boolean reportToActivity) {
+ if (app != null && app.thread != null) {
+ try {
+ if (DEBUG_CONFIGURATION) Slog.v(TAG, "Sending new config to " + this + " " +
+ "reportToActivity=" + reportToActivity + " and config: " + config);
+ app.thread.scheduleActivityConfigurationChanged(
+ appToken, new Configuration(config), reportToActivity);
+ } catch (RemoteException e) {
+ // If process died, whatever.
+ }
+ }
+ }
+
static class Token extends IApplicationToken.Stub {
private final WeakReference<ActivityRecord> weakActivity;
private final ActivityManagerService mService;
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index da2c8c5c..b052d17 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -24,7 +24,7 @@
import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
import static com.android.server.am.ActivityManagerDebugConfig.*;
-
+import static com.android.server.am.ActivityManagerService.LOCK_SCREEN_SHOWN;
import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
@@ -54,7 +54,6 @@
import android.app.ResultInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
-import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
@@ -73,7 +72,6 @@
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
-import android.provider.Settings;
import android.service.voice.IVoiceInteractionSession;
import android.util.EventLog;
import android.util.Slog;
@@ -147,6 +145,9 @@
// convertToTranslucent().
static final long TRANSLUCENT_CONVERSION_TIMEOUT = 2000;
+ // How many activities have to be scheduled to stop to force a stop pass.
+ private static final int MAX_STOPPING_TO_FORCE = 3;
+
enum ActivityState {
INITIALIZING,
RESUMED,
@@ -540,9 +541,8 @@
if (addIndex > 0) {
final ActivityStack topStack = mStacks.get(addIndex - 1);
- if (topStack.mStackId == PINNED_STACK_ID && topStack != this) {
- // The pinned stack is always the top most stack (always-on-top).
- // So, stack is moved just below the pinned stack.
+ if (StackId.isAlwaysOnTop(topStack.mStackId) && topStack != this) {
+ // If the top stack is always on top, we move this stack just below it.
addIndex--;
}
}
@@ -925,7 +925,7 @@
final ActivityRecord next = mStackSupervisor.topRunningActivityLocked();
if (mService.mHasRecents
&& (next == null || next.noDisplay || next.task != prev.task || uiSleeping)) {
- prev.updateThumbnailLocked(screenshotActivitiesLocked(prev), null);
+ prev.mUpdateTaskThumbnailWhenHidden = true;
}
stopFullyDrawnTraceIfNeeded();
@@ -1073,6 +1073,7 @@
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Complete pause: " + prev);
if (prev != null) {
+ final boolean wasStopping = prev.state == ActivityState.STOPPING;
prev.state = ActivityState.PAUSED;
if (prev.finishing) {
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Executing finish of activity: " + prev);
@@ -1091,21 +1092,15 @@
// the current instance before starting the new one.
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "Destroying after pause: " + prev);
destroyActivityLocked(prev, true, "pause-config");
+ } else if (wasStopping) {
+ // We are also stopping, the stop request must have gone soon after the pause.
+ // We can't clobber it, because the stop confirmation will not be handled.
+ // We don't need to schedule another stop, we only need to let it happen.
+ prev.state = ActivityState.STOPPING;
} else if (!hasVisibleBehindActivity() || mService.isSleepingOrShuttingDown()) {
// If we were visible then resumeTopActivities will release resources before
// stopping.
- mStackSupervisor.mStoppingActivities.add(prev);
- if (mStackSupervisor.mStoppingActivities.size() > 3 ||
- prev.frontOfTask && mTaskHistory.size() <= 1) {
- // If we already have a few activities waiting to stop,
- // then give up on things going idle and start clearing
- // them out. Or if r is the last of activity of the last task the stack
- // will be empty and must be cleared immediately.
- if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "To many pending stops, forcing idle");
- mStackSupervisor.scheduleIdleLocked();
- } else {
- mStackSupervisor.checkReadyForSleepLocked();
- }
+ addToStopping(prev);
}
} else {
if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "App died during pause, not stopping: " + prev);
@@ -1162,6 +1157,21 @@
mService.notifyTaskStackChangedLocked();
}
+ private void addToStopping(ActivityRecord r) {
+ mStackSupervisor.mStoppingActivities.add(r);
+ if (mStackSupervisor.mStoppingActivities.size() > MAX_STOPPING_TO_FORCE ||
+ r.frontOfTask && mTaskHistory.size() <= 1) {
+ // If we already have a few activities waiting to stop,
+ // then give up on things going idle and start clearing
+ // them out. Or if r is the last of activity of the last task the stack
+ // will be empty and must be cleared immediately.
+ if (DEBUG_PAUSE) Slog.v(TAG_PAUSE, "To many pending stops, forcing idle");
+ mStackSupervisor.scheduleIdleLocked();
+ } else {
+ mStackSupervisor.checkReadyForSleepLocked();
+ }
+ }
+
/**
* Once we know that we have asked an application to put an activity in
* the resumed state (either by launching it or explicitly telling it),
@@ -1211,6 +1221,10 @@
private void setVisible(ActivityRecord r, boolean visible) {
r.visible = visible;
+ if (!visible && r.mUpdateTaskThumbnailWhenHidden) {
+ r.updateThumbnailLocked(r.task.stack.screenshotActivitiesLocked(r), null);
+ r.mUpdateTaskThumbnailWhenHidden = false;
+ }
mWindowManager.setAppVisibility(r.appToken, visible);
final ArrayList<ActivityContainer> containers = r.mChildContainers;
for (int containerNdx = containers.size() - 1; containerNdx >= 0; --containerNdx) {
@@ -1336,6 +1350,11 @@
return false;
}
+ final boolean isLockscreenShown = mService.mLockScreenShown == LOCK_SCREEN_SHOWN;
+ if (isLockscreenShown && !StackId.isAllowedOverLockscreen(mStackId)) {
+ return false;
+ }
+
final ActivityStack focusedStack = mStackSupervisor.getFocusedStack();
final int focusedStackId = focusedStack.mStackId;
@@ -1426,16 +1445,15 @@
final void ensureActivitiesVisibleLocked(ActivityRecord starting, int configChanges,
boolean preserveWindows) {
ActivityRecord top = topRunningActivityLocked();
- if (top == null) {
- return;
- }
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "ensureActivitiesVisible behind " + top
+ " configChanges=0x" + Integer.toHexString(configChanges));
- checkTranslucentActivityWaiting(top);
+ if (top != null) {
+ checkTranslucentActivityWaiting(top);
+ }
// If the top activity is not fullscreen, then we need to
// make sure any activities under it are now visible.
- boolean aboveTop = true;
+ boolean aboveTop = top != null;
final boolean stackInvisible = !isStackVisibleLocked();
boolean behindFullscreenActivity = stackInvisible;
boolean noStackActivityResumed = (isInStackLocked(starting) == null);
@@ -1449,13 +1467,15 @@
if (r.finishing) {
continue;
}
- if (aboveTop && r != top) {
+ final boolean isTop = r == top;
+ if (aboveTop && !isTop) {
continue;
}
aboveTop = false;
// mLaunchingBehind: Activities launching behind are at the back of the task stack
// but must be drawn initially for the animation as though they were visible.
- if (!behindFullscreenActivity || r.mLaunchTaskBehind) {
+ if ((!behindFullscreenActivity || r.mLaunchTaskBehind)
+ && okToShowLocked(r)) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY,
"Make visible? " + r + " finishing=" + r.finishing
+ " state=" + r.state);
@@ -1466,7 +1486,7 @@
}
if (r.app == null || r.app.thread == null) {
- if (makeVisibleAndRestartIfNeeded(starting, configChanges, top,
+ if (makeVisibleAndRestartIfNeeded(starting, configChanges, isTop,
noStackActivityResumed, r)) {
if (activityNdx >= activities.size()) {
// Record may be removed if its process needs to restart.
@@ -1476,18 +1496,19 @@
}
}
} else if (r.visible) {
- if (alreadyVisible(r)) {
+ // If this activity is already visible, then there is nothing to do here.
+ if (handleAlreadyVisible(r)) {
noStackActivityResumed = false;
}
} else {
- becomeVisible(starting, r);
+ makeVisible(starting, r);
}
// Aggregate current change flags.
configChanges |= r.configChangeFlags;
behindFullscreenActivity = updateBehindFullscreen(stackInvisible,
behindFullscreenActivity, task, r);
} else {
- becomeInvisible(stackInvisible, behindFullscreenActivity, r);
+ makeInvisible(stackInvisible, behindFullscreenActivity, r);
}
}
if (mStackId == FREEFORM_WORKSPACE_STACK_ID) {
@@ -1518,12 +1539,12 @@
}
private boolean makeVisibleAndRestartIfNeeded(ActivityRecord starting, int configChanges,
- ActivityRecord top, boolean noStackActivityResumed, ActivityRecord r) {
+ boolean isTop, boolean noStackActivityResumed, ActivityRecord r) {
// We need to make sure the app is running if it's the top, or it is just made visible from
// invisible. If the app is already visible, it must have died while it was visible. In this
// case, we'll show the dead window but will not restart the app. Otherwise we could end up
// thrashing.
- if (r == top || !r.visible) {
+ if (isTop || !r.visible) {
// This activity needs to be visible, but isn't even running...
// get it started and resume if no other stack in this stack is resumed.
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Start and freeze screen for " + r);
@@ -1542,7 +1563,7 @@
return false;
}
- private void becomeInvisible(boolean stackInvisible, boolean behindFullscreenActivity,
+ private void makeInvisible(boolean stackInvisible, boolean behindFullscreenActivity,
ActivityRecord r) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Make invisible? " + r + " finishing="
+ r.finishing + " state=" + r.state + " stackInvisible=" + stackInvisible
@@ -1608,7 +1629,7 @@
return behindFullscreenActivity;
}
- private void becomeVisible(ActivityRecord starting, ActivityRecord r) {
+ private void makeVisible(ActivityRecord starting, ActivityRecord r) {
// This activity is not currently visible, but is running. Tell it to become visible.
r.visible = true;
if (r.state != ActivityState.RESUMED && r != starting) {
@@ -1633,8 +1654,7 @@
}
}
- private boolean alreadyVisible(ActivityRecord r) {
- // If this activity is already visible, then there is nothing else to do here.
+ private boolean handleAlreadyVisible(ActivityRecord r) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Skipping: already visible at " + r);
r.stopFreezingScreenLocked(false);
try {
@@ -2827,41 +2847,43 @@
}
private void adjustFocusedActivityLocked(ActivityRecord r, String reason) {
- if (mStackSupervisor.isFocusedStack(this) && mService.mFocusedActivity == r) {
- ActivityRecord next = topRunningActivityLocked();
- final String myReason = reason + " adjustFocus";
- if (next != r) {
- if (next != null && StackId.keepFocusInStackIfPossible(mStackId)) {
- // For freeform, docked, and pinned stacks we always keep the focus within the
- // stack as long as there is a running activity in the stack that we can adjust
- // focus to.
- mService.setFocusedActivityLocked(next, myReason);
- return;
- } else {
- final TaskRecord task = r.task;
- if (r.frontOfTask && task == topTask() && task.isOverHomeStack()) {
- // For non-fullscreen stack, we want to move the focus to the next visible
- // stack to prevent the home screen from moving to the top and obscuring
- // other visible stacks.
- if (!mFullscreen
- && adjustFocusToNextVisibleStackLocked(null, myReason)) {
- return;
- }
- // Move the home stack to the top if this stack is fullscreen or there is no
- // other visible stack.
- if (mStackSupervisor.moveHomeStackTaskToTop(
- task.getTaskToReturnTo(), myReason)) {
- // Activity focus was already adjusted. Nothing else to do...
- return;
- }
+ if (!mStackSupervisor.isFocusedStack(this) || mService.mFocusedActivity != r) {
+ return;
+ }
+
+ final ActivityRecord next = topRunningActivityLocked();
+ final String myReason = reason + " adjustFocus";
+ if (next != r) {
+ if (next != null && StackId.keepFocusInStackIfPossible(mStackId)) {
+ // For freeform, docked, and pinned stacks we always keep the focus within the
+ // stack as long as there is a running activity in the stack that we can adjust
+ // focus to.
+ mService.setFocusedActivityLocked(next, myReason);
+ return;
+ } else {
+ final TaskRecord task = r.task;
+ if (r.frontOfTask && task == topTask() && task.isOverHomeStack()) {
+ // For non-fullscreen stack, we want to move the focus to the next visible
+ // stack to prevent the home screen from moving to the top and obscuring
+ // other visible stacks.
+ if (!mFullscreen
+ && adjustFocusToNextVisibleStackLocked(null, myReason)) {
+ return;
+ }
+ // Move the home stack to the top if this stack is fullscreen or there is no
+ // other visible stack.
+ if (mStackSupervisor.moveHomeStackTaskToTop(
+ task.getTaskToReturnTo(), myReason)) {
+ // Activity focus was already adjusted. Nothing else to do...
+ return;
}
}
}
+ }
- final ActivityRecord top = mStackSupervisor.topRunningActivityLocked();
- if (top != null) {
- mService.setFocusedActivityLocked(top, myReason);
- }
+ final ActivityRecord top = mStackSupervisor.topRunningActivityLocked();
+ if (top != null) {
+ mService.setFocusedActivityLocked(top, myReason);
}
}
@@ -3155,17 +3177,7 @@
// finishing until the resumed one becomes visible.
if (mode == FINISH_AFTER_VISIBLE && r.nowVisible) {
if (!mStackSupervisor.mStoppingActivities.contains(r)) {
- mStackSupervisor.mStoppingActivities.add(r);
- if (mStackSupervisor.mStoppingActivities.size() > 3
- || r.frontOfTask && mTaskHistory.size() <= 1) {
- // If we already have a few activities waiting to stop,
- // then give up on things going idle and start clearing
- // them out. Or if r is the last of activity of the last task the stack
- // will be empty and must be cleared immediately.
- mStackSupervisor.scheduleIdleLocked();
- } else {
- mStackSupervisor.checkReadyForSleepLocked();
- }
+ addToStopping(r);
}
if (DEBUG_STATES) Slog.v(TAG_STATES,
"Moving to STOPPING: "+ r + " (finish requested)");
@@ -4093,6 +4105,9 @@
if (changes == 0 && !r.forceNewConfig) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Configuration no differences in " + r);
+ // There are no significant differences, so we won't relaunch but should still deliver
+ // the new configuration to the client process.
+ r.scheduleConfigurationChanged(taskConfig, false);
return true;
}
@@ -4115,7 +4130,8 @@
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Checking to restart " + r.info.name + ": changed=0x"
+ Integer.toHexString(changes) + ", handles=0x"
- + Integer.toHexString(r.info.getRealConfigChanged()) + ", newConfig=" + newConfig);
+ + Integer.toHexString(r.info.getRealConfigChanged()) + ", newConfig=" + newConfig
+ + ", taskConfig=" + taskConfig);
if ((changes&(~r.info.getRealConfigChanged())) != 0 || r.forceNewConfig) {
// Aha, the activity isn't handling the change, so DIE DIE DIE.
@@ -4161,15 +4177,7 @@
// NOTE: We only forward the task override configuration as the system level configuration
// changes is always sent to all processes when they happen so it can just use whatever
// system level configuration it last got.
- if (r.app != null && r.app.thread != null) {
- try {
- if (DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION, "Sending new config to " + r);
- r.app.thread.scheduleActivityConfigurationChanged(
- r.appToken, new Configuration(taskConfig));
- } catch (RemoteException e) {
- // If process died, whatever.
- }
- }
+ r.scheduleConfigurationChanged(taskConfig, true);
r.stopFreezingScreenLocked(false);
return true;
@@ -4644,8 +4652,10 @@
TaskRecord task = new TaskRecord(mService, taskId, info, intent, voiceSession,
voiceInteractor);
// add the task to stack first, mTaskPositioner might need the stack association
- addTask(task, toTop, false);
- if (!layoutTaskInStack(task, info.layout) && mBounds != null && task.mResizeable) {
+ addTask(task, toTop, "createTaskRecord");
+ final boolean isLockscreenShown = mService.mLockScreenShown == LOCK_SCREEN_SHOWN;
+ if (!layoutTaskInStack(task, info.layout) && mBounds != null && task.mResizeable
+ && !isLockscreenShown) {
task.updateOverrideConfiguration(mBounds);
}
return task;
@@ -4663,7 +4673,9 @@
return new ArrayList<>(mTaskHistory);
}
- void addTask(final TaskRecord task, final boolean toTop, boolean moving) {
+ void addTask(final TaskRecord task, final boolean toTop, String reason) {
+ final ActivityStack prevStack = preAddTask(task, reason);
+
task.stack = this;
if (toTop) {
insertTaskAtTop(task, null);
@@ -4671,18 +4683,31 @@
mTaskHistory.add(0, task);
updateTaskMovement(task, false);
}
- if (!moving && task.voiceSession != null) {
- try {
- task.voiceSession.taskStarted(task.intent, task.taskId);
- } catch (RemoteException e) {
- }
- }
+ postAddTask(task, prevStack);
}
- void positionTask(final TaskRecord task, int position, boolean moving) {
+ void positionTask(final TaskRecord task, int position) {
+ final ActivityStack prevStack = preAddTask(task, "positionTask");
task.stack = this;
insertTaskAtPosition(task, position);
- if (!moving && task.voiceSession != null) {
+ postAddTask(task, prevStack);
+ }
+
+ private ActivityStack preAddTask(TaskRecord task, String reason) {
+ final ActivityStack prevStack = task.stack;
+ if (prevStack != null && prevStack != this) {
+ prevStack.removeTask(task, reason, MOVING);
+ }
+ return prevStack;
+ }
+
+ private void postAddTask(TaskRecord task, ActivityStack prevStack) {
+ if (prevStack != null) {
+ if (prevStack != this
+ && (prevStack.mStackId == PINNED_STACK_ID || mStackId == PINNED_STACK_ID)) {
+ task.reportPictureInPictureModeChange();
+ }
+ } else if (task.voiceSession != null) {
try {
task.voiceSession.taskStarted(task.intent, task.taskId);
} catch (RemoteException e) {
@@ -4744,6 +4769,7 @@
r.setTask(task, null);
task.addActivityToTop(r);
setAppTask(r, task);
+ task.reportPictureInPictureModeChange();
setFocusAndResumeStateIfNeeded(r, wasFocused, wasResumed, "moveActivityToStack");
}
@@ -4751,7 +4777,7 @@
final Rect bounds = task.getLaunchBounds();
task.updateOverrideConfiguration(bounds);
mWindowManager.setAppTask(
- r.appToken, task.taskId, task.getLaunchBounds(), task.mOverrideConfig);
+ r.appToken, task.taskId, mStackId, task.getLaunchBounds(), task.mOverrideConfig);
mWindowManager.setTaskResizeable(task.taskId, task.mResizeable);
r.taskConfigOverride = task.mOverrideConfig;
}
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index e9e02c1..f4ba19f 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -1669,11 +1669,11 @@
}
UserInfo user = getUserInfo(userId);
- // TODO: Timeout for work challenge
- if (user.isManagedProfile() && StorageManager.isFileBasedEncryptionEnabled()) {
- KeyguardManager km = (KeyguardManager) mService.mContext
- .getSystemService(Context.KEYGUARD_SERVICE);
-
+ KeyguardManager km = (KeyguardManager) mService.mContext
+ .getSystemService(Context.KEYGUARD_SERVICE);
+ if (user.isManagedProfile()
+ && LockPatternUtils.isSeparateWorkChallengeEnabled()
+ && km.isDeviceLocked(userId)) {
IIntentSender target = mService.getIntentSenderLocked(
ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ intent },
@@ -2337,8 +2337,8 @@
// above. Go ahead and reset it.
targetStack = computeStackFocus(
sourceRecord, false /* newTask */, null /* bounds */);
- targetStack.addTask(
- task, !launchTaskBehind /* toTop */, false /* moving */);
+ targetStack.addTask(task,
+ !launchTaskBehind /* toTop */, "startActivityUnchecked");
}
}
@@ -2702,7 +2702,6 @@
Configuration config) {
if (DEBUG_ALL) Slog.v(TAG, "Activity idle: " + token);
- ArrayList<ActivityRecord> stops = null;
ArrayList<ActivityRecord> finishes = null;
ArrayList<UserState> startingUsers = null;
int NS = 0;
@@ -2756,7 +2755,7 @@
}
// Atomically retrieve all of the other things to do.
- stops = processStoppingActivitiesLocked(true);
+ final ArrayList<ActivityRecord> stops = processStoppingActivitiesLocked(true);
NS = stops != null ? stops.size() : 0;
if ((NF = mFinishingActivities.size()) > 0) {
finishes = new ArrayList<>(mFinishingActivities);
@@ -3345,7 +3344,7 @@
return false;
}
- stack.addTask(task, false, false);
+ stack.addTask(task, false, "restoreRecentTask");
if (DEBUG_RECENTS) Slog.v(TAG_RECENTS,
"Added restored task=" + task + " to stack=" + stack);
final ArrayList<ActivityRecord> activities = task.mActivities;
@@ -3382,10 +3381,7 @@
final ActivityStack stack = getStack(stackId, CREATE_IF_NEEDED, toTop);
task.mResizeable = resizeable;
mWindowManager.moveTaskToStack(task.taskId, stack.mStackId, toTop);
- if (task.stack != null) {
- task.stack.removeTask(task, reason, MOVING);
- }
- stack.addTask(task, toTop, MOVING);
+ stack.addTask(task, toTop, reason);
// If the task had focus before (or we're requested to move focus),
// move focus to the new stack.
@@ -3500,11 +3496,7 @@
mWindowManager.positionTaskInStack(
taskId, stackId, position, task.mBounds, task.mOverrideConfig);
- final boolean stackChanged = task.stack != null && task.stack != stack;
- if (stackChanged) {
- task.stack.removeTask(task, "moveTaskToStack", MOVING);
- }
- stack.positionTask(task, position, stackChanged);
+ 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);
@@ -4304,12 +4296,14 @@
mWindowManager.getStackBounds(stack.mStackId, info.bounds);
info.displayId = Display.DEFAULT_DISPLAY;
info.stackId = stack.mStackId;
+ info.userId = stack.mCurrentUser;
ArrayList<TaskRecord> tasks = stack.getAllTasks();
final int numTasks = tasks.size();
int[] taskIds = new int[numTasks];
String[] taskNames = new String[numTasks];
Rect[] taskBounds = new Rect[numTasks];
+ int[] taskUserIds = new int[numTasks];
for (int i = 0; i < numTasks; ++i) {
final TaskRecord task = tasks.get(i);
taskIds[i] = task.taskId;
@@ -4319,10 +4313,12 @@
: "unknown";
taskBounds[i] = new Rect();
mWindowManager.getTaskBounds(task.taskId, taskBounds[i]);
+ taskUserIds[i] = task.userId;
}
info.taskIds = taskIds;
info.taskNames = taskNames;
info.taskBounds = taskBounds;
+ info.taskUserIds = taskUserIds;
return info;
}
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index c7228ce..f64b803 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -272,18 +272,18 @@
}
}
- void noteProcessState(String name, int uid, int state) {
- synchronized (mStats) {
- mStats.noteProcessStateLocked(name, uid, state);
- }
- }
-
void noteProcessFinish(String name, int uid) {
synchronized (mStats) {
mStats.noteProcessFinishLocked(name, uid);
}
}
+ void noteUidProcessState(int uid, int state) {
+ synchronized (mStats) {
+ mStats.noteUidProcessStateLocked(uid, state);
+ }
+ }
+
// Public interface...
public byte[] getStatistics() {
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index b160981..1bab7b9 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -562,8 +562,9 @@
skip = true;
}
if (!skip) {
- if (!mService.checkAllowBackgroundLocked(filter.receiverList.uid, filter.packageName,
- -1)) {
+ final int allowed = mService.checkAllowBackgroundLocked(filter.receiverList.uid,
+ filter.packageName, -1);
+ if (allowed == ActivityManager.APP_START_MODE_DISABLED) {
Slog.w(TAG, "Background execution not allowed: receiving "
+ r.intent
+ " to " + filter.receiverList.app
@@ -1013,15 +1014,6 @@
skip = true;
}
if (!skip) {
- if (!mService.checkAllowBackgroundLocked(info.activityInfo.applicationInfo.uid,
- info.activityInfo.packageName, -1)) {
- Slog.w(TAG, "Background execution not allowed: receiving "
- + r.intent + " to "
- + component.flattenToShortString());
- skip = true;
- }
- }
- if (!skip) {
skip = !mService.mIntentFirewall.checkBroadcast(r.intent, r.callingUid,
r.callingPid, r.resolvedType, info.activityInfo.applicationInfo.uid);
}
@@ -1083,6 +1075,45 @@
}
}
+ // This is safe to do even if we are skipping the broadcast, and we need
+ // this information now to evaluate whether it is going to be allowed to run.
+ final int receiverUid = info.activityInfo.applicationInfo.uid;
+ // If it's a singleton, it needs to be the same app or a special app
+ if (r.callingUid != Process.SYSTEM_UID && isSingleton
+ && mService.isValidSingletonCall(r.callingUid, receiverUid)) {
+ info.activityInfo = mService.getActivityInfoForUser(info.activityInfo, 0);
+ }
+ String targetProcess = info.activityInfo.processName;
+ ProcessRecord app = mService.getProcessRecordLocked(targetProcess,
+ info.activityInfo.applicationInfo.uid, false);
+
+ if (!skip) {
+ final int allowed = mService.checkAllowBackgroundLocked(
+ info.activityInfo.applicationInfo.uid, info.activityInfo.packageName, -1);
+ if (allowed != ActivityManager.APP_START_MODE_NORMAL) {
+ // We won't allow this receiver to be launched if the app has been
+ // completely disabled from launches, or it is delayed and the broadcast
+ // was not explicitly sent to it and this would result in a new process
+ // for it being created.
+ if (allowed == ActivityManager.APP_START_MODE_DISABLED) {
+ Slog.w(TAG, "Background execution disabled: receiving "
+ + r.intent + " to "
+ + component.flattenToShortString());
+ skip = true;
+ }
+ if (((r.intent.getFlags()&Intent.FLAG_RECEIVER_EXCLUDE_BACKGROUND) != 0)
+ || (r.intent.getComponent() == null
+ && r.intent.getPackage() == null && app == null
+ && ((r.intent.getFlags()
+ & Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND) == 0))) {
+ Slog.w(TAG, "Background execution not allowed: receiving "
+ + r.intent + " to "
+ + component.flattenToShortString());
+ skip = true;
+ }
+ }
+ }
+
if (skip) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"Skipping delivery of ordered [" + mQueueName + "] "
@@ -1095,14 +1126,7 @@
}
r.state = BroadcastRecord.APP_RECEIVE;
- String targetProcess = info.activityInfo.processName;
r.curComponent = component;
- final int receiverUid = info.activityInfo.applicationInfo.uid;
- // If it's a singleton, it needs to be the same app or a special app
- if (r.callingUid != Process.SYSTEM_UID && isSingleton
- && mService.isValidSingletonCall(r.callingUid, receiverUid)) {
- info.activityInfo = mService.getActivityInfoForUser(info.activityInfo, 0);
- }
r.curReceiver = info.activityInfo;
if (DEBUG_MU && r.callingUid > UserHandle.PER_USER_RANGE) {
Slog.v(TAG_MU, "Updated broadcast record activity info for secondary user, "
@@ -1126,8 +1150,6 @@
}
// Is this receiver's application already running?
- ProcessRecord app = mService.getProcessRecordLocked(targetProcess,
- info.activityInfo.applicationInfo.uid, false);
if (app != null && app.thread != null) {
try {
app.addPackage(info.activityInfo.packageName,
diff --git a/services/core/java/com/android/server/am/BroadcastRecord.java b/services/core/java/com/android/server/am/BroadcastRecord.java
index b42bcff..1a269cf 100644
--- a/services/core/java/com/android/server/am/BroadcastRecord.java
+++ b/services/core/java/com/android/server/am/BroadcastRecord.java
@@ -188,7 +188,7 @@
if (o instanceof BroadcastFilter)
((BroadcastFilter)o).dumpBrief(pw, p2);
else if (o instanceof ResolveInfo)
- ((ResolveInfo)o).dump(printer, p2);
+ ((ResolveInfo)o).dump(printer, p2, 0);
}
}
diff --git a/services/core/java/com/android/server/am/EventLogTags.logtags b/services/core/java/com/android/server/am/EventLogTags.logtags
index 78b5f33..0397553 100644
--- a/services/core/java/com/android/server/am/EventLogTags.logtags
+++ b/services/core/java/com/android/server/am/EventLogTags.logtags
@@ -91,7 +91,7 @@
30042 am_activity_fully_drawn_time (User|1|5),(Token|1|5),(Component Name|3),(time|2|3)
# Activity focused
-30043 am_focused_activity (User|1|5),(Component Name|3)
+30043 am_focused_activity (User|1|5),(Component Name|3),(Reason|3)
# Stack focus
30044 am_focused_stack (User|1|5),(Focused Stack Id|1|5),(Last Focused Stack Id|1|5),(Reason|3)
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 1e529dab..5ee9eea 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -20,6 +20,7 @@
import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID;
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.content.Intent.FLAG_ACTIVITY_NEW_DOCUMENT;
import static android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS;
import static android.content.pm.ActivityInfo.LOCK_TASK_LAUNCH_MODE_ALWAYS;
@@ -37,6 +38,7 @@
import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_TASKS;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.am.ActivityManagerService.LOCK_SCREEN_SHOWN;
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.RECENTS_ACTIVITY_TYPE;
@@ -1261,7 +1263,8 @@
if (Objects.equals(mBounds, bounds)) {
return null;
}
- Configuration oldConfig = mOverrideConfig;
+ final Configuration oldConfig = mOverrideConfig;
+ final boolean oldFullscreen = mFullscreen;
mFullscreen = bounds == null;
if (mFullscreen) {
@@ -1295,9 +1298,43 @@
? Configuration.ORIENTATION_PORTRAIT
: Configuration.ORIENTATION_LANDSCAPE;
}
+
+ if (mFullscreen != oldFullscreen) {
+ reportMultiWindowModeChange();
+ }
+
return !mOverrideConfig.equals(oldConfig) ? mOverrideConfig : null;
}
+ private void reportMultiWindowModeChange() {
+ for (int i = mActivities.size() - 1; i >= 0; i--) {
+ final ActivityRecord r = mActivities.get(i);
+ if (r.app != null && r.app.thread != null) {
+ try {
+ // An activity is consider to be in multi-window mode if its task isn't
+ // fullscreen.
+ r.app.thread.scheduleMultiWindowModeChanged(r.appToken, !mFullscreen);
+ } catch (Exception e) {
+ Slog.e(TAG, "TaskRecord.reportMultiWindowModeChange: ", e);
+ }
+ }
+ }
+ }
+
+ void reportPictureInPictureModeChange() {
+ for (int i = mActivities.size() - 1; i >= 0; i--) {
+ final ActivityRecord r = mActivities.get(i);
+ if (r.app != null && r.app.thread != null) {
+ try {
+ r.app.thread.schedulePictureInPictureModeChanged(
+ r.appToken, stack.mStackId == PINNED_STACK_ID);
+ } catch (Exception e) {
+ Slog.e(TAG, "TaskRecord.reportMultiWindowModeChange: ", e);
+ }
+ }
+ }
+ }
+
/** Updates the task's bounds and override configuration to match what is expected for the
* input stack. */
void updateOverrideConfigurationForStack(ActivityStack inStack) {
@@ -1341,6 +1378,12 @@
/** Returns the bounds that should be used to launch this task. */
Rect getLaunchBounds() {
final int stackId = stack.mStackId;
+
+ // If we're over lockscreen, forget about stack bounds and use fullscreen.
+ if (mService.mLockScreenShown == LOCK_SCREEN_SHOWN) {
+ return null;
+ }
+
if (stack == null
|| stackId == HOME_STACK_ID
|| stackId == FULLSCREEN_WORKSPACE_STACK_ID) {
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 9c29149..62e78a4 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -18,6 +18,8 @@
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
+import static android.app.ActivityManager.USER_OP_ERROR_IS_SYSTEM;
+import static android.app.ActivityManager.USER_OP_ERROR_RELATED_USERS_CANNOT_STOP;
import static android.app.ActivityManager.USER_OP_IS_CURRENT;
import static android.app.ActivityManager.USER_OP_SUCCESS;
import static android.os.Process.SYSTEM_UID;
@@ -32,8 +34,10 @@
import static com.android.server.am.ActivityManagerService.REPORT_USER_SWITCH_MSG;
import static com.android.server.am.ActivityManagerService.SYSTEM_USER_CURRENT_MSG;
import static com.android.server.am.ActivityManagerService.SYSTEM_USER_START_MSG;
+import static com.android.server.am.ActivityManagerService.SYSTEM_USER_UNLOCK_MSG;
import static com.android.server.am.ActivityManagerService.USER_SWITCH_TIMEOUT_MSG;
+import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.AppOpsManager;
import android.app.Dialog;
@@ -56,11 +60,11 @@
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.IMountService;
import android.os.storage.StorageManager;
+import android.util.IntArray;
import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
@@ -142,7 +146,6 @@
// User 0 is the first and only user that runs at boot.
final UserState uss = new UserState(UserHandle.SYSTEM);
mStartedUsers.put(UserHandle.USER_SYSTEM, uss);
- updateUserUnlockedState(uss);
mUserLru.add(UserHandle.USER_SYSTEM);
updateStartedUserArrayLocked();
}
@@ -152,60 +155,114 @@
finishUserBoot(uss);
startProfilesLocked();
+ stopRunningUsersLocked(MAX_RUNNING_USERS);
+ }
+ }
- int num = mUserLru.size();
- int i = 0;
- while (num > MAX_RUNNING_USERS && i < mUserLru.size()) {
- Integer oldUserId = mUserLru.get(i);
- UserState oldUss = mStartedUsers.get(oldUserId);
- if (oldUss == null) {
- // Shouldn't happen, but be sane if it does.
- mUserLru.remove(i);
- num--;
- continue;
- }
- if (oldUss.mState == UserState.STATE_STOPPING
- || oldUss.mState == UserState.STATE_SHUTDOWN) {
- // This user is already stopping, doesn't count.
- num--;
- i++;
- continue;
- }
- if (oldUserId == UserHandle.USER_SYSTEM || oldUserId == mCurrentUserId) {
- // Owner/System user and current user can't be stopped. We count it as running
- // when it is not a pure system user.
- if (UserInfo.isSystemOnly(oldUserId)) {
- num--;
- }
- i++;
- continue;
- }
- // This is a user to be stopped.
- stopUserLocked(oldUserId, null);
+ void stopRunningUsersLocked(int maxRunningUsers) {
+ int num = mUserLru.size();
+ int i = 0;
+ while (num > maxRunningUsers && i < mUserLru.size()) {
+ Integer oldUserId = mUserLru.get(i);
+ UserState oldUss = mStartedUsers.get(oldUserId);
+ if (oldUss == null) {
+ // Shouldn't happen, but be sane if it does.
+ mUserLru.remove(i);
+ num--;
+ continue;
+ }
+ if (oldUss.state == UserState.STATE_STOPPING
+ || oldUss.state == UserState.STATE_SHUTDOWN) {
+ // This user is already stopping, doesn't count.
num--;
i++;
+ continue;
}
+ if (oldUserId == UserHandle.USER_SYSTEM || oldUserId == mCurrentUserId) {
+ // Owner/System user and current user can't be stopped. We count it as running
+ // when it is not a pure system user.
+ if (UserInfo.isSystemOnly(oldUserId)) {
+ num--;
+ }
+ i++;
+ continue;
+ }
+ // This is a user to be stopped.
+ if (stopUsersLocked(oldUserId, false, null) != USER_OP_SUCCESS) {
+ num--;
+ }
+ num--;
+ i++;
}
}
void finishUserBoot(UserState uss) {
+ finishUserBoot(uss, null);
+ }
+
+ void finishUserBoot(UserState uss, IIntentReceiver resultTo) {
+ final int userId = uss.mHandle.getIdentifier();
synchronized (mService) {
- if (uss.mState == UserState.STATE_BOOTING
- && mStartedUsers.get(uss.mHandle.getIdentifier()) == uss) {
- uss.mState = UserState.STATE_RUNNING;
- final int userId = uss.mHandle.getIdentifier();
- Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
+ // Bail if we ended up with a stale user
+ if (mStartedUsers.get(userId) != uss) return;
+
+ // We always walk through all the user lifecycle states to send
+ // consistent developer events. We step into RUNNING_LOCKED here,
+ // but we might immediately step into RUNNING below if the user
+ // storage is already unlocked.
+ if (uss.state == UserState.STATE_BOOTING) {
+ uss.setState(UserState.STATE_RUNNING_LOCKED);
+
+ Intent intent = new Intent(Intent.ACTION_LOCKED_BOOT_COMPLETED, null);
intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT);
- mService.broadcastIntentLocked(null, null, intent,
- null, null, 0, null, null,
- new String[]{android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
+ mService.broadcastIntentLocked(null, null, intent, null, resultTo, 0, null, null,
+ new String[] { android.Manifest.permission.RECEIVE_BOOT_COMPLETED },
+ AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);
+ }
+
+ maybeUnlockUser(userId);
+ }
+ }
+
+ /**
+ * Consider stepping from {@link UserState#STATE_RUNNING_LOCKED} into
+ * {@link UserState#STATE_RUNNING}, which only occurs if the user storage is
+ * actually unlocked.
+ */
+ void finishUserUnlock(UserState uss) {
+ final int userId = uss.mHandle.getIdentifier();
+ synchronized (mService) {
+ // Bail if we ended up with a stale user
+ if (mStartedUsers.get(uss.mHandle.getIdentifier()) != uss) return;
+
+ // Only keep marching forward if user is actually unlocked
+ if (!isUserKeyUnlocked(userId)) return;
+
+ if (uss.state == UserState.STATE_RUNNING_LOCKED) {
+ uss.setState(UserState.STATE_RUNNING);
+
+ mHandler.sendMessage(mHandler.obtainMessage(SYSTEM_USER_UNLOCK_MSG, userId, 0));
+
+ final Intent unlockedIntent = new Intent(Intent.ACTION_USER_UNLOCKED);
+ unlockedIntent.addFlags(
+ Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND);
+ mService.broadcastIntentLocked(null, null, unlockedIntent, null, null, 0, null,
+ null, null, AppOpsManager.OP_NONE, null, false, false, MY_PID, SYSTEM_UID,
+ userId);
+
+ final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
+ bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
+ | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
+ mService.broadcastIntentLocked(null, null, bootIntent, null, null, 0, null, null,
+ new String[] { android.Manifest.permission.RECEIVE_BOOT_COMPLETED },
AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);
}
}
}
- int stopUser(final int userId, final IStopUserCallback callback) {
+ int stopUser(final int userId, final boolean force, final IStopUserCallback callback) {
if (mService.checkCallingPermission(INTERACT_ACROSS_USERS_FULL)
!= PackageManager.PERMISSION_GRANTED) {
String msg = "Permission Denial: switchUser() from pid="
@@ -221,16 +278,44 @@
mService.enforceShellRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES,
userId);
synchronized (mService) {
- return stopUserLocked(userId, callback);
+ return stopUsersLocked(userId, force, callback);
}
}
- private int stopUserLocked(final int userId, final IStopUserCallback callback) {
- if (DEBUG_MU) Slog.i(TAG, "stopUserLocked userId=" + userId);
- if (mCurrentUserId == userId && mTargetUserId == UserHandle.USER_NULL) {
+ /**
+ * Stops the user along with its related users. The method calls
+ * {@link #getUsersToStopLocked(int)} to determine the list of users that should be stopped.
+ */
+ private int stopUsersLocked(final int userId, boolean force, final IStopUserCallback callback) {
+ if (userId == UserHandle.USER_SYSTEM) {
+ return USER_OP_ERROR_IS_SYSTEM;
+ }
+ if (isCurrentUserLocked(userId)) {
return USER_OP_IS_CURRENT;
}
+ int[] usersToStop = getUsersToStopLocked(userId);
+ // If one of related users is system or current, no related users should be stopped
+ for (int i = 0; i < usersToStop.length; i++) {
+ int relatedUserId = usersToStop[i];
+ if ((UserHandle.USER_SYSTEM == relatedUserId) || isCurrentUserLocked(relatedUserId)) {
+ if (DEBUG_MU) Slog.i(TAG, "stopUsersLocked cannot stop related user "
+ + relatedUserId);
+ // We still need to stop the requested user if it's a force stop.
+ if (force) {
+ stopSingleUserLocked(userId, callback);
+ }
+ return USER_OP_ERROR_RELATED_USERS_CANNOT_STOP;
+ }
+ }
+ if (DEBUG_MU) Slog.i(TAG, "stopUsersLocked usersToStop=" + Arrays.toString(usersToStop));
+ for (int userIdToStop : usersToStop) {
+ stopSingleUserLocked(userIdToStop, userIdToStop == userId ? callback : null);
+ }
+ return USER_OP_SUCCESS;
+ }
+ private void stopSingleUserLocked(final int userId, final IStopUserCallback callback) {
+ if (DEBUG_MU) Slog.i(TAG, "stopSingleUserLocked userId=" + userId);
final UserState uss = mStartedUsers.get(userId);
if (uss == null) {
// User is not started, nothing to do... but we do need to
@@ -246,16 +331,16 @@
}
});
}
- return USER_OP_SUCCESS;
+ return;
}
if (callback != null) {
uss.mStopCallbacks.add(callback);
}
- if (uss.mState != UserState.STATE_STOPPING
- && uss.mState != UserState.STATE_SHUTDOWN) {
- uss.mState = UserState.STATE_STOPPING;
+ if (uss.state != UserState.STATE_STOPPING
+ && uss.state != UserState.STATE_SHUTDOWN) {
+ uss.setState(UserState.STATE_STOPPING);
updateStartedUserArrayLocked();
long ident = Binder.clearCallingIdentity();
@@ -283,11 +368,11 @@
Bundle extras, boolean ordered, boolean sticky, int sendingUser) {
// On to the next.
synchronized (mService) {
- if (uss.mState != UserState.STATE_STOPPING) {
+ if (uss.state != UserState.STATE_STOPPING) {
// Whoops, we are being started back up. Abort, abort!
return;
}
- uss.mState = UserState.STATE_SHUTDOWN;
+ uss.setState(UserState.STATE_SHUTDOWN);
}
mService.mBatteryStatsService.noteEvent(
BatteryStats.HistoryItem.EVENT_USER_RUNNING_FINISH,
@@ -307,8 +392,6 @@
Binder.restoreCallingIdentity(ident);
}
}
-
- return USER_OP_SUCCESS;
}
void finishUserStop(UserState uss) {
@@ -319,7 +402,7 @@
callbacks = new ArrayList<>(uss.mStopCallbacks);
if (mStartedUsers.get(userId) != uss) {
stopped = false;
- } else if (uss.mState != UserState.STATE_SHUTDOWN) {
+ } else if (uss.state != UserState.STATE_SHUTDOWN) {
stopped = false;
} else {
stopped = true;
@@ -350,6 +433,36 @@
}
}
+ /**
+ * Determines the list of users that should be stopped together with the specified
+ * {@code userId}. The returned list includes {@code userId}.
+ */
+ private @NonNull int[] getUsersToStopLocked(int userId) {
+ int startedUsersSize = mStartedUsers.size();
+ IntArray userIds = new IntArray();
+ userIds.add(userId);
+ synchronized (mUserProfileGroupIdsSelfLocked) {
+ int userGroupId = mUserProfileGroupIdsSelfLocked.get(userId,
+ UserInfo.NO_PROFILE_GROUP_ID);
+ for (int i = 0; i < startedUsersSize; i++) {
+ UserState uss = mStartedUsers.valueAt(i);
+ int startedUserId = uss.mHandle.getIdentifier();
+ // Skip unrelated users (profileGroupId mismatch)
+ int startedUserGroupId = mUserProfileGroupIdsSelfLocked.get(startedUserId,
+ UserInfo.NO_PROFILE_GROUP_ID);
+ boolean sameGroup = (userGroupId != UserInfo.NO_PROFILE_GROUP_ID)
+ && (userGroupId == startedUserGroupId);
+ // userId has already been added
+ boolean sameUserId = startedUserId == userId;
+ if (!sameGroup || sameUserId) {
+ continue;
+ }
+ userIds.add(startedUserId);
+ }
+ }
+ return userIds.toArray();
+ }
+
private void forceStopUserLocked(int userId, String reason) {
mService.forceStopPackageLocked(null, -1, false, false, true, false, false,
userId, reason);
@@ -362,7 +475,6 @@
null, false, false, MY_PID, SYSTEM_UID, UserHandle.USER_ALL);
}
-
/**
* Stops the guest user if it has gone to the background.
*/
@@ -373,14 +485,14 @@
Integer oldUserId = mUserLru.get(i);
UserState oldUss = mStartedUsers.get(oldUserId);
if (oldUserId == UserHandle.USER_SYSTEM || oldUserId == mCurrentUserId
- || oldUss.mState == UserState.STATE_STOPPING
- || oldUss.mState == UserState.STATE_SHUTDOWN) {
+ || oldUss.state == UserState.STATE_STOPPING
+ || oldUss.state == UserState.STATE_SHUTDOWN) {
continue;
}
UserInfo userInfo = getUserInfo(oldUserId);
if (userInfo.isGuest()) {
// This is a user to be stopped.
- stopUserLocked(oldUserId, null);
+ stopUsersLocked(oldUserId, true, null);
break;
}
}
@@ -417,18 +529,21 @@
return userManager;
}
- private void updateUserUnlockedState(UserState uss) {
- final IMountService mountService = IMountService.Stub
- .asInterface(ServiceManager.getService("mount"));
+ private IMountService getMountService() {
+ return IMountService.Stub.asInterface(ServiceManager.getService("mount"));
+ }
+
+ private boolean isUserKeyUnlocked(int userId) {
+ final IMountService mountService = getMountService();
if (mountService != null) {
try {
- uss.unlocked = mountService.isUserKeyUnlocked(uss.mHandle.getIdentifier());
+ return mountService.isUserKeyUnlocked(userId);
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
} else {
- // System isn't fully booted yet, so guess based on property
- uss.unlocked = !StorageManager.isFileBasedEncryptionEnabled();
+ Slog.w(TAG, "Mount service not published; guessing locked state based on property");
+ return !StorageManager.isFileBasedEncryptionEnabled();
}
}
@@ -476,14 +591,12 @@
// If the user we are switching to is not currently started, then
// we need to start it now.
if (mStartedUsers.get(userId) == null) {
- mStartedUsers.put(userId, new UserState(new UserHandle(userId)));
+ mStartedUsers.put(userId, new UserState(UserHandle.of(userId)));
updateStartedUserArrayLocked();
needStart = true;
}
final UserState uss = mStartedUsers.get(userId);
- updateUserUnlockedState(uss);
-
final Integer userIdInt = userId;
mUserLru.remove(userIdInt);
mUserLru.add(userIdInt);
@@ -507,22 +620,22 @@
// Make sure user is in the started state. If it is currently
// stopping, we need to knock that off.
- if (uss.mState == UserState.STATE_STOPPING) {
+ if (uss.state == UserState.STATE_STOPPING) {
// If we are stopping, we haven't sent ACTION_SHUTDOWN,
// so we can just fairly silently bring the user back from
// the almost-dead.
- uss.mState = UserState.STATE_RUNNING;
+ uss.setState(uss.lastState);
updateStartedUserArrayLocked();
needStart = true;
- } else if (uss.mState == UserState.STATE_SHUTDOWN) {
+ } else if (uss.state == UserState.STATE_SHUTDOWN) {
// This means ACTION_SHUTDOWN has been sent, so we will
// need to treat this as a new boot of the user.
- uss.mState = UserState.STATE_BOOTING;
+ uss.setState(UserState.STATE_BOOTING);
updateStartedUserArrayLocked();
needStart = true;
}
- if (uss.mState == UserState.STATE_BOOTING) {
+ if (uss.state == UserState.STATE_BOOTING) {
// Let user manager propagate user restrictions to other services.
getUserManager().onBeforeStartUser(userId);
@@ -632,35 +745,40 @@
}
}
+ /**
+ * Attempt to unlock user without a credential token. This typically
+ * succeeds when the device doesn't have credential-encrypted storage, or
+ * when the the credential-encrypted storage isn't tied to a user-provided
+ * PIN or pattern.
+ */
+ boolean maybeUnlockUser(final int userId) {
+ // Try unlocking storage using empty token
+ return unlockUserCleared(userId, null);
+ }
+
boolean unlockUserCleared(final int userId, byte[] token) {
synchronized (mService) {
+ // Bail if already running unlocked
final UserState uss = mStartedUsers.get(userId);
- if (uss.unlocked) {
- // Bail early when already unlocked
- return true;
+ if (uss.state == UserState.STATE_RUNNING) return true;
+ }
+
+ if (!isUserKeyUnlocked(userId)) {
+ final UserInfo userInfo = getUserInfo(userId);
+ final IMountService mountService = getMountService();
+ try {
+ mountService.unlockUserKey(userId, userInfo.serialNumber, token);
+ } catch (RemoteException | RuntimeException e) {
+ Slog.w(TAG, "Failed to unlock: " + e.getMessage());
+ return false;
}
}
- final UserInfo userInfo = getUserInfo(userId);
- final IMountService mountService = IMountService.Stub
- .asInterface(ServiceManager.getService("mount"));
- try {
- mountService.unlockUserKey(userId, userInfo.serialNumber, token);
- } catch (RemoteException e) {
- Slog.w(TAG, "Failed to unlock: " + e.getMessage());
- return false;
- }
-
synchronized (mService) {
final UserState uss = mStartedUsers.get(userId);
- updateUserUnlockedState(uss);
+ finishUserUnlock(uss);
}
- final Intent intent = new Intent(Intent.ACTION_USER_UNLOCKED);
- intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND);
- mService.broadcastIntentLocked(null, null, intent, null, null, 0, null, null, null,
- AppOpsManager.OP_NONE, null, false, false, MY_PID, SYSTEM_UID, userId);
-
return true;
}
@@ -695,6 +813,24 @@
mUserSwitchObservers.finishBroadcast();
}
+ private void stopBackgroundUsersIfEnforced(int oldUserId) {
+ // Never stop system user
+ if (oldUserId == UserHandle.USER_SYSTEM) {
+ return;
+ }
+ // For now, only check for user restriction. Additional checks can be added here
+ boolean disallowRunInBg = hasUserRestriction(UserManager.DISALLOW_RUN_IN_BACKGROUND,
+ oldUserId);
+ if (!disallowRunInBg) {
+ return;
+ }
+ synchronized (mService) {
+ if (DEBUG_MU) Slog.i(TAG, "stopBackgroundUsersIfEnforced stopping " + oldUserId
+ + " and related users");
+ stopUsersLocked(oldUserId, false, null);
+ }
+ }
+
void timeoutUserSwitch(UserState uss, int oldUserId, int newUserId) {
synchronized (mService) {
Slog.wtf(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId);
@@ -747,7 +883,7 @@
}
void continueUserSwitch(UserState uss, int oldUserId, int newUserId) {
- completeSwitchAndInitialize(uss, newUserId, false, true);
+ completeSwitchAndInitialize(uss, oldUserId, newUserId, false, true);
}
void onUserInitialized(UserState uss, boolean foreground, int oldUserId, int newUserId) {
@@ -756,10 +892,10 @@
moveUserToForegroundLocked(uss, oldUserId, newUserId);
}
}
- completeSwitchAndInitialize(uss, newUserId, true, false);
+ completeSwitchAndInitialize(uss, oldUserId, newUserId, true, false);
}
- void completeSwitchAndInitialize(UserState uss, int newUserId,
+ void completeSwitchAndInitialize(UserState uss, int oldUserId, int newUserId,
boolean clearInitializing, boolean clearSwitching) {
boolean unfrozen = false;
synchronized (mService) {
@@ -781,6 +917,7 @@
newUserId, 0));
}
stopGuestUserIfBackground();
+ stopBackgroundUsersIfEnforced(oldUserId);
}
void moveUserToForegroundLocked(UserState uss, int oldUserId, int newUserId) {
@@ -961,8 +1098,8 @@
for (int i = 0; i < mStartedUsers.size(); i++) {
UserState uss = mStartedUsers.valueAt(i);
// This list does not include stopping users.
- if (uss.mState != UserState.STATE_STOPPING
- && uss.mState != UserState.STATE_SHUTDOWN) {
+ if (uss.state != UserState.STATE_STOPPING
+ && uss.state != UserState.STATE_SHUTDOWN) {
num++;
}
}
@@ -970,8 +1107,8 @@
num = 0;
for (int i = 0; i < mStartedUsers.size(); i++) {
UserState uss = mStartedUsers.valueAt(i);
- if (uss.mState != UserState.STATE_STOPPING
- && uss.mState != UserState.STATE_SHUTDOWN) {
+ if (uss.state != UserState.STATE_STOPPING
+ && uss.state != UserState.STATE_SHUTDOWN) {
mStartedUserArray[num] = mStartedUsers.keyAt(i);
num++;
}
@@ -981,17 +1118,7 @@
void sendBootCompletedLocked(IIntentReceiver resultTo) {
for (int i = 0; i < mStartedUsers.size(); i++) {
UserState uss = mStartedUsers.valueAt(i);
- if (uss.mState == UserState.STATE_BOOTING) {
- uss.mState = UserState.STATE_RUNNING;
- final int userId = mStartedUsers.keyAt(i);
- Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
- intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
- intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT);
- mService.broadcastIntentLocked(null, null, intent, null,
- resultTo, 0, null, null,
- new String[] {android.Manifest.permission.RECEIVE_BOOT_COMPLETED},
- AppOpsManager.OP_NONE, null, true, false, MY_PID, SYSTEM_UID, userId);
- }
+ finishUserBoot(uss, resultTo);
}
}
@@ -1033,15 +1160,33 @@
if ((flags & ActivityManager.FLAG_OR_STOPPED) != 0) {
return true;
}
- if ((flags & ActivityManager.FLAG_AND_LOCKED) != 0) {
- // If user is currently locked, we fall through to default "running"
- // behavior below
- if (state.unlocked) {
+
+ final boolean unlocked;
+ switch (state.state) {
+ case UserState.STATE_STOPPING:
+ case UserState.STATE_SHUTDOWN:
+ default:
return false;
- }
+
+ case UserState.STATE_BOOTING:
+ case UserState.STATE_RUNNING_LOCKED:
+ unlocked = false;
+ break;
+
+ case UserState.STATE_RUNNING:
+ unlocked = true;
+ break;
}
- return state.mState != UserState.STATE_STOPPING
- && state.mState != UserState.STATE_SHUTDOWN;
+
+ if ((flags & ActivityManager.FLAG_AND_LOCKED) != 0) {
+ return !unlocked;
+ }
+ if ((flags & ActivityManager.FLAG_AND_UNLOCKED) != 0) {
+ return unlocked;
+ }
+
+ // One way or another, we're running!
+ return true;
}
UserInfo getCurrentUser() {
@@ -1074,6 +1219,10 @@
return mCurrentUserId;
}
+ private boolean isCurrentUserLocked(int userId) {
+ return mCurrentUserId == userId || mTargetUserId == userId;
+ }
+
int setTargetUserIdLocked(int targetUserId) {
return mTargetUserId = targetUserId;
}
diff --git a/services/core/java/com/android/server/am/UserState.java b/services/core/java/com/android/server/am/UserState.java
index b5b5c1d..7b18a17 100644
--- a/services/core/java/com/android/server/am/UserState.java
+++ b/services/core/java/com/android/server/am/UserState.java
@@ -19,28 +19,37 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_MU;
+import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;
+import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;
+
import android.app.IStopUserCallback;
import android.os.UserHandle;
import android.util.ArrayMap;
+import android.util.Slog;
public final class UserState {
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "UserState" : TAG_AM;
+
// User is first coming up.
public final static int STATE_BOOTING = 0;
+ // User is in the locked running state.
+ public final static int STATE_RUNNING_LOCKED = 1;
// User is in the normal running state.
- public final static int STATE_RUNNING = 1;
+ public final static int STATE_RUNNING = 2;
// User is in the initial process of being stopped.
- public final static int STATE_STOPPING = 2;
+ public final static int STATE_STOPPING = 3;
// User is in the final phase of stopping, sending Intent.ACTION_SHUTDOWN.
- public final static int STATE_SHUTDOWN = 3;
+ public final static int STATE_SHUTDOWN = 4;
public final UserHandle mHandle;
public final ArrayList<IStopUserCallback> mStopCallbacks
= new ArrayList<IStopUserCallback>();
- public int mState = STATE_BOOTING;
+ public int state = STATE_BOOTING;
+ public int lastState = STATE_BOOTING;
public boolean switching;
public boolean initializing;
- public boolean unlocked;
/**
* The last time that a provider was reported to usage stats as being brought to important
@@ -52,22 +61,32 @@
mHandle = handle;
}
- void dump(String prefix, PrintWriter pw) {
- pw.print(prefix); pw.print("mState=");
- switch (mState) {
- case STATE_BOOTING: pw.print("BOOTING"); break;
- case STATE_RUNNING: pw.print("RUNNING"); break;
- case STATE_STOPPING: pw.print("STOPPING"); break;
- case STATE_SHUTDOWN: pw.print("SHUTDOWN"); break;
- default: pw.print(mState); break;
+ public void setState(int newState) {
+ if (DEBUG_MU) {
+ Slog.i(TAG, "User " + mHandle.getIdentifier() + " state changed from "
+ + stateToString(state) + " to " + stateToString(newState));
}
+ lastState = state;
+ state = newState;
+ }
+
+ private static String stateToString(int state) {
+ switch (state) {
+ case STATE_BOOTING: return "BOOTING";
+ case STATE_RUNNING_LOCKED: return "RUNNING_LOCKED";
+ case STATE_RUNNING: return "RUNNING";
+ case STATE_STOPPING: return "STOPPING";
+ case STATE_SHUTDOWN: return "SHUTDOWN";
+ default: return Integer.toString(state);
+ }
+ }
+
+ void dump(String prefix, PrintWriter pw) {
+ pw.print(prefix);
+ pw.print("state="); pw.print(stateToString(state));
+ pw.print(" lastState="); pw.print(stateToString(lastState));
if (switching) pw.print(" SWITCHING");
if (initializing) pw.print(" INITIALIZING");
- if (unlocked) {
- pw.print(" UNLOCKED");
- } else {
- pw.print(" LOCKED");
- }
pw.println();
}
}
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 5108564..3a10dbe 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -62,6 +62,7 @@
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import com.android.internal.util.WakeupMessage;
import com.android.server.connectivity.NetworkAgentInfo;
import java.io.IOException;
@@ -565,19 +566,14 @@
private class LingeringState extends State {
private static final String ACTION_LINGER_EXPIRED = "android.net.netmon.lingerExpired";
- private CustomIntentReceiver mBroadcastReceiver;
- private PendingIntent mIntent;
+ private WakeupMessage mWakeupMessage;
@Override
public void enter() {
- mLingerToken = new Random().nextInt();
- mBroadcastReceiver = new CustomIntentReceiver(ACTION_LINGER_EXPIRED, mLingerToken,
- CMD_LINGER_EXPIRED);
- mIntent = mBroadcastReceiver.getPendingIntent();
+ final String cmdName = ACTION_LINGER_EXPIRED + "." + mNetworkAgentInfo.network.netId;
+ mWakeupMessage = new WakeupMessage(mContext, getHandler(), cmdName, CMD_LINGER_EXPIRED);
long wakeupTime = SystemClock.elapsedRealtime() + mLingerDelayMs;
- mAlarmManager.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, wakeupTime,
- // Give a specific window so we aren't subject to unknown inexactitude.
- mLingerDelayMs / 6, mIntent);
+ mWakeupMessage.schedule(wakeupTime);
}
@Override
@@ -592,8 +588,6 @@
}
return NOT_HANDLED;
case CMD_LINGER_EXPIRED:
- if (message.arg1 != mLingerToken)
- return HANDLED;
mConnectivityServiceHandler.sendMessage(
obtainMessage(EVENT_NETWORK_LINGER_COMPLETE, mNetworkAgentInfo));
return HANDLED;
@@ -624,8 +618,7 @@
@Override
public void exit() {
- mAlarmManager.cancel(mIntent);
- mContext.unregisterReceiver(mBroadcastReceiver);
+ mWakeupMessage.cancel();
}
}
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 4f53882..a066835 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -422,8 +422,8 @@
if (Intent.ACTION_USER_REMOVED.equals(action)) {
onUserRemoved(userId);
- } else if (Intent.ACTION_USER_STARTING.equals(action)) {
- onUserStarting(userId);
+ } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) {
+ onUserUnlocked(userId);
} else if (Intent.ACTION_USER_STOPPING.equals(action)) {
onUserStopping(userId);
}
@@ -517,7 +517,7 @@
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_USER_REMOVED);
- intentFilter.addAction(Intent.ACTION_USER_STARTING);
+ intentFilter.addAction(Intent.ACTION_USER_UNLOCKED);
intentFilter.addAction(Intent.ACTION_USER_STOPPING);
mContext.registerReceiverAsUser(
mUserIntentReceiver, UserHandle.ALL, intentFilter, null, null);
@@ -1292,7 +1292,7 @@
}
}
- private void onUserStarting(int userId) {
+ private void onUserUnlocked(int userId) {
// Make sure that accounts we're about to use are valid
AccountManagerService.getSingleton().validateAccounts(userId);
@@ -2673,21 +2673,20 @@
final Iterator<SyncOperation> operationIterator =
mSyncQueue.getOperations().iterator();
- final ActivityManager activityManager
- = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
+ final ActivityManager am = mContext.getSystemService(ActivityManager.class);
final Set<Integer> removedUsers = Sets.newHashSet();
while (operationIterator.hasNext()) {
final SyncOperation op = operationIterator.next();
- // If the user is not running, skip the request.
- if (!activityManager.isUserRunning(op.target.userId)) {
+ // If the user is not running unlocked, skip the request.
+ if (!am.isUserRunningAndUnlocked(op.target.userId)) {
final UserInfo userInfo = mUserManager.getUserInfo(op.target.userId);
if (userInfo == null) {
removedUsers.add(op.target.userId);
}
if (isLoggable) {
Log.v(TAG, " Dropping all sync operations for + "
- + op.target.userId + ": user not running.");
+ + op.target.userId + ": user not running unlocked.");
}
continue;
}
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index 103ed0a..e0a9975 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -19,12 +19,11 @@
import android.Manifest;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
-import android.app.ActivityManager.RunningTaskInfo;
import android.app.ActivityManagerNative;
import android.app.AlarmManager;
import android.app.AppOpsManager;
-import android.app.IUserSwitchObserver;
import android.app.PendingIntent;
+import android.app.SynchronousUserSwitchObserver;
import android.content.ComponentName;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -38,7 +37,6 @@
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
-import android.os.IRemoteCallback;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SELinux;
@@ -1134,17 +1132,11 @@
private void listenForUserSwitches() {
try {
ActivityManagerNative.getDefault().registerUserSwitchObserver(
- new IUserSwitchObserver.Stub() {
+ new SynchronousUserSwitchObserver() {
@Override
- public void onUserSwitching(int newUserId, IRemoteCallback reply) {
+ public void onUserSwitching(int newUserId) throws RemoteException {
mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0 /* unused */)
.sendToTarget();
- if (reply != null) {
- try {
- reply.sendResult(null);
- } catch (RemoteException e) {
- }
- }
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index ae8fca8..f2d0031 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -212,6 +212,7 @@
private static native String nativeDump(long ptr);
private static native void nativeMonitor(long ptr);
private static native void nativeSetPointerIconShape(long ptr, int iconId);
+ private static native void nativeReloadPointerIcons(long ptr);
// Input event injection constants defined in InputDispatcher.h.
private static final int INPUT_EVENT_INJECTION_SUCCEEDED = 0;
@@ -311,12 +312,14 @@
registerPointerSpeedSettingObserver();
registerShowTouchesSettingObserver();
+ registerAccessibilityLargePointerSettingObserver();
mContext.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updatePointerSpeedFromSettings();
updateShowTouchesFromSettings();
+ nativeReloadPointerIcons(mPtr);
}
}, new IntentFilter(Intent.ACTION_USER_SWITCHED), null, mHandler);
@@ -1362,6 +1365,17 @@
}, UserHandle.USER_ALL);
}
+ private void registerAccessibilityLargePointerSettingObserver() {
+ mContext.getContentResolver().registerContentObserver(
+ Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON), true,
+ new ContentObserver(mHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ nativeReloadPointerIcons(mPtr);
+ }
+ }, UserHandle.USER_ALL);
+ }
+
private int getShowTouchesSetting(int defaultValue) {
int result = defaultValue;
try {
@@ -1431,11 +1445,11 @@
}
}
- // Binder call
- @Override
- public void setPointerIconShape(int iconId) {
- nativeSetPointerIconShape(mPtr, iconId);
- }
+ // Binder call
+ @Override
+ public void setPointerIconShape(int iconId) {
+ nativeSetPointerIconShape(mPtr, iconId);
+ }
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java
index 0004c42..d9f94d0 100644
--- a/services/core/java/com/android/server/job/JobStore.java
+++ b/services/core/java/com/android/server/job/JobStore.java
@@ -278,6 +278,11 @@
// Copy over the jobs so we can release the lock before writing.
for (int i=0; i<mJobSet.size(); i++) {
JobStatus jobStatus = mJobSet.valueAt(i);
+
+ if (!jobStatus.isPersisted()){
+ continue;
+ }
+
JobStatus copy = new JobStatus(jobStatus.getJob(), jobStatus.getUid(),
jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed());
mStoreCopy.add(copy);
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 38893b8..c83012c 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -17,6 +17,19 @@
package com.android.server.notification;
import static android.service.notification.NotificationListenerService.HINT_HOST_DISABLE_EFFECTS;
+import static android.service.notification.NotificationAssistantService.REASON_DELEGATE_CLICK;
+import static android.service.notification.NotificationAssistantService.REASON_DELEGATE_CANCEL;
+import static android.service.notification.NotificationAssistantService.REASON_DELEGATE_CANCEL_ALL;
+import static android.service.notification.NotificationAssistantService.REASON_DELEGATE_ERROR;
+import static android.service.notification.NotificationAssistantService.REASON_PACKAGE_CHANGED;
+import static android.service.notification.NotificationAssistantService.REASON_USER_STOPPED;
+import static android.service.notification.NotificationAssistantService.REASON_PACKAGE_BANNED;
+import static android.service.notification.NotificationAssistantService.REASON_APP_CANCEL;
+import static android.service.notification.NotificationAssistantService.REASON_APP_CANCEL_ALL;
+import static android.service.notification.NotificationAssistantService.REASON_LISTENER_CANCEL;
+import static android.service.notification.NotificationAssistantService.REASON_LISTENER_CANCEL_ALL;
+import static android.service.notification.NotificationAssistantService.REASON_GROUP_SUMMARY_CANCELED;
+import static android.service.notification.NotificationAssistantService.REASON_GROUP_OPTIMIZATION;
import static android.service.notification.NotificationListenerService.SUPPRESSED_EFFECT_LIGHTS;
import static android.service.notification.NotificationListenerService.SUPPRESSED_EFFECT_PEEK;
import static android.service.notification.NotificationListenerService.TRIM_FULL;
@@ -146,8 +159,8 @@
public class NotificationManagerService extends SystemService {
static final String TAG = "NotificationService";
static final boolean DBG = Log.isLoggable(TAG, Log.DEBUG);
- public static final boolean ENABLE_CHILD_NOTIFICATIONS = Build.IS_DEBUGGABLE
- && SystemProperties.getBoolean("debug.child_notifs", false);
+ public static final boolean ENABLE_CHILD_NOTIFICATIONS
+ = SystemProperties.getBoolean("debug.child_notifs", true);
static final int MAX_PACKAGE_NOTIFICATIONS = 50;
@@ -281,19 +294,6 @@
private static final int MY_UID = Process.myUid();
private static final int MY_PID = Process.myPid();
- private static final int REASON_DELEGATE_CLICK = 1;
- private static final int REASON_DELEGATE_CANCEL = 2;
- private static final int REASON_DELEGATE_CANCEL_ALL = 3;
- private static final int REASON_DELEGATE_ERROR = 4;
- private static final int REASON_PACKAGE_CHANGED = 5;
- private static final int REASON_USER_STOPPED = 6;
- private static final int REASON_PACKAGE_BANNED = 7;
- private static final int REASON_NOMAN_CANCEL = 8;
- private static final int REASON_NOMAN_CANCEL_ALL = 9;
- private static final int REASON_LISTENER_CANCEL = 10;
- private static final int REASON_LISTENER_CANCEL_ALL = 11;
- private static final int REASON_GROUP_SUMMARY_CANCELED = 12;
- private static final int REASON_GROUP_OPTIMIZATION = 13;
private static class Archive {
final int mBufferSize;
@@ -1176,7 +1176,7 @@
cancelNotification(Binder.getCallingUid(), Binder.getCallingPid(), pkg, tag, id, 0,
Binder.getCallingUid() == Process.SYSTEM_UID
? 0 : Notification.FLAG_FOREGROUND_SERVICE, false, userId,
- REASON_NOMAN_CANCEL, null);
+ REASON_APP_CANCEL, null);
}
@Override
@@ -1190,7 +1190,7 @@
// running foreground services.
cancelAllNotificationsInt(Binder.getCallingUid(), Binder.getCallingPid(),
pkg, 0, Notification.FLAG_FOREGROUND_SERVICE, true, userId,
- REASON_NOMAN_CANCEL_ALL, null);
+ REASON_APP_CANCEL_ALL, null);
}
@Override
@@ -1243,6 +1243,20 @@
return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic);
}
+ @Override
+ public void setTopicImportance(String pkg, int uid, Notification.Topic topic,
+ int importance) {
+ checkCallerIsSystem();
+ mRankingHelper.setTopicImportance(pkg, uid, topic, importance);
+ savePolicyFile();
+ }
+
+ @Override
+ public int getTopicImportance(String pkg, int uid, Notification.Topic topic) {
+ checkCallerIsSystem();
+ return mRankingHelper.getTopicImportance(pkg, uid, topic);
+ }
+
/**
* System-only API for getting a list of current (i.e. not cleared) notifications.
*
@@ -1634,6 +1648,14 @@
}
@Override
+ public boolean removeAutomaticZenRules(String packageName) throws RemoteException {
+ Preconditions.checkNotNull(packageName, "Package name is null");
+ enforceSystemOrSystemUI("removeAutomaticZenRules");
+
+ return mZenModeHelper.removeAutomaticZenRules(packageName, "removeAutomaticZenRules");
+ }
+
+ @Override
public void setInterruptionFilter(String pkg, int filter) throws RemoteException {
enforcePolicyAccess(pkg, "setInterruptionFilter");
final int zen = NotificationManager.zenModeFromInterruptionFilter(filter, -1);
@@ -2193,6 +2215,7 @@
}
mRankingHelper.extractSignals(r);
+ savePolicyFile();
// 3. Apply local rules
@@ -2871,8 +2894,8 @@
case REASON_LISTENER_CANCEL_ALL:
mUsageStats.registerDismissedByUser(r);
break;
- case REASON_NOMAN_CANCEL:
- case REASON_NOMAN_CANCEL_ALL:
+ case REASON_APP_CANCEL:
+ case REASON_APP_CANCEL_ALL:
mUsageStats.registerRemovedByApp(r);
break;
}
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index 2a7568d..3b7384e 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -23,6 +23,7 @@
import android.graphics.drawable.Icon;
import android.media.AudioAttributes;
import android.os.UserHandle;
+import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import com.android.internal.annotations.VisibleForTesting;
@@ -82,6 +83,7 @@
private int mAuthoritativeRank;
private String mGlobalSortKey;
private int mPackageVisibility;
+ private int mTopicImportance = NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
private int mSuppressedVisualEffects = 0;
@@ -106,6 +108,7 @@
mRankingTimeMs = calculateRankingTimeMs(previous.getRankingTimeMs());
mCreationTimeMs = previous.mCreationTimeMs;
mVisibleSinceMs = previous.mVisibleSinceMs;
+ mTopicImportance = previous.mTopicImportance;
// Don't copy mGlobalSortKey, recompute it.
}
@@ -195,6 +198,8 @@
pw.println(prefix + " mRecentlyIntrusive=" + mRecentlyIntrusive);
pw.println(prefix + " mPackagePriority=" + mPackagePriority);
pw.println(prefix + " mPackageVisibility=" + mPackageVisibility);
+ pw.println(prefix + " mTopicImportance="
+ + NotificationListenerService.Ranking.importanceToString(mTopicImportance));
pw.println(prefix + " mIntercept=" + mIntercept);
pw.println(prefix + " mGlobalSortKey=" + mGlobalSortKey);
pw.println(prefix + " mRankingTimeMs=" + mRankingTimeMs);
@@ -268,6 +273,16 @@
return mPackageVisibility;
}
+ public void setTopicImportance(int importance) {
+ if (importance != NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED) {
+ mTopicImportance = importance;
+ }
+ }
+
+ public int getTopicImportance() {
+ return mTopicImportance;
+ }
+
public boolean setIntercepted(boolean intercept) {
mIntercept = intercept;
return mIntercept;
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index 7ee29e4..acdd90a 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -31,4 +31,8 @@
void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic,
int visibility);
+
+ void setTopicImportance(String packageName, int uid, Notification.Topic topic, int importance);
+
+ int getTopicImportance(String packageName, int uid, Notification.Topic topic);
}
diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java
index 543cd89..5a31c6a 100644
--- a/services/core/java/com/android/server/notification/RankingHelper.java
+++ b/services/core/java/com/android/server/notification/RankingHelper.java
@@ -23,6 +23,7 @@
import android.os.Message;
import android.os.UserHandle;
import android.service.notification.NotificationListenerService;
+import android.service.notification.NotificationListenerService.Ranking;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Slog;
@@ -55,12 +56,13 @@
private static final String ATT_UID = "uid";
private static final String ATT_PRIORITY = "priority";
private static final String ATT_VISIBILITY = "visibility";
+ private static final String ATT_IMPORTANCE = "importance";
private static final String ATT_TOPIC_ID = "id";
private static final String ATT_TOPIC_LABEL = "label";
private static final int DEFAULT_PRIORITY = Notification.PRIORITY_DEFAULT;
- private static final int DEFAULT_VISIBILITY =
- NotificationListenerService.Ranking.VISIBILITY_NO_OVERRIDE;
+ private static final int DEFAULT_VISIBILITY = Ranking.VISIBILITY_NO_OVERRIDE;
+ private static final int DEFAULT_IMPORTANCE = Ranking.IMPORTANCE_UNSPECIFIED;
private final NotificationSignalExtractor[] mSignalExtractors;
private final NotificationComparator mPreliminaryComparator = new NotificationComparator();
@@ -197,6 +199,7 @@
if (TAG_TOPIC.equals(tagName)) {
int priority = safeInt(parser, ATT_PRIORITY, DEFAULT_PRIORITY);
int vis = safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY);
+ int importance = safeInt(parser, ATT_IMPORTANCE, DEFAULT_IMPORTANCE);
String id = parser.getAttributeValue(null, ATT_TOPIC_ID);
CharSequence label = parser.getAttributeValue(null, ATT_TOPIC_LABEL);
@@ -209,6 +212,9 @@
if (vis != DEFAULT_VISIBILITY) {
topic.visibility = vis;
}
+ if (importance != DEFAULT_IMPORTANCE) {
+ topic.importance = importance;
+ }
r.topics.put(id, topic);
}
}
@@ -267,6 +273,9 @@
if (t.visibility != DEFAULT_VISIBILITY) {
out.attribute(null, ATT_VISIBILITY, Integer.toString(t.visibility));
}
+ if (t.importance != DEFAULT_IMPORTANCE) {
+ out.attribute(null, ATT_IMPORTANCE, Integer.toString(t.importance));
+ }
out.endTag(null, TAG_TOPIC);
}
}
@@ -403,6 +412,20 @@
updateConfig();
}
+ @Override
+ public int getTopicImportance(String packageName, int uid, Notification.Topic topic) {
+ final Record r = getOrCreateRecord(packageName, uid);
+ return getOrCreateTopic(r, topic).importance;
+ }
+
+ @Override
+ public void setTopicImportance(String pkgName, int uid, Notification.Topic topic,
+ int importance) {
+ final Record r = getOrCreateRecord(pkgName, uid);
+ getOrCreateTopic(r, topic).importance = importance;
+ updateConfig();
+ }
+
private Topic getOrCreateTopic(Record r, Notification.Topic topic) {
if (topic == null) {
topic = createDefaultTopic();
@@ -468,6 +491,10 @@
pw.print(" visibility=");
pw.print(Notification.visibilityToString(t.visibility));
}
+ if (t.importance != DEFAULT_IMPORTANCE) {
+ pw.print(" importance=");
+ pw.print(Ranking.importanceToString(t.importance));
+ }
pw.println();
}
}
@@ -512,6 +539,7 @@
Notification.Topic topic;
int priority = DEFAULT_PRIORITY;
int visibility = DEFAULT_VISIBILITY;
+ int importance = DEFAULT_IMPORTANCE;
public Topic(Notification.Topic topic) {
this.topic = topic;
diff --git a/services/core/java/com/android/server/notification/TopicImportanceExtractor.java b/services/core/java/com/android/server/notification/TopicImportanceExtractor.java
new file mode 100644
index 0000000..01770d0
--- /dev/null
+++ b/services/core/java/com/android/server/notification/TopicImportanceExtractor.java
@@ -0,0 +1,56 @@
+/**
+* Copyright (C) 2015 The Android Open 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.notification;
+
+import android.content.Context;
+import android.util.Slog;
+
+/**
+ * Determines the importance of the given notification.
+ */
+public class TopicImportanceExtractor implements NotificationSignalExtractor {
+ private static final String TAG = "ImportantTopicExtractor";
+ private static final boolean DBG = false;
+
+ private RankingConfig mConfig;
+
+ public void initialize(Context ctx, NotificationUsageStats usageStats) {
+ if (DBG) Slog.d(TAG, "Initializing " + getClass().getSimpleName() + ".");
+ }
+
+ public RankingReconsideration process(NotificationRecord record) {
+ if (record == null || record.getNotification() == null) {
+ if (DBG) Slog.d(TAG, "skipping empty notification");
+ return null;
+ }
+
+ if (mConfig == null) {
+ if (DBG) Slog.d(TAG, "missing config");
+ return null;
+ }
+
+ final int topicImportance = mConfig.getTopicImportance(record.sbn.getPackageName(),
+ record.sbn.getUid(), record.sbn.getNotification().getTopic());
+ record.setTopicImportance(topicImportance);
+
+ return null;
+ }
+
+ @Override
+ public void setConfig(RankingConfig config) {
+ mConfig = config;
+ }
+}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index dbdc3f4..3c891df 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -41,6 +41,7 @@
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
+import android.os.Process;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings.Global;
@@ -274,7 +275,7 @@
newConfig = mConfig.copy();
}
final String ruleId = automaticZenRule.getId();
- ZenModeConfig.ZenRule rule = new ZenModeConfig.ZenRule();
+ ZenModeConfig.ZenRule rule;
if (ruleId == null) {
throw new IllegalArgumentException("Rule doesn't exist");
} else {
@@ -307,13 +308,32 @@
return setConfig(newConfig, reason, true);
}
+ public boolean removeAutomaticZenRules(String packageName, String reason) {
+ ZenModeConfig newConfig;
+ synchronized (mConfig) {
+ if (mConfig == null) return false;
+ newConfig = mConfig.copy();
+ }
+ for (int i = newConfig.automaticRules.size() - 1; i >= 0; i--) {
+ ZenRule rule = newConfig.automaticRules.get(newConfig.automaticRules.keyAt(i));
+ if (rule.component.getPackageName().equals(packageName)
+ && canManageAutomaticZenRule(rule)) {
+ newConfig.automaticRules.removeAt(i);
+ }
+ }
+ return setConfig(newConfig, reason, true);
+ }
+
public boolean canManageAutomaticZenRule(ZenRule rule) {
- if (mContext.checkCallingPermission(android.Manifest.permission.MANAGE_NOTIFICATIONS)
+ final int callingUid = Binder.getCallingUid();
+ if (callingUid == 0 || callingUid == Process.SYSTEM_UID) {
+ return true;
+ } else if (mContext.checkCallingPermission(android.Manifest.permission.MANAGE_NOTIFICATIONS)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
- String[] packages = mContext.getPackageManager().getPackagesForUid(
- Binder.getCallingUid());
+ String[] packages =
+ mContext.getPackageManager().getPackagesForUid(Binder.getCallingUid());
if (packages != null) {
final int packageCount = packages.length;
for (int i = 0; i < packageCount; i++) {
diff --git a/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java b/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java
new file mode 100644
index 0000000..8786350
--- /dev/null
+++ b/services/core/java/com/android/server/pm/EphemeralApplicationRegistry.java
@@ -0,0 +1,698 @@
+/*
+ * Copyright (C) 2015 The Android Open 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.Context;
+import android.content.pm.EphemeralApplicationInfo;
+import android.content.pm.PackageParser;
+import android.content.pm.PackageUserState;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Binder;
+import android.os.Environment;
+import android.provider.Settings;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.Xml;
+import com.android.internal.annotations.GuardedBy;
+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 org.xmlpull.v1.XmlSerializer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This class is a part of the package manager service that is responsible
+ * for managing data associated with ephemeral apps such as cached uninstalled
+ * ephemeral apps and ephemeral apps' cookies.
+ */
+class EphemeralApplicationRegistry {
+ private static final boolean DEBUG = false;
+
+ private static final String LOG_TAG = "EphemeralAppRegistry";
+
+ private static final long DEFAULT_UNINSTALLED_EPHEMERAL_APP_CACHE_DURATION_MILLIS =
+ DEBUG ? 60 * 1000L /* one min */ : 30 * 24 * 60 * 60 * 1000L; /* one month */
+
+ private final static char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
+
+ private static final String EPHEMERAL_APPS_FOLDER = "ephemeral";
+ private static final String EPHEMERAL_APP_ICON_FILE = "icon.png";
+ private static final String EPHEMERAL_APP_COOKIE_FILE_PREFIX = "cookie_";
+ private static final String EPHEMERAL_APP_COOKIE_FILE_SIFFIX = ".dat";
+ private static final String EPHEMERAL_APP_METADATA_FILE = "metadata.xml";
+
+ private static final String TAG_PACKAGE = "package";
+ private static final String TAG_PERMS = "perms";
+ private static final String TAG_PERM = "perm";
+
+ private static final String ATTR_LABEL = "label";
+ private static final String ATTR_NAME = "name";
+ private static final String ATTR_GRANTED = "granted";
+
+ private final PackageManagerService mService;
+
+ @GuardedBy("mService.mPackages")
+ private SparseArray<List<UninstalledEphemeralAppState>> mUninstalledEphemeralApps;
+
+ public EphemeralApplicationRegistry(PackageManagerService service) {
+ mService = service;
+ }
+
+ public byte[] getEphemeralApplicationCookieLPw(String packageName, int userId) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ File cookieFile = peekEphemeralCookieFile(packageName, userId);
+ if (cookieFile != null && cookieFile.exists()) {
+ try {
+ return IoUtils.readFileAsByteArray(cookieFile.toString());
+ } catch (IOException e) {
+ Slog.w(LOG_TAG, "Error reading cookie file: " + cookieFile);
+ }
+ }
+ return null;
+ }
+
+ public boolean setEphemeralApplicationCookieLPw(String packageName,
+ byte[] cookie, int userId) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ PackageParser.Package pkg = mService.mPackages.get(packageName);
+ if (pkg == null) {
+ return false;
+ }
+
+ if (!isValidCookie(mService.mContext, cookie)) {
+ return false;
+ }
+
+ File appDir = getEphemeralApplicationDir(pkg.packageName, userId);
+ if (!appDir.exists() && !appDir.mkdirs()) {
+ return false;
+ }
+
+ File cookieFile = computeEphemeralCookieFile(pkg, userId);
+ if (cookieFile.exists() && !cookieFile.delete()) {
+ return false;
+ }
+
+ try (FileOutputStream fos = new FileOutputStream(cookieFile)) {
+ fos.write(cookie, 0, cookie.length);
+ } catch (IOException e) {
+ Slog.w(LOG_TAG, "Error writing cookie file: " + cookieFile);
+ return false;
+ }
+ return true;
+ }
+
+ public Bitmap getEphemeralApplicationIconLPw(String packageName, int userId) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ File iconFile = new File(getEphemeralApplicationDir(packageName, userId),
+ EPHEMERAL_APP_ICON_FILE);
+ if (iconFile.exists()) {
+ return BitmapFactory.decodeFile(iconFile.toString());
+ }
+ return null;
+ }
+
+ public List<EphemeralApplicationInfo> getEphemeralApplicationsLPw(int userId) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ List<EphemeralApplicationInfo> result = getInstalledEphemeralApplicationsLPr(userId);
+ result.addAll(getUninstalledEphemeralApplicationsLPr(userId));
+ return result;
+ }
+
+ public void onPackageInstalledLPw(PackageParser.Package pkg) {
+ PackageSetting ps = (PackageSetting) pkg.mExtras;
+ if (ps == null) {
+ return;
+ }
+ for (int userId : UserManagerService.getInstance().getUserIds()) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ // Ignore not installed apps
+ if (mService.mPackages.get(pkg.packageName) == null || !ps.getInstalled(userId)) {
+ continue;
+ }
+
+ // Propagate permissions before removing any state
+ propagateEphemeralAppPermissionsIfNeeded(pkg, userId);
+
+ // Remove the in-memory state
+ if (mUninstalledEphemeralApps != null) {
+ List<UninstalledEphemeralAppState> uninstalledAppStates =
+ mUninstalledEphemeralApps.get(userId);
+ if (uninstalledAppStates != null) {
+ final int appCount = uninstalledAppStates.size();
+ for (int i = 0; i < appCount; i++) {
+ UninstalledEphemeralAppState uninstalledAppState =
+ uninstalledAppStates.get(i);
+ if (uninstalledAppState.mEphemeralApplicationInfo
+ .getPackageName().equals(pkg.packageName)) {
+ uninstalledAppStates.remove(i);
+ break;
+ }
+ }
+ }
+ }
+
+ // Remove the on-disk state except the cookie
+ File ephemeralAppDir = getEphemeralApplicationDir(pkg.packageName, userId);
+ new File(ephemeralAppDir, EPHEMERAL_APP_METADATA_FILE).delete();
+ new File(ephemeralAppDir, EPHEMERAL_APP_ICON_FILE).delete();
+
+ // If app signature changed - wipe the cookie
+ File currentCookieFile = peekEphemeralCookieFile(pkg.packageName, userId);
+ if (currentCookieFile == null) {
+ continue;
+ }
+ File expectedCookeFile = computeEphemeralCookieFile(pkg, userId);
+ if (!currentCookieFile.equals(expectedCookeFile)) {
+ Slog.i(LOG_TAG, "Signature for package " + pkg.packageName
+ + " changed - dropping cookie");
+ currentCookieFile.delete();
+ }
+ }
+ }
+
+ public void onPackageUninstalledLPw(PackageParser.Package pkg) {
+ PackageSetting ps = (PackageSetting) pkg.mExtras;
+ if (ps == null) {
+ return;
+ }
+ for (int userId : UserManagerService.getInstance().getUserIds()) {
+ pruneUninstalledEphemeralAppsLPw(userId);
+
+ if (mService.mPackages.get(pkg.packageName) != null && ps.getInstalled(userId)) {
+ continue;
+ }
+
+ if (pkg.applicationInfo.isEphemeralApp()) {
+ // Add a record for an uninstalled ephemeral app
+ addUninstalledEphemeralAppLPw(pkg, userId);
+ } else {
+ // Deleting an app prunes all ephemeral state such as cookie
+ deleteDir(getEphemeralApplicationDir(pkg.packageName, userId));
+ }
+ }
+ }
+
+ public void onUserRemovedLPw(int userId) {
+ if (mUninstalledEphemeralApps != null) {
+ mUninstalledEphemeralApps.remove(userId);
+ }
+ deleteDir(getEphemeralApplicationsDir(userId));
+ }
+
+ private void addUninstalledEphemeralAppLPw(PackageParser.Package pkg, int userId) {
+ EphemeralApplicationInfo uninstalledApp = createEphemeralAppInfoForPackage(pkg, userId);
+ if (uninstalledApp == null) {
+ return;
+ }
+ if (mUninstalledEphemeralApps == null) {
+ mUninstalledEphemeralApps = new SparseArray<>();
+ }
+ List<UninstalledEphemeralAppState> uninstalledAppStates =
+ mUninstalledEphemeralApps.get(userId);
+ if (uninstalledAppStates == null) {
+ uninstalledAppStates = new ArrayList<>();
+ mUninstalledEphemeralApps.put(userId, uninstalledAppStates);
+ }
+ UninstalledEphemeralAppState uninstalledAppState = new UninstalledEphemeralAppState(
+ uninstalledApp, System.currentTimeMillis());
+ uninstalledAppStates.add(uninstalledAppState);
+
+ writeUninstalledEphemeralAppMetadata(uninstalledApp, userId);
+ writeEphemeralApplicationIconLPw(pkg, userId);
+ }
+
+ private void writeEphemeralApplicationIconLPw(PackageParser.Package pkg, int userId) {
+ File appDir = getEphemeralApplicationDir(pkg.packageName, userId);
+ if (!appDir.exists()) {
+ return;
+ }
+
+ Drawable icon = pkg.applicationInfo.loadIcon(mService.mContext.getPackageManager());
+
+ final Bitmap bitmap;
+ if (icon instanceof BitmapDrawable) {
+ bitmap = ((BitmapDrawable) icon).getBitmap();
+ } else {
+ bitmap = Bitmap.createBitmap(icon.getIntrinsicWidth(),
+ icon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+ icon.draw(canvas);
+ }
+
+ File iconFile = new File(getEphemeralApplicationDir(pkg.packageName, userId),
+ EPHEMERAL_APP_ICON_FILE);
+
+ try (FileOutputStream out = new FileOutputStream(iconFile)) {
+ bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
+ } catch (Exception e) {
+ Slog.e(LOG_TAG, "Error writing ephemeral app icon", e);
+ }
+ }
+
+ private void pruneUninstalledEphemeralAppsLPw(int userId) {
+ final long maxCacheDurationMillis = Settings.Global.getLong(
+ mService.mContext.getContentResolver(),
+ Settings.Global.UNINSTALLED_EPHEMERAL_APP_CACHE_DURATION_MILLIS,
+ DEFAULT_UNINSTALLED_EPHEMERAL_APP_CACHE_DURATION_MILLIS);
+
+ // Prune in-memory state
+ if (mUninstalledEphemeralApps != null) {
+ List<UninstalledEphemeralAppState> uninstalledAppStates =
+ mUninstalledEphemeralApps.get(userId);
+ if (uninstalledAppStates != null) {
+ final int appCount = uninstalledAppStates.size();
+ for (int j = appCount - 1; j >= 0; j--) {
+ UninstalledEphemeralAppState uninstalledAppState = uninstalledAppStates.get(j);
+ final long elapsedCachingMillis = System.currentTimeMillis()
+ - uninstalledAppState.mTimestamp;
+ if (elapsedCachingMillis > maxCacheDurationMillis) {
+ uninstalledAppStates.remove(j);
+ }
+ }
+ if (uninstalledAppStates.isEmpty()) {
+ mUninstalledEphemeralApps.remove(userId);
+ }
+ }
+ }
+
+ // Prune on-disk state
+ File ephemeralAppsDir = getEphemeralApplicationsDir(userId);
+ if (!ephemeralAppsDir.exists()) {
+ return;
+ }
+ File[] files = ephemeralAppsDir.listFiles();
+ if (files == null) {
+ return;
+ }
+ for (File ephemeralDir : files) {
+ if (!ephemeralDir.isDirectory()) {
+ continue;
+ }
+
+ File metadataFile = new File(ephemeralDir, EPHEMERAL_APP_METADATA_FILE);
+ if (!metadataFile.exists()) {
+ continue;
+ }
+
+ final long elapsedCachingMillis = System.currentTimeMillis()
+ - metadataFile.lastModified();
+ if (elapsedCachingMillis > maxCacheDurationMillis) {
+ deleteDir(ephemeralDir);
+ }
+ }
+ }
+
+ private List<EphemeralApplicationInfo> getInstalledEphemeralApplicationsLPr(int userId) {
+ List<EphemeralApplicationInfo> result = null;
+
+ final int packageCount = mService.mPackages.size();
+ for (int i = 0; i < packageCount; i++) {
+ PackageParser.Package pkg = mService.mPackages.valueAt(i);
+ if (!pkg.applicationInfo.isEphemeralApp()) {
+ continue;
+ }
+ EphemeralApplicationInfo info = createEphemeralAppInfoForPackage(pkg, userId);
+ if (info == null) {
+ continue;
+ }
+ if (result == null) {
+ result = new ArrayList<>();
+ }
+ result.add(info);
+ }
+
+ return result;
+ }
+
+ private EphemeralApplicationInfo createEphemeralAppInfoForPackage(
+ PackageParser.Package pkg, int userId) {
+ PackageSetting ps = (PackageSetting) pkg.mExtras;
+ if (ps == null) {
+ return null;
+ }
+ PackageUserState userState = ps.readUserState(userId);
+ if (userState == null || !userState.installed || userState.hidden) {
+ return null;
+ }
+
+ String[] requestedPermissions = new String[pkg.requestedPermissions.size()];
+ pkg.requestedPermissions.toArray(requestedPermissions);
+
+ Set<String> permissions = ps.getPermissionsState().getPermissions(userId);
+ String[] grantedPermissions = new String[permissions.size()];
+ permissions.toArray(grantedPermissions);
+
+ return new EphemeralApplicationInfo(pkg.applicationInfo,
+ requestedPermissions, grantedPermissions);
+ }
+
+ private List<EphemeralApplicationInfo> getUninstalledEphemeralApplicationsLPr(int userId) {
+ List<UninstalledEphemeralAppState> uninstalledAppStates =
+ getUninstalledEphemeralAppStatesLPr(userId);
+ if (uninstalledAppStates == null || uninstalledAppStates.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ List<EphemeralApplicationInfo> uninstalledApps = new ArrayList<>();
+ final int stateCount = uninstalledAppStates.size();
+ for (int i = 0; i < stateCount; i++) {
+ UninstalledEphemeralAppState uninstalledAppState = uninstalledAppStates.get(i);
+ uninstalledApps.add(uninstalledAppState.mEphemeralApplicationInfo);
+ }
+ return uninstalledApps;
+ }
+
+ private void propagateEphemeralAppPermissionsIfNeeded(PackageParser.Package pkg, int userId) {
+ EphemeralApplicationInfo appInfo = getOrParseUninstalledEphemeralAppInfo(pkg.packageName, userId);
+ if (appInfo == null) {
+ return;
+ }
+ if (ArrayUtils.isEmpty(appInfo.getGrantedPermissions())) {
+ return;
+ }
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ for (String grantedPermission : appInfo.getGrantedPermissions()) {
+ mService.grantRuntimePermission(pkg.packageName, grantedPermission, userId);
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ private EphemeralApplicationInfo getOrParseUninstalledEphemeralAppInfo(String packageName,
+ int userId) {
+ if (mUninstalledEphemeralApps != null) {
+ List<UninstalledEphemeralAppState> uninstalledAppStates =
+ mUninstalledEphemeralApps.get(userId);
+ if (uninstalledAppStates != null) {
+ final int appCount = uninstalledAppStates.size();
+ for (int i = 0; i < appCount; i++) {
+ UninstalledEphemeralAppState uninstalledAppState = uninstalledAppStates.get(i);
+ if (uninstalledAppState.mEphemeralApplicationInfo
+ .getPackageName().equals(packageName)) {
+ return uninstalledAppState.mEphemeralApplicationInfo;
+ }
+ }
+ }
+ }
+
+ File metadataFile = new File(getEphemeralApplicationDir(packageName, userId),
+ EPHEMERAL_APP_METADATA_FILE);
+ UninstalledEphemeralAppState uninstalledAppState = parseMetadataFile(metadataFile);
+ if (uninstalledAppState == null) {
+ return null;
+ }
+
+ return uninstalledAppState.mEphemeralApplicationInfo;
+ }
+
+ private List<UninstalledEphemeralAppState> getUninstalledEphemeralAppStatesLPr(int userId) {
+ List<UninstalledEphemeralAppState> uninstalledAppStates = null;
+ if (mUninstalledEphemeralApps != null) {
+ uninstalledAppStates = mUninstalledEphemeralApps.get(userId);
+ if (uninstalledAppStates != null) {
+ return uninstalledAppStates;
+ }
+ }
+
+ File ephemeralAppsDir = getEphemeralApplicationsDir(userId);
+ if (ephemeralAppsDir.exists()) {
+ File[] files = ephemeralAppsDir.listFiles();
+ if (files != null) {
+ for (File ephemeralDir : files) {
+ if (!ephemeralDir.isDirectory()) {
+ continue;
+ }
+ File metadataFile = new File(ephemeralDir,
+ EPHEMERAL_APP_METADATA_FILE);
+ UninstalledEphemeralAppState uninstalledAppState =
+ parseMetadataFile(metadataFile);
+ if (uninstalledAppState == null) {
+ continue;
+ }
+ if (uninstalledAppStates == null) {
+ uninstalledAppStates = new ArrayList<>();
+ }
+ uninstalledAppStates.add(uninstalledAppState);
+ }
+ }
+ }
+
+ if (uninstalledAppStates != null) {
+ if (mUninstalledEphemeralApps == null) {
+ mUninstalledEphemeralApps = new SparseArray<>();
+ }
+ mUninstalledEphemeralApps.put(userId, uninstalledAppStates);
+ }
+
+ return uninstalledAppStates;
+ }
+
+ private static boolean isValidCookie(Context context, byte[] cookie) {
+ if (ArrayUtils.isEmpty(cookie)) {
+ return true;
+ }
+ return cookie.length <= context.getPackageManager().getEphemeralCookieMaxSizeBytes();
+ }
+
+ private static UninstalledEphemeralAppState parseMetadataFile(File metadataFile) {
+ if (!metadataFile.exists()) {
+ return null;
+ }
+ FileInputStream in;
+ try {
+ in = new AtomicFile(metadataFile).openRead();
+ } catch (FileNotFoundException fnfe) {
+ Slog.i(LOG_TAG, "No ephemeral metadata file");
+ return null;
+ }
+
+ final File ephemeralDir = metadataFile.getParentFile();
+ final long timestamp = metadataFile.lastModified();
+ final String packageName = ephemeralDir.getName();
+
+ try {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(in, StandardCharsets.UTF_8.name());
+ return new UninstalledEphemeralAppState(
+ parseMetadata(parser, packageName), timestamp);
+ } catch (XmlPullParserException | IOException e) {
+ throw new IllegalStateException("Failed parsing ephemeral"
+ + " metadata file: " + metadataFile, e);
+ } finally {
+ IoUtils.closeQuietly(in);
+ }
+ }
+
+ private static File computeEphemeralCookieFile(PackageParser.Package pkg, int userId) {
+ File appDir = getEphemeralApplicationDir(pkg.packageName, userId);
+ String cookieFile = EPHEMERAL_APP_COOKIE_FILE_PREFIX + computePackageCertDigest(pkg)
+ + EPHEMERAL_APP_COOKIE_FILE_SIFFIX;
+ return new File(appDir, cookieFile);
+ }
+
+ private static File peekEphemeralCookieFile(String packageName, int userId) {
+ File appDir = getEphemeralApplicationDir(packageName, userId);
+ if (!appDir.exists()) {
+ return null;
+ }
+ for (File file : appDir.listFiles()) {
+ if (!file.isDirectory()
+ && file.getName().startsWith(EPHEMERAL_APP_COOKIE_FILE_PREFIX)
+ && file.getName().endsWith(EPHEMERAL_APP_COOKIE_FILE_SIFFIX)) {
+ return file;
+ }
+ }
+ return null;
+ }
+
+ private static EphemeralApplicationInfo parseMetadata(XmlPullParser parser, String packageName)
+ throws IOException, XmlPullParserException {
+ final int outerDepth = parser.getDepth();
+ while (XmlUtils.nextElementWithin(parser, outerDepth)) {
+ if (TAG_PACKAGE.equals(parser.getName())) {
+ return parsePackage(parser, packageName);
+ }
+ }
+ return null;
+ }
+
+ private static EphemeralApplicationInfo parsePackage(XmlPullParser parser, String packageName)
+ throws IOException, XmlPullParserException {
+ String label = parser.getAttributeValue(null, ATTR_LABEL);
+
+ List<String> outRequestedPermissions = new ArrayList<>();
+ List<String> outGrantedPermissions = new ArrayList<>();
+
+ final int outerDepth = parser.getDepth();
+ while (XmlUtils.nextElementWithin(parser, outerDepth)) {
+ if (TAG_PERMS.equals(parser.getName())) {
+ parsePermissions(parser, outRequestedPermissions, outGrantedPermissions);
+ }
+ }
+
+ String[] requestedPermissions = new String[outRequestedPermissions.size()];
+ outRequestedPermissions.toArray(requestedPermissions);
+
+ String[] grantedPermissions = new String[outGrantedPermissions.size()];
+ outGrantedPermissions.toArray(grantedPermissions);
+
+ return new EphemeralApplicationInfo(packageName, label,
+ requestedPermissions, grantedPermissions);
+ }
+
+ private static void parsePermissions(XmlPullParser parser, List<String> outRequestedPermissions,
+ List<String> outGrantedPermissions) throws IOException, XmlPullParserException {
+ final int outerDepth = parser.getDepth();
+ while (XmlUtils.nextElementWithin(parser,outerDepth)) {
+ if (TAG_PERM.equals(parser.getName())) {
+ String permission = XmlUtils.readStringAttribute(parser, ATTR_NAME);
+ outRequestedPermissions.add(permission);
+ if (XmlUtils.readBooleanAttribute(parser, ATTR_GRANTED)) {
+ outGrantedPermissions.add(permission);
+ }
+ }
+ }
+ }
+
+ private void writeUninstalledEphemeralAppMetadata(
+ EphemeralApplicationInfo ephemeralApp, int userId) {
+ File appDir = getEphemeralApplicationDir(ephemeralApp.getPackageName(), userId);
+ if (!appDir.exists() && !appDir.mkdirs()) {
+ return;
+ }
+
+ File metadataFile = new File(appDir, EPHEMERAL_APP_METADATA_FILE);
+
+ AtomicFile destination = new AtomicFile(metadataFile);
+ FileOutputStream out = null;
+ try {
+ out = destination.startWrite();
+
+ XmlSerializer serializer = Xml.newSerializer();
+ serializer.setOutput(out, StandardCharsets.UTF_8.name());
+ serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
+
+ serializer.startDocument(null, true);
+
+ serializer.startTag(null, TAG_PACKAGE);
+ serializer.attribute(null, ATTR_LABEL, ephemeralApp.loadLabel(
+ mService.mContext.getPackageManager()).toString());
+
+ serializer.startTag(null, TAG_PERMS);
+ for (String permission : ephemeralApp.getRequestedPermissions()) {
+ serializer.startTag(null, TAG_PERM);
+ serializer.attribute(null, ATTR_NAME, permission);
+ if (ArrayUtils.contains(ephemeralApp.getGrantedPermissions(), permission)) {
+ serializer.attribute(null, ATTR_GRANTED, String.valueOf(true));
+ }
+ serializer.endTag(null, TAG_PERM);
+ }
+ serializer.endTag(null, TAG_PERMS);
+
+ serializer.endTag(null, TAG_PACKAGE);
+
+ serializer.endDocument();
+ destination.finishWrite(out);
+ } catch (Throwable t) {
+ Slog.wtf(LOG_TAG, "Failed to write ephemeral state, restoring backup", t);
+ destination.failWrite(out);
+ } finally {
+ IoUtils.closeQuietly(out);
+ }
+ }
+
+ private static String computePackageCertDigest(PackageParser.Package pkg) {
+ MessageDigest messageDigest;
+ try {
+ messageDigest = MessageDigest.getInstance("SHA256");
+ } catch (NoSuchAlgorithmException e) {
+ /* can't happen */
+ return null;
+ }
+
+ messageDigest.update(pkg.mSignatures[0].toByteArray());
+
+ final byte[] digest = messageDigest.digest();
+ final int digestLength = digest.length;
+ final int charCount = 2 * digestLength;
+
+ final char[] chars = new char[charCount];
+ for (int i = 0; i < digestLength; i++) {
+ final int byteHex = digest[i] & 0xFF;
+ chars[i * 2] = HEX_ARRAY[byteHex >>> 4];
+ chars[i * 2 + 1] = HEX_ARRAY[byteHex & 0x0F];
+ }
+ return new String(chars);
+ }
+
+ private static File getEphemeralApplicationsDir(int userId) {
+ return new File(Environment.getUserSystemDirectory(userId),
+ EPHEMERAL_APPS_FOLDER);
+ }
+
+ private static File getEphemeralApplicationDir(String packageName, int userId) {
+ return new File (getEphemeralApplicationsDir(userId), packageName);
+ }
+
+ private static void deleteDir(File dir) {
+ File[] files = dir.listFiles();
+ if (files != null) {
+ for (File file : dir.listFiles()) {
+ deleteDir(file);
+ }
+ }
+ dir.delete();
+ }
+
+ private static final class UninstalledEphemeralAppState {
+ final EphemeralApplicationInfo mEphemeralApplicationInfo;
+ final long mTimestamp;
+
+ public UninstalledEphemeralAppState(EphemeralApplicationInfo ephemeralApp,
+ long timestamp) {
+ mEphemeralApplicationInfo = ephemeralApp;
+ mTimestamp = timestamp;
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 5d1906c..7e4e46b 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -157,7 +157,6 @@
private final PackageManagerService mPm;
private AppOpsManager mAppOps;
- private StorageManager mStorage;
private final HandlerThread mInstallThread;
private final Handler mInstallHandler;
@@ -220,7 +219,8 @@
synchronized (mSessions) {
readSessionsLocked();
- reconcileStagesLocked(StorageManager.UUID_PRIVATE_INTERNAL);
+ reconcileStagesLocked(StorageManager.UUID_PRIVATE_INTERNAL, false /*isEphemeral*/);
+ reconcileStagesLocked(StorageManager.UUID_PRIVATE_INTERNAL, true /*isEphemeral*/);
final ArraySet<File> unclaimedIcons = newArraySet(
mSessionsDir.listFiles());
@@ -241,11 +241,10 @@
public void systemReady() {
mAppOps = mContext.getSystemService(AppOpsManager.class);
- mStorage = mContext.getSystemService(StorageManager.class);
}
- private void reconcileStagesLocked(String volumeUuid) {
- final File stagingDir = buildStagingDir(volumeUuid);
+ private void reconcileStagesLocked(String volumeUuid, boolean isEphemeral) {
+ final File stagingDir = buildStagingDir(volumeUuid, isEphemeral);
final ArraySet<File> unclaimedStages = newArraySet(
stagingDir.listFiles(sStageFilter));
@@ -270,7 +269,7 @@
public void onPrivateVolumeMounted(String volumeUuid) {
synchronized (mSessions) {
- reconcileStagesLocked(volumeUuid);
+ reconcileStagesLocked(volumeUuid, false /*isEphemeral*/);
}
}
@@ -311,12 +310,12 @@
}
@Deprecated
- public File allocateStageDirLegacy(String volumeUuid) throws IOException {
+ public File allocateStageDirLegacy(String volumeUuid, boolean isEphemeral) throws IOException {
synchronized (mSessions) {
try {
final int sessionId = allocateSessionIdLocked();
mLegacySessions.put(sessionId, true);
- final File stageDir = buildStageDir(volumeUuid, sessionId);
+ final File stageDir = buildStageDir(volumeUuid, sessionId, isEphemeral);
prepareStageDir(stageDir);
return stageDir;
} catch (IllegalStateException e) {
@@ -678,7 +677,9 @@
File stageDir = null;
String stageCid = null;
if ((params.installFlags & PackageManager.INSTALL_INTERNAL) != 0) {
- stageDir = buildStageDir(params.volumeUuid, sessionId);
+ final boolean isEphemeral =
+ (params.installFlags & PackageManager.INSTALL_EPHEMERAL) != 0;
+ stageDir = buildStageDir(params.volumeUuid, sessionId, isEphemeral);
} else {
stageCid = buildExternalStageCid(sessionId);
}
@@ -777,12 +778,15 @@
throw new IllegalStateException("Failed to allocate session ID");
}
- private File buildStagingDir(String volumeUuid) {
+ private File buildStagingDir(String volumeUuid, boolean isEphemeral) {
+ if (isEphemeral) {
+ return Environment.getDataAppEphemeralDirectory(volumeUuid);
+ }
return Environment.getDataAppDirectory(volumeUuid);
}
- private File buildStageDir(String volumeUuid, int sessionId) {
- final File stagingDir = buildStagingDir(volumeUuid);
+ private File buildStageDir(String volumeUuid, int sessionId, boolean isEphemeral) {
+ final File stagingDir = buildStagingDir(volumeUuid, isEphemeral);
return new File(stagingDir, "vmdl" + sessionId + ".tmp");
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 0fde27f..3a8a988 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -34,9 +34,9 @@
import static android.content.pm.PackageManager.INSTALL_EXTERNAL;
import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS;
import static android.content.pm.PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER;
-import static android.content.pm.PackageManager.INSTALL_FAILED_DEXOPT;
import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION;
+import static android.content.pm.PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID;
import static android.content.pm.PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
import static android.content.pm.PackageManager.INSTALL_FAILED_INTERNAL_ERROR;
import static android.content.pm.PackageManager.INSTALL_FAILED_INVALID_APK;
@@ -93,8 +93,6 @@
import android.app.IActivityManager;
import android.app.admin.IDevicePolicyManager;
import android.app.backup.IBackupManager;
-import android.app.usage.UsageStats;
-import android.app.usage.UsageStatsManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -107,6 +105,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.AppsQueryHelper;
+import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnPermissionsChangeListener;
import android.content.pm.IPackageDataObserver;
@@ -146,6 +145,7 @@
import android.content.pm.VerifierDeviceIdentity;
import android.content.pm.VerifierInfo;
import android.content.res.Resources;
+import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
import android.net.Uri;
import android.os.Debug;
@@ -202,6 +202,7 @@
import android.util.Xml;
import android.view.Display;
+import com.android.internal.annotations.GuardedBy;
import dalvik.system.DexFile;
import dalvik.system.VMRuntime;
@@ -209,7 +210,6 @@
import libcore.util.EmptyArray;
import com.android.internal.R;
-import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.EphemeralResolveInfo;
import com.android.internal.app.IMediaContainerService;
import com.android.internal.app.ResolverActivity;
@@ -452,6 +452,7 @@
/** Directory where installed third-party apps stored */
final File mAppInstallDir;
+ final File mEphemeralInstallDir;
/**
* Directory to which applications installed internally have their
@@ -513,6 +514,8 @@
// If a recursive restorecon of /data/data/<pkg> is needed.
private boolean mShouldRestoreconData = SELinuxMMAC.shouldRestorecon();
+ private final EphemeralApplicationRegistry mEphemeralApplicationRegistry;
+
public static final class SharedLibraryEntry {
public final String path;
public final String apk;
@@ -1372,6 +1375,7 @@
} break;
case POST_INSTALL: {
if (DEBUG_INSTALL) Log.v(TAG, "Handling post-install for " + msg.arg1);
+
PostInstallData data = mRunningInstalls.get(msg.arg1);
mRunningInstalls.delete(msg.arg1);
boolean deleteOld = false;
@@ -1396,6 +1400,10 @@
args.installGrantPermissions);
}
+ synchronized (mPackages) {
+ mEphemeralApplicationRegistry.onPackageInstalledLPw(res.pkg);
+ }
+
// Determine the set of users who are adding this
// package for the first time vs. those who are seeing
// an update.
@@ -1429,19 +1437,33 @@
}
}
}
- sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
- packageName, extras, 0, null, null, firstUsers);
+ // don't broadcast for ephemeral installs/updates
+ final boolean isEphemeral = isEphemeral(res.pkg);
+ if (!isEphemeral) {
+ sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, packageName,
+ extras, 0 /*flags*/, null /*targetPackage*/,
+ null /*finishedReceiver*/, firstUsers);
+ }
final boolean update = res.removedInfo.removedPackage != null;
if (update) {
extras.putBoolean(Intent.EXTRA_REPLACING, true);
}
- sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED,
- packageName, extras, 0, null, null, updateUsers);
+ if (!isEphemeral) {
+ sendPackageBroadcast(Intent.ACTION_PACKAGE_ADDED, packageName,
+ extras, 0 /*flags*/, null /*targetPackage*/,
+ null /*finishedReceiver*/, updateUsers);
+ }
if (update) {
- sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
- packageName, extras, 0, null, null, updateUsers);
- sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
- null, null, 0, packageName, null, updateUsers);
+ if (!isEphemeral) {
+ sendPackageBroadcast(Intent.ACTION_PACKAGE_REPLACED,
+ packageName, extras, 0 /*flags*/,
+ null /*targetPackage*/, null /*finishedReceiver*/,
+ updateUsers);
+ sendPackageBroadcast(Intent.ACTION_MY_PACKAGE_REPLACED,
+ null /*package*/, null /*extras*/, 0 /*flags*/,
+ packageName /*targetPackage*/,
+ null /*finishedReceiver*/, updateUsers);
+ }
// treat asec-hosted packages like removable media on upgrade
if (res.pkg.isForwardLocked() || isExternal(res.pkg)) {
@@ -1968,6 +1990,7 @@
mAppDataDir = new File(dataDir, "data");
mAppInstallDir = new File(dataDir, "app");
mAppLib32InstallDir = new File(dataDir, "app-lib");
+ mEphemeralInstallDir = new File(dataDir, "app-ephemeral");
mAsecInternalPath = new File(dataDir, "app-asec").getPath();
mUserAppDataDir = new File(dataDir, "user");
mDrmAppPrivateInstallDir = new File(dataDir, "app-private");
@@ -2202,6 +2225,9 @@
scanDirTracedLI(mDrmAppPrivateInstallDir, PackageParser.PARSE_FORWARD_LOCK,
scanFlags | SCAN_REQUIRE_KNOWN, 0);
+ scanDirLI(mEphemeralInstallDir, PackageParser.PARSE_IS_EPHEMERAL,
+ scanFlags | SCAN_REQUIRE_KNOWN, 0);
+
/**
* Remove disable package settings for any updated system
* apps that were removed via an OTA. If they're not a
@@ -2387,6 +2413,8 @@
mEphemeralInstallerComponent = null;
mEphemeralResolverConnection = null;
}
+
+ mEphemeralApplicationRegistry = new EphemeralApplicationRegistry(this);
} // synchronized (mPackages)
} // synchronized (mInstallLock)
@@ -4072,8 +4100,15 @@
@Override
public boolean isProtectedBroadcast(String actionName) {
synchronized (mPackages) {
- return mProtectedBroadcasts.contains(actionName);
+ if (mProtectedBroadcasts.contains(actionName)) {
+ return true;
+ } else if (actionName != null
+ && actionName.startsWith("android.net.netmon.lingerExpired")) {
+ // TODO: remove this terrible hack
+ return true;
+ }
}
+ return false;
}
@Override
@@ -4868,15 +4903,21 @@
// Check for results in the current profile.
List<ResolveInfo> result = mActivities.queryIntent(
intent, resolvedType, flags, userId);
+ result = filterIfNotSystemUser(result, userId);
// Check for cross profile results.
+ boolean hasNonNegativePriorityResult = hasNonNegativePriority(result);
xpResolveInfo = queryCrossProfileIntents(
- matchingFilters, intent, resolvedType, flags, userId);
+ matchingFilters, intent, resolvedType, flags, userId,
+ hasNonNegativePriorityResult);
if (xpResolveInfo != null && isUserEnabled(xpResolveInfo.targetUserId)) {
- result.add(xpResolveInfo);
- Collections.sort(result, mResolvePrioritySorter);
+ boolean isVisibleToUser = filterIfNotSystemUser(
+ Collections.singletonList(xpResolveInfo), userId).size() > 0;
+ if (isVisibleToUser) {
+ result.add(xpResolveInfo);
+ Collections.sort(result, mResolvePrioritySorter);
+ }
}
- result = filterIfNotSystemUser(result, userId);
if (hasWebURI(intent)) {
CrossProfileDomainInfo xpDomainInfo = null;
final UserInfo parent = getProfileParent(userId);
@@ -5009,6 +5050,14 @@
return resolveInfos;
}
+ /**
+ * @param resolveInfos list of resolve infos in descending priority order
+ * @return if the list contains a resolve info with non-negative priority
+ */
+ private boolean hasNonNegativePriority(List<ResolveInfo> resolveInfos) {
+ return resolveInfos.size() > 0 && resolveInfos.get(0).priority >= 0;
+ }
+
private static boolean hasWebURI(Intent intent) {
if (intent.getData() == null) {
return false;
@@ -5212,10 +5261,10 @@
return null;
}
- // Return matching ResolveInfo if any for skip current profile intent filters.
+ // Return matching ResolveInfo in target user if any.
private ResolveInfo queryCrossProfileIntents(
List<CrossProfileIntentFilter> matchingFilters, Intent intent, String resolvedType,
- int flags, int sourceUserId) {
+ int flags, int sourceUserId, boolean matchInCurrentProfile) {
if (matchingFilters != null) {
// Two {@link CrossProfileIntentFilter}s can have the same targetUserId and
// match the same intent. For performance reasons, it is better not to
@@ -5225,8 +5274,12 @@
for (int i = 0; i < size; i++) {
CrossProfileIntentFilter filter = matchingFilters.get(i);
int targetUserId = filter.getTargetUserId();
- if ((filter.getFlags() & PackageManager.SKIP_CURRENT_PROFILE) == 0
- && !alreadyTriedUserIds.get(targetUserId)) {
+ boolean skipCurrentProfile =
+ (filter.getFlags() & PackageManager.SKIP_CURRENT_PROFILE) != 0;
+ boolean skipCurrentProfileIfNoMatchFound =
+ (filter.getFlags() & PackageManager.ONLY_IF_NO_MATCH_FOUND) != 0;
+ if (!skipCurrentProfile && !alreadyTriedUserIds.get(targetUserId)
+ && (!skipCurrentProfileIfNoMatchFound || !matchInCurrentProfile)) {
// Checking if there are activities in the target user that can handle the
// intent.
ResolveInfo resolveInfo = createForwardingResolveInfo(filter, intent,
@@ -5741,6 +5794,82 @@
}
}
+ @Override
+ public ParceledListSlice<EphemeralApplicationInfo> getEphemeralApplications(int userId) {
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS,
+ "getEphemeralApplications");
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
+ "getEphemeralApplications");
+ synchronized (mPackages) {
+ List<EphemeralApplicationInfo> ephemeralApps = mEphemeralApplicationRegistry
+ .getEphemeralApplicationsLPw(userId);
+ if (ephemeralApps != null) {
+ return new ParceledListSlice<>(ephemeralApps);
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public boolean isEphemeralApplication(String packageName, int userId) {
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
+ "isEphemeral");
+ if (!isCallerSameApp(packageName)) {
+ return false;
+ }
+ synchronized (mPackages) {
+ PackageParser.Package pkg = mPackages.get(packageName);
+ if (pkg != null) {
+ return pkg.applicationInfo.isEphemeralApp();
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public byte[] getEphemeralApplicationCookie(String packageName, int userId) {
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
+ "getCookie");
+ if (!isCallerSameApp(packageName)) {
+ return null;
+ }
+ synchronized (mPackages) {
+ return mEphemeralApplicationRegistry.getEphemeralApplicationCookieLPw(
+ packageName, userId);
+ }
+ }
+
+ @Override
+ public boolean setEphemeralApplicationCookie(String packageName, byte[] cookie, int userId) {
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
+ "setCookie");
+ if (!isCallerSameApp(packageName)) {
+ return false;
+ }
+ synchronized (mPackages) {
+ return mEphemeralApplicationRegistry.setEphemeralApplicationCookieLPw(
+ packageName, cookie, userId);
+ }
+ }
+
+ @Override
+ public Bitmap getEphemeralApplicationIcon(String packageName, int userId) {
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_EPHEMERAL_APPS,
+ "getEphemeralApplicationIcon");
+ enforceCrossUserPermission(Binder.getCallingUid(), userId, true, false,
+ "getEphemeralApplicationIcon");
+ synchronized (mPackages) {
+ return mEphemeralApplicationRegistry.getEphemeralApplicationIconLPw(
+ packageName, userId);
+ }
+ }
+
+ private boolean isCallerSameApp(String packageName) {
+ PackageParser.Package pkg = mPackages.get(packageName);
+ return pkg != null
+ && UserHandle.getAppId(Binder.getCallingUid()) == pkg.applicationInfo.uid;
+ }
+
public List<ApplicationInfo> getPersistentApplications(int flags) {
final ArrayList<ApplicationInfo> finalList = new ArrayList<ApplicationInfo>();
@@ -8397,9 +8526,9 @@
}
}
if ((p.info.protectionLevel&PermissionInfo.PROTECTION_FLAG_APPOP) != 0) {
- ArraySet<String> appOpPerms = mAppOpPermissionPackages.get(p.info.name);
- if (appOpPerms != null) {
- appOpPerms.remove(pkg.packageName);
+ ArraySet<String> appOpPkgs = mAppOpPermissionPackages.get(p.info.name);
+ if (appOpPkgs != null) {
+ appOpPkgs.remove(pkg.packageName);
}
}
}
@@ -8413,10 +8542,10 @@
String perm = pkg.requestedPermissions.get(i);
BasePermission bp = mSettings.mPermissions.get(perm);
if (bp != null && (bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_APPOP) != 0) {
- ArraySet<String> appOpPerms = mAppOpPermissionPackages.get(perm);
- if (appOpPerms != null) {
- appOpPerms.remove(pkg.packageName);
- if (appOpPerms.isEmpty()) {
+ ArraySet<String> appOpPkgs = mAppOpPermissionPackages.get(perm);
+ if (appOpPkgs != null) {
+ appOpPkgs.remove(pkg.packageName);
+ if (appOpPkgs.isEmpty()) {
mAppOpPermissionPackages.remove(perm);
}
}
@@ -9668,6 +9797,15 @@
if (r1.system != r2.system) {
return r1.system ? -1 : 1;
}
+ if (r1.activityInfo != null) {
+ return r1.activityInfo.packageName.compareTo(r2.activityInfo.packageName);
+ }
+ if (r1.serviceInfo != null) {
+ return r1.serviceInfo.packageName.compareTo(r2.serviceInfo.packageName);
+ }
+ if (r1.providerInfo != null) {
+ return r1.providerInfo.packageName.compareTo(r2.providerInfo.packageName);
+ }
return 0;
}
};
@@ -9871,6 +10009,11 @@
void installStage(String packageName, File stagedDir, String stagedCid,
IPackageInstallObserver2 observer, PackageInstaller.SessionParams sessionParams,
String installerPackageName, int installerUid, UserHandle user) {
+ if (DEBUG_EPHEMERAL) {
+ if ((sessionParams.installFlags & PackageManager.INSTALL_EPHEMERAL) != 0) {
+ Slog.d(TAG, "Ephemeral install of " + packageName);
+ }
+ }
final VerificationParams verifParams = new VerificationParams(
null, sessionParams.originatingUri, sessionParams.referrerUri,
sessionParams.originatingUid, null);
@@ -10262,6 +10405,13 @@
if (Build.IS_DEBUGGABLE && (installFlags & PackageManager.INSTALL_QUICK) != 0) {
return false;
}
+ // Ephemeral apps don't get the full verification treatment
+ if ((installFlags & PackageManager.INSTALL_EPHEMERAL) != 0) {
+ if (DEBUG_EPHEMERAL) {
+ Slog.d(TAG, "INSTALL_EPHEMERAL so skipping verification");
+ }
+ return false;
+ }
boolean ensureVerifyAppsEnabled = isUserRestricted(userId, UserManager.ENSURE_VERIFY_APPS);
@@ -10911,16 +11061,24 @@
final boolean onSd = (installFlags & PackageManager.INSTALL_EXTERNAL) != 0;
final boolean onInt = (installFlags & PackageManager.INSTALL_INTERNAL) != 0;
+ final boolean ephemeral = (installFlags & PackageManager.INSTALL_EPHEMERAL) != 0;
PackageInfoLite pkgLite = null;
if (onInt && onSd) {
// Check if both bits are set.
Slog.w(TAG, "Conflicting flags specified for installing on both internal and external");
ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
+ } else if (onSd && ephemeral) {
+ Slog.w(TAG, "Conflicting flags specified for installing ephemeral on external");
+ ret = PackageManager.INSTALL_FAILED_INVALID_INSTALL_LOCATION;
} else {
pkgLite = mContainerService.getMinimalPackageInfo(origin.resolvedPath, installFlags,
packageAbiOverride);
+ if (DEBUG_EPHEMERAL && ephemeral) {
+ Slog.v(TAG, "pkgLite for install: " + pkgLite);
+ }
+
/*
* If we have too little free space, try to free cache
* before giving up.
@@ -10980,6 +11138,13 @@
// Set the flag to install on external media.
installFlags |= PackageManager.INSTALL_EXTERNAL;
installFlags &= ~PackageManager.INSTALL_INTERNAL;
+ } else if (loc == PackageHelper.RECOMMEND_INSTALL_EPHEMERAL) {
+ if (DEBUG_EPHEMERAL) {
+ Slog.v(TAG, "...setting INSTALL_EPHEMERAL install flag");
+ }
+ installFlags |= PackageManager.INSTALL_EPHEMERAL;
+ installFlags &= ~(PackageManager.INSTALL_EXTERNAL
+ |PackageManager.INSTALL_INTERNAL);
} else {
// Make sure the flag for installing on external
// media is unset
@@ -11312,6 +11477,10 @@
return (installFlags & PackageManager.INSTALL_EXTERNAL) != 0;
}
+ protected boolean isEphemeral() {
+ return (installFlags & PackageManager.INSTALL_EPHEMERAL) != 0;
+ }
+
UserHandle getUser() {
return user;
}
@@ -11389,7 +11558,9 @@
}
try {
- final File tempDir = mInstallerService.allocateStageDirLegacy(volumeUuid);
+ final boolean isEphemeral = (installFlags & PackageManager.INSTALL_EPHEMERAL) != 0;
+ final File tempDir =
+ mInstallerService.allocateStageDirLegacy(volumeUuid, isEphemeral);
codeFile = tempDir;
resourceFile = tempDir;
} catch (IOException e) {
@@ -12184,6 +12355,8 @@
private void replacePackageLI(PackageParser.Package pkg, int parseFlags, int scanFlags,
UserHandle user, String installerPackageName, String volumeUuid,
PackageInstalledInfo res) {
+ final boolean isEphemeral = (parseFlags & PackageParser.PARSE_IS_EPHEMERAL) != 0;
+
final PackageParser.Package oldPackage;
final String pkgName = pkg.packageName;
final int[] allUsers;
@@ -12192,6 +12365,13 @@
// First find the old package info and check signatures
synchronized(mPackages) {
oldPackage = mPackages.get(pkgName);
+ final boolean oldIsEphemeral = oldPackage.applicationInfo.isEphemeralApp();
+ if (isEphemeral && !oldIsEphemeral) {
+ // can't downgrade from full to ephemeral
+ Slog.w(TAG, "Can't replace app with ephemeral: " + pkgName);
+ res.returnCode = PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID;
+ return;
+ }
if (DEBUG_INSTALL) Slog.d(TAG, "replacePackageLI: new=" + pkg + ", old=" + oldPackage);
final PackageSetting ps = mSettings.mPackages.get(pkgName);
if (shouldCheckUpgradeKeySetLP(ps, scanFlags)) {
@@ -12588,6 +12768,7 @@
final boolean onExternal = (((installFlags & PackageManager.INSTALL_EXTERNAL) != 0)
|| (args.volumeUuid != null));
final boolean quickInstall = ((installFlags & PackageManager.INSTALL_QUICK) != 0);
+ final boolean ephemeral = ((installFlags & PackageManager.INSTALL_EPHEMERAL) != 0);
boolean replace = false;
int scanFlags = SCAN_NEW_INSTALL | SCAN_UPDATE_SIGNATURE;
if (args.move != null) {
@@ -12599,12 +12780,21 @@
if (DEBUG_INSTALL) Slog.d(TAG, "installPackageLI: path=" + tmpPackageFile);
+ // Sanity check
+ if (ephemeral && (forwardLocked || onExternal)) {
+ Slog.i(TAG, "Incompatible ephemeral install; fwdLocked=" + forwardLocked
+ + " external=" + onExternal);
+ res.returnCode = PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID;
+ return;
+ }
+
// Retrieve PackageSettings and parse package
final int parseFlags = mDefParseFlags | PackageParser.PARSE_CHATTY
| PackageParser.PARSE_ENFORCE_CODE
| (forwardLocked ? PackageParser.PARSE_FORWARD_LOCK : 0)
| (onExternal ? PackageParser.PARSE_EXTERNAL_STORAGE : 0)
- | (quickInstall ? PackageParser.PARSE_SKIP_VERIFICATION : 0);
+ | (quickInstall ? PackageParser.PARSE_SKIP_VERIFICATION : 0)
+ | (ephemeral ? PackageParser.PARSE_IS_EPHEMERAL : 0);
PackageParser pp = new PackageParser();
pp.setSeparateProcesses(mSeparateProcesses);
pp.setDisplayMetrics(mMetrics);
@@ -12786,11 +12976,18 @@
}
- if (systemApp && onExternal) {
- // Disable updates to system apps on sdcard
- res.setError(INSTALL_FAILED_INVALID_INSTALL_LOCATION,
- "Cannot install updates to system apps on sdcard");
- return;
+ if (systemApp) {
+ if (onExternal) {
+ // Abort update; system app can't be replaced with app on sdcard
+ res.setError(INSTALL_FAILED_INVALID_INSTALL_LOCATION,
+ "Cannot install updates to system apps on sdcard");
+ return;
+ } else if (ephemeral) {
+ // Abort update; system app can't be replaced with an ephemeral app
+ res.setError(INSTALL_FAILED_EPHEMERAL_INVALID,
+ "Cannot update a system app with an ephemeral app");
+ return;
+ }
}
if (args.move != null) {
@@ -12986,6 +13183,14 @@
return (info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
}
+ private static boolean isEphemeral(PackageParser.Package pkg) {
+ return pkg.applicationInfo.isEphemeralApp();
+ }
+
+ private static boolean isEphemeral(PackageSetting ps) {
+ return ps.pkg != null && isEphemeral(ps.pkg);
+ }
+
private static boolean isSystemApp(PackageParser.Package pkg) {
return (pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
}
@@ -13008,6 +13213,9 @@
private int packageFlagsToInstallFlags(PackageSetting ps) {
int installFlags = 0;
+ if (isEphemeral(ps)) {
+ installFlags |= PackageManager.INSTALL_EPHEMERAL;
+ }
if (isExternal(ps) && TextUtils.isEmpty(ps.volumeUuid)) {
// This existing package was an external ASEC install when we have
// the external flag without a UUID
@@ -13181,11 +13389,14 @@
boolean removedForAllUsers = false;
boolean systemUpdate = false;
+ PackageParser.Package uninstalledPkg;
+
// for the uninstall-updates case and restricted profiles, remember the per-
// userhandle installed state
int[] allUsers;
boolean[] perUserInstalled;
synchronized (mPackages) {
+ uninstalledPkg = mPackages.get(packageName);
PackageSetting ps = mSettings.mPackages.get(packageName);
allUsers = sUserManager.getUserIds();
perUserInstalled = new boolean[allUsers.length];
@@ -13200,8 +13411,13 @@
true, allUsers, perUserInstalled,
flags | REMOVE_CHATTY, info, true);
systemUpdate = info.isRemovedPackageSystemUpdate;
- if (res && !systemUpdate && mPackages.get(packageName) == null) {
- removedForAllUsers = true;
+ synchronized (mPackages) {
+ if (res) {
+ if (!systemUpdate && mPackages.get(packageName) == null) {
+ removedForAllUsers = true;
+ }
+ mEphemeralApplicationRegistry.onPackageUninstalledLPw(uninstalledPkg);
+ }
}
if (DEBUG_REMOVE) Slog.d(TAG, "delete res: systemUpdate=" + systemUpdate
+ " removedForAllUsers=" + removedForAllUsers);
@@ -16336,7 +16552,7 @@
if (userDir.exists()) continue;
try {
- sm.prepareUserStorage(volumeUuid, user.id, user.serialNumber);
+ sm.prepareUserStorage(volumeUuid, user.id, user.serialNumber, user.isEphemeral());
UserManagerService.enforceSerialNumber(userDir, user.serialNumber);
} catch (IOException e) {
Log.wtf(TAG, "Failed to create user directory on " + volumeUuid, e);
@@ -16723,15 +16939,14 @@
mUserNeedsBadging.delete(userHandle);
mSettings.removeUserLPw(userHandle);
mPendingBroadcasts.remove(userHandle);
+ mEphemeralApplicationRegistry.onUserRemovedLPw(userHandle);
}
synchronized (mInstallLock) {
- if (mInstaller != null) {
- final StorageManager storage = mContext.getSystemService(StorageManager.class);
- for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
- final String volumeUuid = vol.getFsUuid();
- if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid);
- mInstaller.removeUserDataDirs(volumeUuid, userHandle);
- }
+ final StorageManager storage = mContext.getSystemService(StorageManager.class);
+ for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
+ final String volumeUuid = vol.getFsUuid();
+ if (DEBUG_INSTALL) Slog.d(TAG, "Removing user data on volume " + volumeUuid);
+ mInstaller.removeUserDataDirs(volumeUuid, userHandle);
}
synchronized (mPackages) {
removeUnusedPackagesLILPw(userManager, userHandle);
@@ -16793,17 +17008,13 @@
/** Called by UserManagerService */
void createNewUser(int userHandle) {
- if (mInstaller != null) {
- synchronized (mInstallLock) {
- synchronized (mPackages) {
- mInstaller.createUserConfig(userHandle);
- mSettings.createNewUserLILPw(this, mInstaller, userHandle);
- }
- }
- synchronized (mPackages) {
- applyFactoryDefaultBrowserLPw(userHandle);
- primeDomainVerificationsLPw(userHandle);
- }
+ synchronized (mInstallLock) {
+ mInstaller.createUserConfig(userHandle);
+ mSettings.createNewUserLI(this, mInstaller, userHandle);
+ }
+ synchronized (mPackages) {
+ applyFactoryDefaultBrowserLPw(userHandle);
+ primeDomainVerificationsLPw(userHandle);
}
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index dbb5818..b18c846 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -101,11 +101,13 @@
return runList();
case "uninstall":
return runUninstall();
- case "query-intent-activities":
+ case "resolve-activity":
+ return runResolveActivity();
+ case "query-activities":
return runQueryIntentActivities();
- case "query-intent-services":
+ case "query-services":
return runQueryIntentServices();
- case "query-intent-receivers":
+ case "query-receivers":
return runQueryIntentReceivers();
default:
return handleDefaultCommands(cmd);
@@ -565,6 +567,28 @@
return intent;
}
+ private int runResolveActivity() {
+ Intent intent;
+ try {
+ intent = parseIntentAndUser();
+ } catch (URISyntaxException e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ try {
+ ResolveInfo ri = mInterface.resolveIntent(intent, null, 0, mTargetUser);
+ PrintWriter pw = getOutPrintWriter();
+ if (ri == null) {
+ pw.println("No activity found");
+ } else {
+ PrintWriterPrinter pr = new PrintWriterPrinter(pw);
+ ri.dump(pr, "");
+ }
+ } catch (RemoteException e) {
+ throw new RuntimeException("Failed calling service", e);
+ }
+ return 0;
+ }
+
private int runQueryIntentActivities() {
Intent intent;
try {
@@ -705,6 +729,9 @@
case "--abi":
sessionParams.abiOverride = checkAbiArgument(getNextArg());
break;
+ case "--ephemeral":
+ sessionParams.installFlags |= PackageManager.INSTALL_EPHEMERAL;
+ break;
case "--user":
params.userId = UserHandle.parseUserArg(getNextArgRequired());
break;
@@ -1016,11 +1043,13 @@
pw.println(" -s: short summary");
pw.println(" -d: only list dangerous permissions");
pw.println(" -u: list only the permissions users will see");
- pw.println(" query-intent-activities [--user USER_ID] INTENT");
+ pw.println(" resolve-activity [--user USER_ID] INTENT");
+ pw.println(" Prints the activity that resolves to the given Intent.");
+ pw.println(" query-activities [--user USER_ID] INTENT");
pw.println(" Prints all activities that can handle the given Intent.");
- pw.println(" query-intent-services [--user USER_ID] INTENT");
+ pw.println(" query-services [--user USER_ID] INTENT");
pw.println(" Prints all services that can handle the given Intent.");
- pw.println(" query-intent-receivers [--user USER_ID] INTENT");
+ pw.println(" query-receivers [--user USER_ID] INTENT");
pw.println(" Prints all broadcast receivers that can handle the given Intent.");
pw.println();
Intent.printIntentArgsHelp(pw , "");
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 99aa30b..22f8e96 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -3644,21 +3644,47 @@
}
}
- void createNewUserLILPw(PackageManagerService service, Installer installer, int userHandle) {
- for (PackageSetting ps : mPackages.values()) {
- if (ps.pkg == null || ps.pkg.applicationInfo == null) {
+ void createNewUserLI(@NonNull PackageManagerService service, @NonNull Installer installer,
+ int userHandle) {
+ String[] volumeUuids;
+ String[] names;
+ int[] uids;
+ String[] seinfos;
+ int packagesCount;
+ synchronized (mPackages) {
+ Collection<PackageSetting> packages = mPackages.values();
+ packagesCount = packages.size();
+ volumeUuids = new String[packagesCount];
+ names = new String[packagesCount];
+ uids = new int[packagesCount];
+ seinfos = new String[packagesCount];
+ Iterator<PackageSetting> packagesIterator = packages.iterator();
+ for (int i = 0; i < packagesCount; i++) {
+ PackageSetting ps = packagesIterator.next();
+ if (ps.pkg == null || ps.pkg.applicationInfo == null) {
+ continue;
+ }
+ // Only system apps are initially installed.
+ ps.setInstalled(ps.isSystem(), userHandle);
+ // Need to create a data directory for all apps under this user. Accumulate all
+ // required args and call the installer after mPackages lock has been released
+ volumeUuids[i] = ps.volumeUuid;
+ names[i] = ps.name;
+ uids[i] = UserHandle.getUid(userHandle, ps.appId);
+ seinfos[i] = ps.pkg.applicationInfo.seinfo;
+ }
+ }
+ for (int i = 0; i < packagesCount; i++) {
+ if (names[i] == null) {
continue;
}
- // Only system apps are initially installed.
- ps.setInstalled((ps.pkgFlags&ApplicationInfo.FLAG_SYSTEM) != 0, userHandle);
- // Need to create a data directory for all apps under this user.
- installer.createUserData(ps.volumeUuid, ps.name,
- UserHandle.getUid(userHandle, ps.appId), userHandle,
- ps.pkg.applicationInfo.seinfo);
+ installer.createUserData(volumeUuids[i], names[i], uids[i], userHandle, seinfos[i]);
}
- applyDefaultPreferredAppsLPw(service, userHandle);
- writePackageRestrictionsLPr(userHandle);
- writePackageListLPr(userHandle);
+ synchronized (mPackages) {
+ applyDefaultPreferredAppsLPw(service, userHandle);
+ writePackageRestrictionsLPr(userHandle);
+ writePackageListLPr(userHandle);
+ }
}
void removeUserLPw(int userId) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index da10a94..0b59c16 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -16,6 +16,7 @@
package com.android.server.pm;
+import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
@@ -58,6 +59,7 @@
import android.system.OsConstants;
import android.util.AtomicFile;
import android.util.Log;
+import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
@@ -70,6 +72,7 @@
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
+import com.android.internal.widget.LockPatternUtils;
import com.android.server.LocalServices;
import org.xmlpull.v1.XmlPullParser;
@@ -89,6 +92,7 @@
import java.util.List;
import libcore.io.IoUtils;
+import libcore.util.Objects;
/**
* Service for {@link UserManager}.
@@ -106,6 +110,7 @@
private static final boolean DBG_WITH_STACKTRACE = false; // DO NOT SUBMIT WITH TRUE
private static final String TAG_NAME = "name";
+ private static final String TAG_ACCOUNT = "account";
private static final String ATTR_FLAGS = "flags";
private static final String ATTR_ICON_PATH = "icon";
private static final String ATTR_ID = "id";
@@ -177,6 +182,14 @@
private final SparseArray<UserInfo> mUsers = new SparseArray<>();
/**
+ * This collection contains each user's account name if the user chose to set one up
+ * during the initial user creation process. Keeping this information separate from mUsers
+ * to avoid accidentally leak it.
+ */
+ @GuardedBy("mUsersLock")
+ private final SparseArray<String> mUserAccounts = new SparseArray<>();
+
+ /**
* User restrictions set via UserManager. This doesn't include restrictions set by
* device owner / profile owners.
*
@@ -305,13 +318,13 @@
}
void systemReady() {
- // Prune out any partially created/partially removed users.
+ // Prune out any partially created, partially removed and ephemeral users.
ArrayList<UserInfo> partials = new ArrayList<>();
synchronized (mUsersLock) {
final int userSize = mUsers.size();
for (int i = 0; i < userSize; i++) {
UserInfo ui = mUsers.valueAt(i);
- if ((ui.partial || ui.guestToRemove) && i != 0) {
+ if ((ui.partial || ui.guestToRemove || ui.isEphemeral()) && i != 0) {
partials.add(ui);
}
}
@@ -335,6 +348,33 @@
}
@Override
+ public String getUserAccount(int userId) {
+ checkManageUserAndAcrossUsersFullPermission("get user account");
+ synchronized (mUsersLock) {
+ return mUserAccounts.get(userId);
+ }
+ }
+
+ @Override
+ public void setUserAccount(int userId, String accountName) {
+ checkManageUserAndAcrossUsersFullPermission("set user account");
+ UserInfo userToUpdate = null;
+ synchronized (mPackagesLock) {
+ synchronized (mUsersLock) {
+ String currentAccount = mUserAccounts.get(userId);
+ if (!Objects.equal(currentAccount, accountName)) {
+ mUserAccounts.put(userId, accountName);
+ userToUpdate = mUsers.get(userId);
+ }
+ }
+
+ if (userToUpdate != null) {
+ writeUserLP(userToUpdate);
+ }
+ }
+ }
+
+ @Override
public UserInfo getPrimaryUser() {
checkManageUsersPermission("query users");
synchronized (mUsersLock) {
@@ -411,7 +451,7 @@
@Override
public int getCredentialOwnerProfile(int userHandle) {
checkManageUsersPermission("get the credential owner");
- if (!StorageManager.isFileBasedEncryptionEnabled()) {
+ if (!LockPatternUtils.isSeparateWorkChallengeEnabled()) {
synchronized (mUsersLock) {
UserInfo profileParent = getProfileParentLU(userHandle);
if (profileParent != null) {
@@ -474,6 +514,66 @@
&& user.profileGroupId == profile.profileGroupId);
}
+ private void broadcastProfileAvailabilityChanges(UserHandle profileHandle,
+ UserHandle parentHandle, Bundle extras) {
+ // Send intent to profile
+ Intent intent = new Intent(Intent.ACTION_AVAILABILITY_CHANGED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtras(extras);
+ mContext.sendBroadcastAsUser(intent, profileHandle);
+
+ // Send intent to parent
+ if (parentHandle != null) {
+ intent = new Intent(Intent.ACTION_MANAGED_PROFILE_AVAILABILITY_CHANGED);
+ intent.putExtra(Intent.EXTRA_USER, profileHandle);
+ intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+ intent.putExtras(extras);
+ mContext.sendBroadcastAsUser(intent, parentHandle);
+ }
+ }
+
+ @Override
+ public void setQuietModeEnabled(int userHandle, boolean enableQuietMode) {
+ checkManageUsersPermission("silence profile");
+ boolean changed = false;
+ UserInfo profile, parent;
+ synchronized (mPackagesLock) {
+ synchronized (mUsersLock) {
+ profile = getUserInfoLU(userHandle);
+ parent = getProfileParentLU(userHandle);
+
+ }
+ if (profile == null || !profile.isManagedProfile()) {
+ throw new IllegalArgumentException("User " + userHandle + " is not a profile");
+ }
+ if (profile.isQuietModeEnabled() != enableQuietMode) {
+ profile.flags ^= UserInfo.FLAG_QUIET_MODE;
+ writeUserLP(profile);
+ changed = true;
+ }
+ }
+ if (changed) {
+ Bundle extras = new Bundle();
+ extras.putBoolean(Intent.EXTRA_QUIET_MODE, enableQuietMode);
+ broadcastProfileAvailabilityChanges(profile.getUserHandle(),
+ parent != null ? parent.getUserHandle() : null, extras);
+ }
+ }
+
+ @Override
+ public boolean isQuietModeEnabled(int userHandle) {
+ synchronized (mPackagesLock) {
+ UserInfo info;
+ synchronized (mUsersLock) {
+ info = getUserInfoLU(userHandle);
+ }
+ if (info == null || !info.isManagedProfile()) {
+ throw new IllegalArgumentException("User " + userHandle + " is not a profile");
+ }
+ return info.isQuietModeEnabled();
+ }
+ }
+
@Override
public void setUserEnabled(int userId) {
checkManageUsersPermission("enable user");
@@ -784,6 +884,15 @@
}
@Override
+ public boolean hasBaseUserRestriction(String restrictionKey, int userId) {
+ checkManageUsersPermission("hasBaseUserRestriction");
+ synchronized (mRestrictionsLock) {
+ Bundle bundle = mBaseUserRestrictions.get(userId);
+ return (bundle != null && bundle.getBoolean(restrictionKey, false));
+ }
+ }
+
+ @Override
public void setUserRestriction(String key, boolean value, int userId) {
checkManageUsersPermission("setUserRestriction");
synchronized (mRestrictionsLock) {
@@ -869,10 +978,8 @@
mHandler.post(new Runnable() {
@Override
public void run() {
- synchronized (mRestrictionsLock) {
- UserRestrictionsUtils.applyUserRestrictionsLR(
- mContext, userId, newRestrictionsFinal, prevRestrictionsFinal);
- }
+ UserRestrictionsUtils.applyUserRestrictions(
+ mContext, userId, newRestrictionsFinal, prevRestrictionsFinal);
final UserRestrictionsListener[] listeners;
synchronized (mUserRestrictionsListeners) {
@@ -984,6 +1091,30 @@
/**
* Enforces that only the system UID or root's UID or apps that have the
+ * {@link android.Manifest.permission#MANAGE_USERS MANAGE_USERS} and
+ * {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL INTERACT_ACROSS_USERS_FULL}
+ * permissions can make certain calls to the UserManager.
+ *
+ * @param message used as message if SecurityException is thrown
+ * @throws SecurityException if the caller does not have enough privilege.
+ */
+ private static final void checkManageUserAndAcrossUsersFullPermission(String message) {
+ final int uid = Binder.getCallingUid();
+ if (uid != Process.SYSTEM_UID && uid != 0
+ && ActivityManager.checkComponentPermission(
+ Manifest.permission.MANAGE_USERS,
+ uid, -1, true) != PackageManager.PERMISSION_GRANTED
+ && ActivityManager.checkComponentPermission(
+ Manifest.permission.INTERACT_ACROSS_USERS_FULL,
+ uid, -1, true) != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException(
+ "You need MANAGE_USERS and INTERACT_ACROSS_USERS_FULL permission to: "
+ + message);
+ }
+ }
+
+ /**
+ * Enforces that only the system UID or root's UID or apps that have the
* {@link android.Manifest.permission#MANAGE_USERS MANAGE_USERS}
* permission can make certain calls to the UserManager.
*
@@ -1000,13 +1131,6 @@
}
}
- private static void checkSystemOrRoot(String message) {
- final int uid = Binder.getCallingUid();
- if (uid != Process.SYSTEM_UID && uid != 0) {
- throw new SecurityException("Only system may call: " + message);
- }
- }
-
private void writeBitmapLP(UserInfo info, Bitmap bitmap) {
try {
File dir = new File(mUsersDir, Integer.toString(info.id));
@@ -1088,11 +1212,14 @@
final String name = parser.getName();
if (name.equals(TAG_USER)) {
String id = parser.getAttributeValue(null, ATTR_ID);
- UserInfo user = readUserLP(Integer.parseInt(id));
+ Pair<UserInfo, String> userPair = readUserLP(Integer.parseInt(id));
- if (user != null) {
+ if (userPair != null) {
+ UserInfo user = userPair.first;
+ String account = userPair.second;
synchronized (mUsersLock) {
mUsers.put(user.id, user);
+ mUserAccounts.put(user.id, account);
if (mNextSerialNumber < 0 || mNextSerialNumber <= user.id) {
mNextSerialNumber = user.id + 1;
}
@@ -1292,6 +1419,17 @@
mDevicePolicyLocalUserRestrictions.get(userInfo.id),
TAG_DEVICE_POLICY_RESTRICTIONS);
}
+ // Update the account field if it is set.
+ String account;
+ synchronized (mUsersLock) {
+ account = mUserAccounts.get(userInfo.id);
+ }
+ if (account != null) {
+ serializer.startTag(null, TAG_ACCOUNT);
+ serializer.text(account);
+ serializer.endTag(null, TAG_ACCOUNT);
+ }
+
serializer.endTag(null, TAG_USER);
serializer.endDocument();
@@ -1364,10 +1502,11 @@
}
}
- private UserInfo readUserLP(int id) {
+ private Pair<UserInfo, String> readUserLP(int id) {
int flags = 0;
int serialNumber = id;
String name = null;
+ String account = null;
String iconPath = null;
long creationTime = 0L;
long lastLoggedInTime = 0L;
@@ -1436,6 +1575,11 @@
UserRestrictionsUtils.readRestrictions(parser, baseRestrictions);
} else if (TAG_DEVICE_POLICY_RESTRICTIONS.equals(tag)) {
UserRestrictionsUtils.readRestrictions(parser, localRestrictions);
+ } else if (TAG_ACCOUNT.equals(tag)) {
+ type = parser.next();
+ if (type == XmlPullParser.TEXT) {
+ account = parser.getText();
+ }
}
}
}
@@ -1452,7 +1596,7 @@
mBaseUserRestrictions.put(id, baseRestrictions);
mDevicePolicyLocalUserRestrictions.put(id, localRestrictions);
}
- return userInfo;
+ return new Pair<>(userInfo, account);
} catch (IOException ioe) {
} catch (XmlPullParserException pe) {
@@ -1607,6 +1751,10 @@
}
}
}
+
+ if (parent != null && parent.isEphemeral()) {
+ flags |= UserInfo.FLAG_EPHEMERAL;
+ }
userId = getNextAvailableId();
userInfo = new UserInfo(userId, name, null, flags);
userInfo.serialNumber = mNextSerialNumber++;
@@ -1635,12 +1783,13 @@
}
}
final StorageManager storage = mContext.getSystemService(StorageManager.class);
- storage.createUserKey(userId, userInfo.serialNumber);
+ storage.createUserKey(userId, userInfo.serialNumber, userInfo.isEphemeral());
for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
final String volumeUuid = vol.getFsUuid();
try {
final File userDir = Environment.getDataUserDirectory(volumeUuid, userId);
- storage.prepareUserStorage(volumeUuid, userId, userInfo.serialNumber);
+ storage.prepareUserStorage(
+ volumeUuid, userId, userInfo.serialNumber, userInfo.isEphemeral());
enforceSerialNumber(userDir, userInfo.serialNumber);
} catch (IOException e) {
Log.wtf(LOG_TAG, "Failed to create user directory on " + volumeUuid, e);
@@ -1811,8 +1960,8 @@
if (DBG) Slog.i(LOG_TAG, "Stopping user " + userHandle);
int res;
try {
- res = ActivityManagerNative.getDefault().stopUser(userHandle,
- new IStopUserCallback.Stub() {
+ res = ActivityManagerNative.getDefault().stopUser(userHandle, /* force= */ true,
+ new IStopUserCallback.Stub() {
@Override
public void userStopped(int userId) {
finishRemoveUser(userId);
@@ -1874,6 +2023,7 @@
// Remove this user from the list
synchronized (mUsersLock) {
mUsers.remove(userHandle);
+ mUserAccounts.delete(userHandle);
mIsUserManaged.delete(userHandle);
}
synchronized (mRestrictionsLock) {
@@ -2434,6 +2584,11 @@
pw, " ", mCachedEffectiveUserRestrictions.get(user.id));
}
pw.println();
+ String accountName = mUserAccounts.get(userId);
+ if (accountName != null) {
+ pw.print(" Account name: " + accountName);
+ pw.println();
+ }
}
}
pw.println(" Device policy global restrictions:");
diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
index 77abd3e..816903e 100644
--- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
+++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
@@ -22,11 +22,14 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.app.ActivityManagerNative;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
import android.os.Binder;
import android.os.Bundle;
+import android.os.RemoteException;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
@@ -84,7 +87,8 @@
UserManager.DISALLOW_SAFE_BOOT,
UserManager.ALLOW_PARENT_PROFILE_APP_LINKING,
UserManager.DISALLOW_RECORD_AUDIO,
- UserManager.DISALLOW_CAMERA
+ UserManager.DISALLOW_CAMERA,
+ UserManager.DISALLOW_RUN_IN_BACKGROUND
);
/**
@@ -126,6 +130,7 @@
*/
private static final Set<String> GLOBAL_RESTRICTIONS = Sets.newArraySet(
UserManager.DISALLOW_ADJUST_VOLUME,
+ UserManager.DISALLOW_RUN_IN_BACKGROUND,
UserManager.DISALLOW_UNMUTE_MICROPHONE
);
@@ -263,34 +268,28 @@
* Takes a new use restriction set and the previous set, and apply the restrictions that have
* changed.
*
- * <p>Note this method is called by {@link UserManagerService} while holding
- * {@code mRestrictionLock}. Be aware when calling into other services, which could cause
- * a deadlock.
+ * <p>Note this method is called by {@link UserManagerService} without holding any locks.
*/
- public static void applyUserRestrictionsLR(Context context, int userId,
+ public static void applyUserRestrictions(Context context, int userId,
Bundle newRestrictions, Bundle prevRestrictions) {
for (String key : USER_RESTRICTIONS) {
final boolean newValue = newRestrictions.getBoolean(key);
final boolean prevValue = prevRestrictions.getBoolean(key);
if (newValue != prevValue) {
- applyUserRestrictionLR(context, userId, key, newValue);
+ applyUserRestriction(context, userId, key, newValue);
}
}
}
-
+
/**
* Apply each user restriction.
*
- * <p>Note this method is called by {@link UserManagerService} while holding
- * {@code mRestrictionLock}. Be aware when calling into other services, which could cause
- * a deadlock.
- *
* <p>See also {@link
* com.android.providers.settings.SettingsProvider#isGlobalOrSecureSettingRestrictedForUser},
* which should be in sync with this method.
*/
- private static void applyUserRestrictionLR(Context context, int userId, String key,
+ private static void applyUserRestriction(Context context, int userId, String key,
boolean newValue) {
if (UserManagerService.DBG) {
Log.d(TAG, "Applying user restriction: userId=" + userId
@@ -365,6 +364,17 @@
userId);
}
break;
+ case UserManager.DISALLOW_RUN_IN_BACKGROUND:
+ if (newValue) {
+ int currentUser = ActivityManager.getCurrentUser();
+ if (currentUser != userId && userId != UserHandle.USER_SYSTEM) {
+ try {
+ ActivityManagerNative.getDefault().stopUser(userId, false, null);
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
+ }
}
} finally {
Binder.restoreCallingIdentity(id);
diff --git a/services/core/java/com/android/server/policy/BarController.java b/services/core/java/com/android/server/policy/BarController.java
index 051b7fb..0c80ffa 100644
--- a/services/core/java/com/android/server/policy/BarController.java
+++ b/services/core/java/com/android/server/policy/BarController.java
@@ -47,6 +47,7 @@
private final int mTransientFlag;
private final int mUnhideFlag;
private final int mTranslucentFlag;
+ private final int mTransparentFlag;
private final int mStatusBarManagerId;
private final int mTranslucentWmFlag;
protected final Handler mHandler;
@@ -63,13 +64,14 @@
private boolean mNoAnimationOnNextShow;
public BarController(String tag, int transientFlag, int unhideFlag, int translucentFlag,
- int statusBarManagerId, int translucentWmFlag) {
+ int statusBarManagerId, int translucentWmFlag, int transparentFlag) {
mTag = "BarController." + tag;
mTransientFlag = transientFlag;
mUnhideFlag = unhideFlag;
mTranslucentFlag = translucentFlag;
mStatusBarManagerId = statusBarManagerId;
mTranslucentWmFlag = translucentWmFlag;
+ mTransparentFlag = transparentFlag;
mHandler = new Handler();
}
@@ -126,13 +128,13 @@
vis &= ~mTranslucentFlag;
}
if ((fl & WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
- vis |= View.SYSTEM_UI_TRANSPARENT;
+ vis |= mTransparentFlag;
} else {
- vis &= ~View.SYSTEM_UI_TRANSPARENT;
+ vis &= ~mTransparentFlag;
}
} else {
vis = (vis & ~mTranslucentFlag) | (oldVis & mTranslucentFlag);
- vis = (vis & ~View.SYSTEM_UI_TRANSPARENT) | (oldVis & View.SYSTEM_UI_TRANSPARENT);
+ vis = (vis & ~mTransparentFlag) | (oldVis & mTransparentFlag);
}
}
return vis;
@@ -247,7 +249,7 @@
}
}
if (mShowTransparent) {
- vis |= View.SYSTEM_UI_TRANSPARENT;
+ vis |= mTransparentFlag;
if (mSetUnHideFlagWhenNextTransparent) {
vis |= mUnhideFlag;
mSetUnHideFlagWhenNextTransparent = false;
@@ -258,7 +260,7 @@
vis &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; // never show transient bars in low profile
}
if ((vis & mTranslucentFlag) != 0 || (oldVis & mTranslucentFlag) != 0 ||
- ((vis | oldVis) & View.SYSTEM_UI_TRANSPARENT) != 0) {
+ ((vis | oldVis) & mTransparentFlag) != 0) {
mLastTranslucent = SystemClock.uptimeMillis();
}
return vis;
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index d160221f..c8523c9 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -390,9 +390,10 @@
// screenshot.
mHandler.postDelayed(new Runnable() {
@Override public void run() {
+ // TODO: select 'progress' flag according to menu choice
try {
ActivityManagerNative.getDefault()
- .requestBugReport();
+ .requestBugReport(true);
} catch (RemoteException e) {
}
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 639753a..b9a9d6e 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -108,9 +108,6 @@
import android.view.KeyCharacterMap.FallbackAction;
import android.view.KeyEvent;
import android.view.MotionEvent;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.internal.policy.PhoneWindow;
import android.view.Surface;
import android.view.View;
import android.view.ViewConfiguration;
@@ -124,6 +121,8 @@
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import com.android.internal.R;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.policy.PhoneWindow;
import com.android.internal.statusbar.IStatusBarService;
import com.android.internal.util.ScreenShapeHelper;
import com.android.internal.widget.PointerLocationView;
@@ -159,8 +158,7 @@
static final boolean SHOW_PROCESSES_ON_ALT_MENU = false;
// Whether to allow dock apps with METADATA_DOCK_HOME to temporarily take over the Home key.
- // No longer recommended for desk docks; still useful in car docks.
- static final boolean ENABLE_CAR_DOCK_HOME_CAPTURE = true;
+ // No longer recommended for desk docks;
static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false;
static final int SHORT_PRESS_POWER_NOTHING = 0;
@@ -211,7 +209,8 @@
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.STATUS_BAR_TRANSLUCENT
| View.NAVIGATION_BAR_TRANSLUCENT
- | View.SYSTEM_UI_TRANSPARENT;
+ | View.STATUS_BAR_TRANSPARENT
+ | View.NAVIGATION_BAR_TRANSPARENT;
private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
@@ -317,6 +316,10 @@
int[] mNavigationBarHeightForRotation = new int[4];
int[] mNavigationBarWidthForRotation = new int[4];
+ // Whether to allow dock apps with METADATA_DOCK_HOME to temporarily take over the Home key.
+ // This is for car dock and this is updated from resource.
+ private boolean mEnableCarDockHomeCapture = true;
+
boolean mBootMessageNeedsHiding;
KeyguardServiceDelegate mKeyguardDelegate;
final Runnable mWindowManagerDrawCallback = new Runnable() {
@@ -393,6 +396,7 @@
boolean mDeskDockEnablesAccelerometer;
int mLidKeyboardAccessibility;
int mLidNavigationAccessibility;
+ boolean mLidControlsScreenLock;
boolean mLidControlsSleep;
int mShortPressOnPowerBehavior;
int mLongPressOnPowerBehavior;
@@ -624,6 +628,8 @@
private final LogDecelerateInterpolator mLogDecelerateInterpolator
= new LogDecelerateInterpolator(100, 0);
+ private boolean mForceWindowDrawsStatusBarBackground;
+
private static final int MSG_ENABLE_POINTER_LOCATION = 1;
private static final int MSG_DISABLE_POINTER_LOCATION = 2;
private static final int MSG_DISPATCH_MEDIA_KEY_WITH_WAKE_LOCK = 3;
@@ -804,7 +810,8 @@
View.NAVIGATION_BAR_UNHIDE,
View.NAVIGATION_BAR_TRANSLUCENT,
StatusBarManager.WINDOW_NAVIGATION_BAR,
- WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
+ View.NAVIGATION_BAR_TRANSPARENT);
private ImmersiveModeConfirmation mImmersiveModeConfirmation;
@@ -1399,6 +1406,8 @@
mHomeIntent.addCategory(Intent.CATEGORY_HOME);
mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ mEnableCarDockHomeCapture = context.getResources().getBoolean(
+ com.android.internal.R.bool.config_enableCarDockHomeLaunch);
mCarDockIntent = new Intent(Intent.ACTION_MAIN, null);
mCarDockIntent.addCategory(Intent.CATEGORY_CAR_DOCK);
mCarDockIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
@@ -1432,6 +1441,8 @@
com.android.internal.R.integer.config_lidKeyboardAccessibility);
mLidNavigationAccessibility = mContext.getResources().getInteger(
com.android.internal.R.integer.config_lidNavigationAccessibility);
+ mLidControlsScreenLock = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_lidControlsScreenLock);
mLidControlsSleep = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_lidControlsSleep);
mTranslucentDecorEnabled = mContext.getResources().getBoolean(
@@ -1583,6 +1594,8 @@
mScreenshotChordEnabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_enableScreenshotChord);
+ mForceWindowDrawsStatusBarBackground = mContext.getResources().getBoolean(
+ R.bool.config_forceWindowDrawsStatusBarBackground);
mGlobalKeyManager = new GlobalKeyManager(mContext);
@@ -1915,6 +1928,7 @@
case TYPE_PRIVATE_PRESENTATION:
case TYPE_VOICE_INTERACTION:
case TYPE_ACCESSIBILITY_OVERLAY:
+ case TYPE_QS_DIALOG:
// The window manager will check these.
break;
case TYPE_PHONE:
@@ -2044,10 +2058,14 @@
attrs.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
}
- if (ActivityManager.isHighEndGfx()
- && (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
- attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ if (ActivityManager.isHighEndGfx()) {
+ if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0) {
+ attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ }
+ if ((attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0
+ || mForceWindowDrawsStatusBarBackground) {
+ attrs.subtreeSystemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+ }
}
}
@@ -2110,6 +2128,8 @@
return 2;
case TYPE_DOCK_DIVIDER:
return 2;
+ case TYPE_QS_DIALOG:
+ return 2;
case TYPE_PHONE:
return 3;
case TYPE_SEARCH_BAR:
@@ -3602,7 +3622,7 @@
final int sysui = mLastSystemUiFlags;
boolean navVisible = (sysui & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
boolean navTranslucent = (sysui
- & (View.NAVIGATION_BAR_TRANSLUCENT | View.SYSTEM_UI_TRANSPARENT)) != 0;
+ & (View.NAVIGATION_BAR_TRANSLUCENT | View.NAVIGATION_BAR_TRANSPARENT)) != 0;
boolean immersive = (sysui & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
boolean immersiveSticky = (sysui & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
boolean navAllowedHidden = immersive || immersiveSticky;
@@ -3670,7 +3690,7 @@
boolean statusBarTransient = (sysui & View.STATUS_BAR_TRANSIENT) != 0;
boolean statusBarTranslucent = (sysui
- & (View.STATUS_BAR_TRANSLUCENT | View.SYSTEM_UI_TRANSPARENT)) != 0;
+ & (View.STATUS_BAR_TRANSLUCENT | View.STATUS_BAR_TRANSPARENT)) != 0;
if (!isKeyguardShowing) {
statusBarTranslucent &= areTranslucentBarsAllowed();
}
@@ -4001,7 +4021,8 @@
&& (fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) == 0
&& (fl & WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) == 0
&& (fl & WindowManager.LayoutParams.
- FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0) {
+ FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) == 0
+ && !mForceWindowDrawsStatusBarBackground) {
// Ensure policy decor includes status bar
dcf.top = mStableTop;
}
@@ -6360,6 +6381,8 @@
mPowerManager.goToSleep(SystemClock.uptimeMillis(),
PowerManager.GO_TO_SLEEP_REASON_LID_SWITCH,
PowerManager.GO_TO_SLEEP_FLAG_NO_DOZE);
+ } else if (mLidState == LID_CLOSED && mLidControlsScreenLock) {
+ mWindowManagerFuncs.lockDeviceNow();
}
synchronized (mLock) {
@@ -6402,7 +6425,7 @@
* true:
* <ul>
* <li>The device is not in either car mode or desk mode
- * <li>The device is in car mode but ENABLE_CAR_DOCK_HOME_CAPTURE is false
+ * <li>The device is in car mode but mEnableCarDockHomeCapture is false
* <li>The device is in desk mode but ENABLE_DESK_DOCK_HOME_CAPTURE is false
* <li>The device is in car mode but there's no CAR_DOCK app with METADATA_DOCK_HOME
* <li>The device is in desk mode but there's no DESK_DOCK app with METADATA_DOCK_HOME
@@ -6416,7 +6439,7 @@
// is, when in car mode you should be taken to car home regardless
// of whether we are actually in a car dock.
if (mUiMode == Configuration.UI_MODE_TYPE_CAR) {
- if (ENABLE_CAR_DOCK_HOME_CAPTURE) {
+ if (mEnableCarDockHomeCapture) {
intent = mCarDockIntent;
}
} else if (mUiMode == Configuration.UI_MODE_TYPE_DESK) {
@@ -6726,10 +6749,7 @@
final boolean freeformStackVisible =
mWindowManagerInternal.isStackVisible(FREEFORM_WORKSPACE_STACK_ID);
final boolean forceShowSystemBars = dockedStackVisible || freeformStackVisible;
- // TODO(multi-window): Update to force opaque independently for status bar and nav bar.
- // This will require refactoring the code to have separate vis flag for each bar so it can
- // be adjusted independently.
- final boolean forceOpaqueSystemBars = forceShowSystemBars;
+ final boolean forceOpaqueSystemBars = forceShowSystemBars && !mForceStatusBarFromKeyguard;
// apply translucent bar vis flags
WindowState transWin = isStatusBarKeyguard() && !mHideLockScreen
@@ -6759,6 +6779,11 @@
| View.SYSTEM_UI_TRANSPARENT);
}
+ if (mForceWindowDrawsStatusBarBackground) {
+ vis |= View.STATUS_BAR_TRANSPARENT;
+ vis &= ~View.STATUS_BAR_TRANSLUCENT;
+ }
+
// update status bar
boolean immersiveSticky =
(vis & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
@@ -6936,6 +6961,7 @@
pw.print(prefix); pw.print("mSupportAutoRotation="); pw.println(mSupportAutoRotation);
pw.print(prefix); pw.print("mUiMode="); pw.print(mUiMode);
pw.print(" mDockMode="); pw.print(mDockMode);
+ pw.print(" mEnableCarDockHomeCapture="); pw.print(mEnableCarDockHomeCapture);
pw.print(" mCarDockRotation="); pw.print(mCarDockRotation);
pw.print(" mDeskDockRotation="); pw.println(mDeskDockRotation);
pw.print(prefix); pw.print("mUserRotationMode="); pw.print(mUserRotationMode);
@@ -6949,6 +6975,7 @@
pw.print(prefix); pw.print("mLidKeyboardAccessibility=");
pw.print(mLidKeyboardAccessibility);
pw.print(" mLidNavigationAccessibility="); pw.print(mLidNavigationAccessibility);
+ pw.print(" mLidControlsScreenLock="); pw.println(mLidControlsScreenLock);
pw.print(" mLidControlsSleep="); pw.println(mLidControlsSleep);
pw.print(prefix);
pw.print("mShortPressOnPowerBehavior="); pw.print(mShortPressOnPowerBehavior);
diff --git a/services/core/java/com/android/server/policy/StatusBarController.java b/services/core/java/com/android/server/policy/StatusBarController.java
index b935f5a..9d353c6 100644
--- a/services/core/java/com/android/server/policy/StatusBarController.java
+++ b/services/core/java/com/android/server/policy/StatusBarController.java
@@ -111,7 +111,8 @@
View.STATUS_BAR_UNHIDE,
View.STATUS_BAR_TRANSLUCENT,
StatusBarManager.WINDOW_STATUS_BAR,
- WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+ View.STATUS_BAR_TRANSPARENT);
}
public AppTransitionListener getAppTransitionListener() {
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index f9d29ac..4b6db99 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -53,6 +53,7 @@
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.StorageManager;
import android.provider.Settings;
import android.service.trust.TrustAgentService;
import android.util.ArraySet;
@@ -102,6 +103,7 @@
private static final int MSG_START_USER = 7;
private static final int MSG_CLEANUP_USER = 8;
private static final int MSG_SWITCH_USER = 9;
+ private static final int MSG_SET_DEVICE_LOCKED = 10;
private final ArraySet<AgentInfo> mActiveAgents = new ArraySet<>();
private final ArrayList<ITrustListener> mTrustListeners = new ArrayList<>();
@@ -288,6 +290,19 @@
}
}
+ public void setDeviceLockedForUser(int userId, boolean locked) {
+ if (LockPatternUtils.isSeparateWorkChallengeEnabled()) {
+ UserInfo info = mUserManager.getUserInfo(userId);
+ if (info.isManagedProfile()) {
+ synchronized (mDeviceLockedForUser) {
+ mDeviceLockedForUser.put(userId, locked);
+ }
+ } else {
+ Log.wtf(TAG, "Requested to change lock state for non-profile user " + userId);
+ }
+ }
+ }
+
boolean isDeviceLockedInner(int userId) {
synchronized (mDeviceLockedForUser) {
return mDeviceLockedForUser.get(userId, true);
@@ -655,7 +670,9 @@
public boolean isDeviceLocked(int userId) throws RemoteException {
userId = ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId,
false /* allowAll */, true /* requireFull */, "isDeviceLocked", null);
- userId = resolveProfileParent(userId);
+ if (!LockPatternUtils.isSeparateWorkChallengeEnabled()) {
+ userId = resolveProfileParent(userId);
+ }
return isDeviceLockedInner(userId);
}
@@ -762,6 +779,12 @@
private String dumpHex(int i) {
return "0x" + Integer.toHexString(i);
}
+
+ @Override
+ public void setDeviceLockedForUser(int userId, boolean value) {
+ mHandler.obtainMessage(MSG_SET_DEVICE_LOCKED, value ? 1 : 0, userId)
+ .sendToTarget();
+ }
};
private int resolveProfileParent(int userId) {
@@ -806,6 +829,9 @@
mCurrentUser = msg.arg1;
refreshDeviceLockedForUser(UserHandle.USER_ALL);
break;
+ case MSG_SET_DEVICE_LOCKED:
+ setDeviceLockedForUser(msg.arg2, msg.arg1 != 0);
+ break;
}
}
};
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index c246609..e6b649e7 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -16,6 +16,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.Service;
@@ -219,7 +222,7 @@
*/
private static final class DisplayMagnifier {
- private static final String LOG_TAG = "DisplayMagnifier";
+ private static final String LOG_TAG = TAG_WITH_CLASS_NAME ? "DisplayMagnifier" : TAG_WM;
private static final boolean DEBUG_WINDOW_TRANSITIONS = false;
private static final boolean DEBUG_ROTATION = false;
@@ -351,6 +354,7 @@
case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG:
case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR:
case WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY:
+ case WindowManager.LayoutParams.TYPE_QS_DIALOG:
case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL: {
Rect magnifiedRegionBounds = mTempRect2;
mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(
@@ -924,7 +928,8 @@
* user can see on the screen.
*/
private static final class WindowsForAccessibilityObserver {
- private static final String LOG_TAG = "WindowsForAccessibilityObserver";
+ private static final String LOG_TAG = TAG_WITH_CLASS_NAME ?
+ "WindowsForAccessibilityObserver" : TAG_WM;
private static final boolean DEBUG = false;
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index d394125..a7a4ed1 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -39,6 +39,8 @@
import static com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
import static com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation;
import static com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.annotation.Nullable;
import android.content.Context;
@@ -46,7 +48,6 @@
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Debug;
-import android.os.Handler;
import android.os.IBinder;
import android.os.IRemoteCallback;
import android.os.RemoteException;
@@ -73,6 +74,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -82,10 +84,10 @@
// mOpeningApps and mClosingApps are the lists of tokens that will be
// made visible or hidden at the next transition.
public class AppTransition implements Dump {
- private static final String TAG = "AppTransition";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "AppTransition" : TAG_WM;
private static final boolean DEBUG_APP_TRANSITIONS =
- WindowManagerService.DEBUG_APP_TRANSITIONS;
- private static final boolean DEBUG_ANIM = WindowManagerService.DEBUG_ANIM;
+ WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
+ private static final boolean DEBUG_ANIM = WindowManagerDebugConfig.DEBUG_ANIM;
private static final int CLIP_REVEAL_TRANSLATION_Y_DP = 8;
/** Not set up for a transition. */
@@ -308,6 +310,16 @@
return mNextAppTransitionScaleUp;
}
+ boolean isNextAppTransitionThumbnailUp() {
+ return mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP ||
+ mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_ASPECT_SCALE_UP;
+ }
+
+ boolean isNextAppTransitionThumbnailDown() {
+ return mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN ||
+ mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_ASPECT_SCALE_DOWN;
+ }
+
/**
* @return true if and only if we are currently fetching app transition specs from the future
* passed into {@link #overridePendingAppTransitionMultiThumbFuture}
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java
index 4861acc..ab47f07 100644
--- a/services/core/java/com/android/server/wm/AppWindowAnimator.java
+++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java
@@ -16,9 +16,12 @@
package com.android.server.wm;
-import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYERS;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+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.TYPE_LAYER_OFFSET;
import android.graphics.Matrix;
@@ -35,7 +38,7 @@
import java.util.ArrayList;
public class AppWindowAnimator {
- static final String TAG = "AppWindowAnimator";
+ static final String TAG = TAG_WITH_CLASS_NAME ? "AppWindowAnimator" : TAG_WM;
private static final int PROLONG_ANIMATION_DISABLED = 0;
static final int PROLONG_ANIMATION_AT_END = 1;
@@ -410,8 +413,7 @@
final int NW = mAllAppWinAnimators.size();
for (int i=0; i<NW; i++) {
WindowStateAnimator winAnimator = mAllAppWinAnimators.get(i);
- if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
- "performing show on: " + winAnimator);
+ if (DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + winAnimator);
winAnimator.performShowLocked();
isAnimating |= winAnimator.isAnimating();
}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 3301c49..fd5c704 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -17,9 +17,12 @@
package com.android.server.wm;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerService.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerService.TAG;
+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_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import com.android.server.input.InputApplicationHandle;
import com.android.server.wm.WindowManagerService.H;
@@ -44,6 +47,8 @@
* really activity) that is displaying windows.
*/
class AppWindowToken extends WindowToken {
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "AppWindowToken" : TAG_WM;
+
// Non-null only for application tokens.
final IApplicationToken appToken;
@@ -54,10 +59,6 @@
final boolean voiceInteraction;
- // Whether the window has a saved surface from last pause, which can be
- // used to start an entering animation earlier.
- boolean mHasSavedSurface;
-
// Whether we're performing an entering animation with a saved surface.
boolean mAnimatingWithSavedSurface;
@@ -156,7 +157,7 @@
continue;
}
try {
- if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG,
+ if (DEBUG_VISIBILITY) Slog.v(TAG,
"Setting visibility of " + win + ": " + (!clientHidden));
win.mClient.dispatchAppVisibility(!clientHidden);
} catch (RemoteException e) {
@@ -174,7 +175,7 @@
int numDrawn = 0;
boolean nowGone = true;
- if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG,
+ if (DEBUG_VISIBILITY) Slog.v(TAG,
"Update reported visibility: " + this);
final int N = allAppWindows.size();
for (int i=0; i<N; i++) {
@@ -185,12 +186,12 @@
|| win.mDestroying) {
continue;
}
- if (WindowManagerService.DEBUG_VISIBILITY) {
- Slog.v(WindowManagerService.TAG, "Win " + win + ": isDrawn="
+ if (DEBUG_VISIBILITY) {
+ Slog.v(TAG, "Win " + win + ": isDrawn="
+ win.isDrawnLw()
+ ", isAnimating=" + win.mWinAnimator.isAnimating());
if (!win.isDrawnLw()) {
- Slog.v(WindowManagerService.TAG, "Not displayed: s=" +
+ Slog.v(TAG, "Not displayed: s=" +
win.mWinAnimator.mSurfaceController
+ " pv=" + win.mPolicyVisibility
+ " mDrawState=" + win.mWinAnimator.mDrawState
@@ -224,7 +225,7 @@
nowVisible = reportedVisible;
}
}
- if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, "VIS " + this + ": interesting="
+ if (DEBUG_VISIBILITY) Slog.v(TAG, "VIS " + this + ": interesting="
+ numInteresting + " visible=" + numVisible);
if (nowDrawn != reportedDrawn) {
if (nowDrawn) {
@@ -235,8 +236,8 @@
reportedDrawn = nowDrawn;
}
if (nowVisible != reportedVisible) {
- if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(
- WindowManagerService.TAG, "Visibility changed in " + this
+ if (DEBUG_VISIBILITY) Slog.v(
+ TAG, "Visibility changed in " + this
+ ": vis=" + nowVisible);
reportedVisible = nowVisible;
Message m = service.mH.obtainMessage(
@@ -269,6 +270,10 @@
return candidate;
}
+ boolean stackCanReceiveKeys() {
+ return (windows.size() > 0) ? windows.get(windows.size() - 1).stackCanReceiveKeys() : false;
+ }
+
boolean isVisible() {
final int N = allAppWindows.size();
for (int i=0; i<N; i++) {
@@ -295,7 +300,7 @@
final Task task = mTask;
if (task != null) {
if (!task.removeAppToken(this)) {
- Slog.e(WindowManagerService.TAG, "removeAppFromTaskLocked: token=" + this
+ Slog.e(TAG, "removeAppFromTaskLocked: token=" + this
+ " not found.");
}
task.mStack.mExitingAppTokens.remove(this);
@@ -312,39 +317,38 @@
// currently animating with save surfaces. (If the app didn't even finish
// drawing when the user exits, but we have a saved surface from last time,
// we still want to keep that surface.)
- mHasSavedSurface = allDrawn || mAnimatingWithSavedSurface;
- if (mHasSavedSurface) {
- if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
- "Saving surface: " + this);
- return true;
+ return allDrawn || mAnimatingWithSavedSurface;
+ }
+
+ boolean hasSavedSurface() {
+ for (int i = windows.size() -1; i >= 0; i--) {
+ final WindowState ws = windows.get(i);
+ if (ws.hasSavedSurface()) {
+ return true;
+ }
}
return false;
}
void restoreSavedSurfaces() {
- if (!mHasSavedSurface) {
+ if (!hasSavedSurface()) {
return;
}
- if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG_WM,
"Restoring saved surfaces: " + this + ", allDrawn=" + allDrawn);
- mHasSavedSurface = false;
mAnimatingWithSavedSurface = true;
for (int i = windows.size() - 1; i >= 0; i--) {
WindowState ws = windows.get(i);
- ws.mWinAnimator.mDrawState = WindowStateAnimator.READY_TO_SHOW;
+ ws.restoreSavedSurface();
}
}
void destroySavedSurfaces() {
- if (mHasSavedSurface) {
- if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
- "Destroying saved surface: " + this);
- for (int i = windows.size() - 1; i >= 0; i--) {
- final WindowState win = windows.get(i);
- win.mWinAnimator.destroySurfaceLocked();
- }
+ for (int i = windows.size() - 1; i >= 0; i--) {
+ WindowState win = windows.get(i);
+ win.destroySavedSurface();
}
}
@@ -358,8 +362,8 @@
// and never beyond allAppWindows bounds.
winNdx = Math.min(winNdx - 1, allAppWindows.size() - 1)) {
WindowState win = allAppWindows.get(winNdx);
- if (WindowManagerService.DEBUG_WINDOW_MOVEMENT) {
- Slog.w(WindowManagerService.TAG, "removeAllWindows: removing win=" + win);
+ if (DEBUG_WINDOW_MOVEMENT) {
+ Slog.w(TAG, "removeAllWindows: removing win=" + win);
}
service.removeWindowLocked(win);
@@ -378,8 +382,8 @@
winNdx = Math.min(winNdx - 1, allAppWindows.size() - 1)) {
WindowState win = allAppWindows.get(winNdx);
if (win.mAppDied) {
- if (WindowManagerService.DEBUG_WINDOW_MOVEMENT) {
- Slog.w(WindowManagerService.TAG, "removeAllDeadWindows: " + win);
+ if (DEBUG_WINDOW_MOVEMENT) {
+ Slog.w(TAG, "removeAllDeadWindows: " + win);
}
// Set mDestroying, we don't want any animation or delayed removal here.
win.mDestroying = true;
diff --git a/services/core/java/com/android/server/wm/BlackFrame.java b/services/core/java/com/android/server/wm/BlackFrame.java
index 7b08354..5c29a0a 100644
--- a/services/core/java/com/android/server/wm/BlackFrame.java
+++ b/services/core/java/com/android/server/wm/BlackFrame.java
@@ -16,6 +16,13 @@
package com.android.server.wm;
+import static android.graphics.PixelFormat.OPAQUE;
+import static android.view.SurfaceControl.FX_SURFACE_DIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import java.io.PrintWriter;
import android.graphics.Matrix;
@@ -44,21 +51,20 @@
int w = r-l;
int h = b-t;
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ if (DEBUG_SURFACE_TRACE) {
surface = new WindowSurfaceController.SurfaceTrace(session, "BlackSurface("
+ l + ", " + t + ")",
- w, h, PixelFormat.OPAQUE, SurfaceControl.FX_SURFACE_DIM | SurfaceControl.HIDDEN);
+ w, h, OPAQUE, FX_SURFACE_DIM | SurfaceControl.HIDDEN);
} else {
surface = new SurfaceControl(session, "BlackSurface",
- w, h, PixelFormat.OPAQUE, SurfaceControl.FX_SURFACE_DIM | SurfaceControl.HIDDEN);
+ w, h, OPAQUE, FX_SURFACE_DIM | SurfaceControl.HIDDEN);
}
surface.setAlpha(1);
surface.setLayerStack(layerStack);
surface.setLayer(layer);
surface.show();
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
+ if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
" BLACK " + surface + ": CREATE layer=" + layer);
}
@@ -76,7 +82,7 @@
mTmpFloats[Matrix.MSCALE_X], mTmpFloats[Matrix.MSKEW_Y],
mTmpFloats[Matrix.MSKEW_X], mTmpFloats[Matrix.MSCALE_Y]);
if (false) {
- Slog.i(WindowManagerService.TAG, "Black Surface @ (" + left + "," + top + "): ("
+ Slog.i(TAG_WM, "Black Surface @ (" + left + "," + top + "): ("
+ mTmpFloats[Matrix.MTRANS_X] + ","
+ mTmpFloats[Matrix.MTRANS_Y] + ") matrix=["
+ mTmpFloats[Matrix.MSCALE_X] + ","
@@ -149,10 +155,8 @@
if (mBlackSurfaces != null) {
for (int i=0; i<mBlackSurfaces.length; i++) {
if (mBlackSurfaces[i] != null) {
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(
- WindowManagerService.TAG,
- " BLACK " + mBlackSurfaces[i].surface + ": DESTROY");
+ if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
+ " BLACK " + mBlackSurfaces[i].surface + ": DESTROY");
mBlackSurfaces[i].surface.destroy();
mBlackSurfaces[i] = null;
}
diff --git a/services/core/java/com/android/server/wm/CircularDisplayMask.java b/services/core/java/com/android/server/wm/CircularDisplayMask.java
index 33cec64..ae41541 100644
--- a/services/core/java/com/android/server/wm/CircularDisplayMask.java
+++ b/services/core/java/com/android/server/wm/CircularDisplayMask.java
@@ -17,6 +17,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -26,15 +29,15 @@
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
+import android.util.Slog;
import android.view.Display;
import android.view.Surface;
import android.view.Surface.OutOfResourcesException;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
-import android.util.Slog;
class CircularDisplayMask {
- private static final String TAG = "CircularDisplayMask";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "CircularDisplayMask" : TAG_WM;
// size of the chin
private int mScreenOffset = 0;
@@ -64,7 +67,7 @@
SurfaceControl ctrl = null;
try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ if (DEBUG_SURFACE_TRACE) {
ctrl = new WindowSurfaceController.SurfaceTrace(session, "CircularDisplayMask",
mScreenSize.x, mScreenSize.y, PixelFormat.TRANSLUCENT,
SurfaceControl.HIDDEN);
diff --git a/services/core/java/com/android/server/wm/DimLayer.java b/services/core/java/com/android/server/wm/DimLayer.java
index 4b3620f..6657a7b 100644
--- a/services/core/java/com/android/server/wm/DimLayer.java
+++ b/services/core/java/com/android/server/wm/DimLayer.java
@@ -16,6 +16,12 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.os.SystemClock;
@@ -26,7 +32,7 @@
import java.io.PrintWriter;
public class DimLayer {
- private static final String TAG = "DimLayer";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "DimLayer" : TAG_WM;
private static final boolean DEBUG = false;
public static final float RESIZING_HINT_ALPHA = 0.5f;
@@ -81,7 +87,7 @@
if (DEBUG) Slog.v(TAG, "Ctor: displayId=" + displayId);
SurfaceControl.openTransaction();
try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ if (DEBUG_SURFACE_TRACE) {
mDimSurface = new WindowSurfaceController.SurfaceTrace(service.mFxSession,
"DimSurface",
16, 16, PixelFormat.OPAQUE,
@@ -91,12 +97,11 @@
16, 16, PixelFormat.OPAQUE,
SurfaceControl.FX_SURFACE_DIM | SurfaceControl.HIDDEN);
}
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(TAG,
- " DIM " + mDimSurface + ": CREATE");
+ if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG,
+ " DIM " + mDimSurface + ": CREATE");
mDimSurface.setLayerStack(displayId);
} catch (Exception e) {
- Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e);
+ Slog.e(TAG_WM, "Exception creating Dim surface", e);
} finally {
SurfaceControl.closeTransaction();
}
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index bd30bd5..6d1cec4 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -1,6 +1,8 @@
package com.android.server.wm;
-import static com.android.server.wm.WindowManagerService.DEBUG_DIM_LAYER;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DIM_LAYER;
+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.LAYER_OFFSET_DIM;
import android.graphics.Rect;
@@ -16,7 +18,7 @@
* as well as other use cases (such as dimming above a dead window).
*/
class DimLayerController {
- private static final String TAG = "DimLayerController";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "DimLayerController" : TAG_WM;
/** Amount of time in milliseconds to animate the dim surface from one value to another,
* when no window animation is driving it. */
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 4bbf586..9b64481 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -19,8 +19,8 @@
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerService.TAG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP;
import android.app.ActivityManager.StackId;
@@ -180,7 +180,7 @@
TaskStack getHomeStack() {
if (mHomeStack == null && mDisplayId == Display.DEFAULT_DISPLAY) {
- Slog.e(TAG, "getHomeStack: Returning null from this=" + this);
+ Slog.e(TAG_WM, "getHomeStack: Returning null from this=" + this);
}
return mHomeStack;
}
@@ -237,14 +237,14 @@
}
void moveStack(TaskStack stack, boolean toTop) {
- if (stack.mStackId == PINNED_STACK_ID && !toTop) {
- // Pinned stack is always-on-top silly...
- Slog.w(TAG, "Ignoring move of always-on-top stack=" + stack + " to bottom");
+ if (StackId.isAlwaysOnTop(stack.mStackId) && !toTop) {
+ // This stack is always-on-top silly...
+ Slog.w(TAG_WM, "Ignoring move of always-on-top stack=" + stack + " to bottom");
return;
}
if (!mStacks.remove(stack)) {
- Slog.wtf(TAG, "moving stack that was not added: " + stack, new Throwable());
+ Slog.wtf(TAG_WM, "moving stack that was not added: " + stack, new Throwable());
}
int addIndex = toTop ? mStacks.size() : 0;
@@ -422,7 +422,7 @@
for (int i = 0; i < windows.size(); i++) {
final WindowState win = windows.get(i);
if (win.isHiddenFromUserLocked()) {
- if (DEBUG_VISIBILITY) Slog.w(TAG, "user changing, hiding " + win
+ if (DEBUG_VISIBILITY) Slog.w(TAG_WM, "user changing, hiding " + win
+ ", attrs=" + win.mAttrs.type + ", belonging to " + win.mOwnerUid);
win.hideLw(false);
}
diff --git a/services/core/java/com/android/server/wm/DisplaySettings.java b/services/core/java/com/android/server/wm/DisplaySettings.java
index 80526f2..7f79686 100644
--- a/services/core/java/com/android/server/wm/DisplaySettings.java
+++ b/services/core/java/com/android/server/wm/DisplaySettings.java
@@ -16,16 +16,17 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.graphics.Rect;
import android.os.Environment;
import android.util.AtomicFile;
import android.util.Slog;
import android.util.Xml;
+
import com.android.internal.util.FastXmlSerializer;
import com.android.internal.util.XmlUtils;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileInputStream;
@@ -35,11 +36,15 @@
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
/**
* Current persistent settings about a display
*/
public class DisplaySettings {
- private static final String TAG = WindowManagerService.TAG;
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "DisplaySettings" : TAG_WM;
private final AtomicFile mFile;
private final HashMap<String, Entry> mEntries = new HashMap<String, Entry>();
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index df8d5d6..8f3d3e3 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -20,8 +20,6 @@
import android.graphics.Rect;
import android.os.RemoteException;
import android.util.Slog;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
import android.view.IDockDividerVisibilityListener;
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
@@ -29,13 +27,15 @@
import static android.view.WindowManager.DOCKED_LEFT;
import static android.view.WindowManager.DOCKED_RIGHT;
import static android.view.WindowManager.DOCKED_TOP;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
/**
* Keeps information about the docked stack divider.
*/
public class DockedStackDividerController {
- private static final String TAG = "DockedStackDividerController";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "DockedStackDividerController" : TAG_WM;
private final DisplayContent mDisplayContent;
private final int mDividerWindowWidth;
@@ -46,6 +46,7 @@
private final Rect mLastRect = new Rect();
private IDockDividerVisibilityListener mListener;
private boolean mLastVisibility = false;
+ private boolean mForceVisibilityReevaluation;
DockedStackDividerController(Context context, DisplayContent displayContent) {
mDisplayContent = displayContent;
@@ -69,16 +70,16 @@
void setWindow(WindowState window) {
mWindow = window;
- reevaluateVisibility();
+ reevaluateVisibility(false);
}
- void reevaluateVisibility() {
+ void reevaluateVisibility(boolean force) {
if (mWindow == null) {
return;
}
TaskStack stack = mDisplayContent.mService.mStackIdToStack.get(DOCKED_STACK_ID);
final boolean visible = stack != null && stack.isVisibleLocked();
- if (mLastVisibility == visible) {
+ if (mLastVisibility == visible && !force) {
return;
}
mLastVisibility = visible;
@@ -131,5 +132,6 @@
throw new IllegalStateException("Dock divider visibility listener already set!");
}
mListener = listener;
+ reevaluateVisibility(true);
}
}
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index 0ef0e58..da89481 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -16,22 +16,15 @@
package com.android.server.wm;
-import android.graphics.Matrix;
-import android.view.animation.AlphaAnimation;
-import android.view.animation.Animation;
-import android.view.animation.AnimationSet;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.view.animation.ScaleAnimation;
-import android.view.animation.Transformation;
-import android.view.animation.TranslateAnimation;
-import com.android.server.input.InputApplicationHandle;
-import com.android.server.input.InputWindowHandle;
-import com.android.server.wm.WindowManagerService.DragInputEventReceiver;
-import com.android.server.wm.WindowManagerService.H;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.content.ClipData;
import android.content.ClipDescription;
+import android.graphics.Matrix;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
@@ -47,6 +40,19 @@
import android.view.SurfaceControl;
import android.view.View;
import android.view.WindowManager;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.ScaleAnimation;
+import android.view.animation.Transformation;
+import android.view.animation.TranslateAnimation;
+
+import com.android.server.input.InputApplicationHandle;
+import com.android.server.input.InputWindowHandle;
+import com.android.server.wm.WindowManagerService.DragInputEventReceiver;
+import com.android.server.wm.WindowManagerService.H;
import java.util.ArrayList;
@@ -114,9 +120,9 @@
*/
void register(Display display) {
mDisplay = display;
- if (WindowManagerService.DEBUG_DRAG) Slog.d(WindowManagerService.TAG, "registering drag input channel");
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "registering drag input channel");
if (mClientChannel != null) {
- Slog.e(WindowManagerService.TAG, "Duplicate register of drag input channel");
+ Slog.e(TAG_WM, "Duplicate register of drag input channel");
} else {
InputChannel[] channels = InputChannel.openInputChannelPair("drag");
mServerChannel = channels[0];
@@ -161,17 +167,17 @@
mDragWindowHandle.frameBottom = p.y;
// Pause rotations before a drag.
- if (WindowManagerService.DEBUG_ORIENTATION) {
- Slog.d(WindowManagerService.TAG, "Pausing rotation during drag");
+ if (DEBUG_ORIENTATION) {
+ Slog.d(TAG_WM, "Pausing rotation during drag");
}
mService.pauseRotationLocked();
}
}
void unregister() {
- if (WindowManagerService.DEBUG_DRAG) Slog.d(WindowManagerService.TAG, "unregistering drag input channel");
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "unregistering drag input channel");
if (mClientChannel == null) {
- Slog.e(WindowManagerService.TAG, "Unregister of nonexistent drag input channel");
+ Slog.e(TAG_WM, "Unregister of nonexistent drag input channel");
} else {
mService.mInputManager.unregisterInputChannel(mServerChannel);
mInputEventReceiver.dispose();
@@ -185,8 +191,8 @@
mDragApplicationHandle = null;
// Resume rotations after a drag.
- if (WindowManagerService.DEBUG_ORIENTATION) {
- Slog.d(WindowManagerService.TAG, "Resuming rotation after drag");
+ if (DEBUG_ORIENTATION) {
+ Slog.d(TAG_WM, "Resuming rotation after drag");
}
mService.resumeRotationLocked();
}
@@ -210,8 +216,8 @@
mNotifiedWindows.clear();
mDragInProgress = true;
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "broadcasting DRAG_STARTED at (" + touchX + ", " + touchY + ")");
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "broadcasting DRAG_STARTED at (" + touchX + ", " + touchY + ")");
}
final WindowList windows = mService.getWindowListLocked(mDisplay);
@@ -238,8 +244,8 @@
if ((mFlags & View.DRAG_FLAG_GLOBAL) == 0) {
final IBinder winBinder = newWin.mClient.asBinder();
if (winBinder != mLocalWin) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "Not dispatching local DRAG_STARTED to " + newWin);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "Not dispatching local DRAG_STARTED to " + newWin);
}
return;
}
@@ -253,7 +259,7 @@
// track each window that we've notified that the drag is starting
mNotifiedWindows.add(newWin);
} catch (RemoteException e) {
- Slog.w(WindowManagerService.TAG, "Unable to drag-start window " + newWin);
+ Slog.w(TAG_WM, "Unable to drag-start window " + newWin);
} finally {
// if the callee was local, the dispatch has already recycled the event
if (Process.myPid() != newWin.mSession.mPid) {
@@ -275,8 +281,8 @@
return;
}
}
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "need to send DRAG_STARTED to new window " + newWin);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "need to send DRAG_STARTED to new window " + newWin);
}
sendDragStartedLw(newWin, mCurrentX, mCurrentY, mDataDescription);
}
@@ -285,8 +291,8 @@
private void broadcastDragEndedLw() {
final int myPid = Process.myPid();
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "broadcasting DRAG_ENDED");
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "broadcasting DRAG_ENDED");
}
for (WindowState ws : mNotifiedWindows) {
float x = 0;
@@ -301,7 +307,7 @@
try {
ws.mClient.dispatchDragEvent(evt);
} catch (RemoteException e) {
- Slog.w(WindowManagerService.TAG, "Unable to drag-end window " + ws);
+ Slog.w(TAG_WM, "Unable to drag-end window " + ws);
}
// if the current window is in the same process,
// the dispatch has already recycled the event
@@ -356,24 +362,24 @@
final int myPid = Process.myPid();
// Move the surface to the given touch
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, ">>> OPEN TRANSACTION notifyMoveLw");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ TAG_WM, ">>> OPEN TRANSACTION notifyMoveLw");
SurfaceControl.openTransaction();
try {
mSurfaceControl.setPosition(x - mThumbOffsetX, y - mThumbOffsetY);
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DRAG "
+ if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " DRAG "
+ mSurfaceControl + ": pos=(" +
(int)(x - mThumbOffsetX) + "," + (int)(y - mThumbOffsetY) + ")");
} finally {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, "<<< CLOSE TRANSACTION notifyMoveLw");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ TAG_WM, "<<< CLOSE TRANSACTION notifyMoveLw");
}
// Tell the affected window
WindowState touchedWin = getTouchedWinAtPointLw(x, y);
if (touchedWin == null) {
- if (WindowManagerService.DEBUG_DRAG) Slog.d(WindowManagerService.TAG, "No touched win at x=" + x + " y=" + y);
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "No touched win at x=" + x + " y=" + y);
return;
}
if ((mFlags & View.DRAG_FLAG_GLOBAL) == 0) {
@@ -387,8 +393,8 @@
try {
// have we dragged over a new window?
if ((touchedWin != mTargetWindow) && (mTargetWindow != null)) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "sending DRAG_EXITED to " + mTargetWindow);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "sending DRAG_EXITED to " + mTargetWindow);
}
// force DRAG_EXITED_EVENT if appropriate
DragEvent evt = obtainDragEvent(mTargetWindow, DragEvent.ACTION_DRAG_EXITED,
@@ -399,8 +405,8 @@
}
}
if (touchedWin != null) {
- if (false && WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "sending DRAG_LOCATION to " + touchedWin);
+ if (false && DEBUG_DRAG) {
+ Slog.d(TAG_WM, "sending DRAG_LOCATION to " + touchedWin);
}
DragEvent evt = obtainDragEvent(touchedWin, DragEvent.ACTION_DRAG_LOCATION,
x, y, null, null, null, null, false);
@@ -410,7 +416,7 @@
}
}
} catch (RemoteException e) {
- Slog.w(WindowManagerService.TAG, "can't send drag notification to windows");
+ Slog.w(TAG_WM, "can't send drag notification to windows");
}
mTargetWindow = touchedWin;
}
@@ -437,8 +443,8 @@
return true;
}
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "sending DROP to " + touchedWin);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "sending DROP to " + touchedWin);
}
final int myPid = Process.myPid();
final IBinder token = touchedWin.mClient.asBinder();
@@ -452,7 +458,7 @@
Message msg = mService.mH.obtainMessage(H.DRAG_END_TIMEOUT, token);
mService.mH.sendMessageDelayed(msg, 5000);
} catch (RemoteException e) {
- Slog.w(WindowManagerService.TAG, "can't send drop notification to win " + touchedWin);
+ Slog.w(TAG_WM, "can't send drop notification to win " + touchedWin);
return true;
} finally {
if (myPid != touchedWin.mSession.mPid) {
@@ -566,4 +572,4 @@
set.start(); // Will start on the first call to getTransformation.
return set;
}
-}
\ No newline at end of file
+}
diff --git a/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java b/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
index 0a372d8..3186d3d 100644
--- a/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
+++ b/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
@@ -17,6 +17,10 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -32,7 +36,7 @@
import android.view.SurfaceSession;
class EmulatorDisplayOverlay {
- private static final String TAG = "EmulatorDisplayOverlay";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "EmulatorDisplayOverlay" : TAG_WM;
// Display dimensions
private Point mScreenSize;
@@ -53,7 +57,7 @@
SurfaceControl ctrl = null;
try {
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ if (DEBUG_SURFACE_TRACE) {
ctrl = new WindowSurfaceController.SurfaceTrace(session, "EmulatorDisplayOverlay",
mScreenSize.x, mScreenSize.y, PixelFormat.TRANSLUCENT,
SurfaceControl.HIDDEN);
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index 5511136..e42658e 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -16,9 +16,11 @@
package com.android.server.wm;
-import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
-import static com.android.server.wm.WindowManagerService.DEBUG_FOCUS_LIGHT;
-import static com.android.server.wm.WindowManagerService.DEBUG_INPUT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_INPUT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.app.ActivityManagerNative;
import android.graphics.Rect;
@@ -79,7 +81,7 @@
synchronized (mService.mWindowMap) {
WindowState windowState = (WindowState) inputWindowHandle.windowState;
if (windowState != null) {
- Slog.i(WindowManagerService.TAG, "WINDOW DIED " + windowState);
+ Slog.i(TAG_WM, "WINDOW DIED " + windowState);
mService.removeWindowLocked(windowState);
}
}
@@ -108,7 +110,7 @@
}
if (windowState != null) {
- Slog.i(WindowManagerService.TAG, "Input event dispatching timed out "
+ Slog.i(TAG_WM, "Input event dispatching timed out "
+ "sending to " + windowState.mAttrs.getTitle()
+ ". Reason: " + reason);
// Figure out whether this window is layered above system windows.
@@ -118,11 +120,11 @@
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
aboveSystem = windowState.mBaseLayer > systemAlertLayer;
} else if (appWindowToken != null) {
- Slog.i(WindowManagerService.TAG, "Input event dispatching timed out "
+ Slog.i(TAG_WM, "Input event dispatching timed out "
+ "sending to application " + appWindowToken.stringName
+ ". Reason: " + reason);
} else {
- Slog.i(WindowManagerService.TAG, "Input event dispatching timed out "
+ Slog.i(TAG_WM, "Input event dispatching timed out "
+ ". Reason: " + reason);
}
@@ -212,7 +214,7 @@
}
if (DEBUG_INPUT) {
- Slog.d(WindowManagerService.TAG, "addInputWindowHandle: "
+ Slog.d(TAG_WM, "addInputWindowHandle: "
+ child + ", " + inputWindowHandle);
}
addInputWindowHandleLw(inputWindowHandle);
@@ -235,7 +237,7 @@
}
mUpdateInputWindowsNeeded = false;
- if (false) Slog.d(WindowManagerService.TAG, ">>>>>> ENTERED updateInputWindowsLw");
+ if (false) Slog.d(TAG_WM, ">>>>>> ENTERED updateInputWindowsLw");
// Populate the input window list with information about all of the windows that
// could potentially receive input.
@@ -247,28 +249,28 @@
// If there's a drag in flight, provide a pseudowindow to catch drag input
final boolean inDrag = (mService.mDragState != null);
if (inDrag) {
- if (WindowManagerService.DEBUG_DRAG) {
- Log.d(WindowManagerService.TAG, "Inserting drag window");
+ if (DEBUG_DRAG) {
+ Log.d(TAG_WM, "Inserting drag window");
}
final InputWindowHandle dragWindowHandle = mService.mDragState.mDragWindowHandle;
if (dragWindowHandle != null) {
addInputWindowHandleLw(dragWindowHandle);
} else {
- Slog.w(WindowManagerService.TAG, "Drag is in progress but there is no "
+ Slog.w(TAG_WM, "Drag is in progress but there is no "
+ "drag window handle.");
}
}
final boolean inPositioning = (mService.mTaskPositioner != null);
if (inPositioning) {
- if (WindowManagerService.DEBUG_TASK_POSITIONING) {
- Log.d(WindowManagerService.TAG, "Inserting window handle for repositioning");
+ if (DEBUG_TASK_POSITIONING) {
+ Log.d(TAG_WM, "Inserting window handle for repositioning");
}
final InputWindowHandle dragWindowHandle = mService.mTaskPositioner.mDragWindowHandle;
if (dragWindowHandle != null) {
addInputWindowHandleLw(dragWindowHandle);
} else {
- Slog.e(WindowManagerService.TAG,
+ Slog.e(TAG_WM,
"Repositioning is in progress but there is no drag window handle.");
}
}
@@ -328,7 +330,7 @@
// Clear the list in preparation for the next round.
clearInputWindowHandlesLw();
- if (false) Slog.d(WindowManagerService.TAG, "<<<<<<< EXITED updateInputWindowsLw");
+ if (false) Slog.d(TAG_WM, "<<<<<<< EXITED updateInputWindowsLw");
}
/* Notifies that the input device configuration has changed. */
@@ -416,7 +418,7 @@
*/
public void setInputFocusLw(WindowState newWindow, boolean updateInputWindows) {
if (DEBUG_FOCUS_LIGHT || DEBUG_INPUT) {
- Slog.d(WindowManagerService.TAG, "Input focus has changed to " + newWindow);
+ Slog.d(TAG_WM, "Input focus has changed to " + newWindow);
}
if (newWindow != mInputFocus) {
@@ -452,7 +454,7 @@
public void pauseDispatchingLw(WindowToken window) {
if (! window.paused) {
if (DEBUG_INPUT) {
- Slog.v(WindowManagerService.TAG, "Pausing WindowToken " + window);
+ Slog.v(TAG_WM, "Pausing WindowToken " + window);
}
window.paused = true;
@@ -463,7 +465,7 @@
public void resumeDispatchingLw(WindowToken window) {
if (window.paused) {
if (DEBUG_INPUT) {
- Slog.v(WindowManagerService.TAG, "Resuming WindowToken " + window);
+ Slog.v(TAG_WM, "Resuming WindowToken " + window);
}
window.paused = false;
@@ -474,7 +476,7 @@
public void freezeInputDispatchingLw() {
if (! mInputDispatchFrozen) {
if (DEBUG_INPUT) {
- Slog.v(WindowManagerService.TAG, "Freezing input dispatching");
+ Slog.v(TAG_WM, "Freezing input dispatching");
}
mInputDispatchFrozen = true;
@@ -485,7 +487,7 @@
public void thawInputDispatchingLw() {
if (mInputDispatchFrozen) {
if (DEBUG_INPUT) {
- Slog.v(WindowManagerService.TAG, "Thawing input dispatching");
+ Slog.v(TAG_WM, "Thawing input dispatching");
}
mInputDispatchFrozen = false;
@@ -496,7 +498,7 @@
public void setEventDispatchingLw(boolean enabled) {
if (mInputDispatchEnabled != enabled) {
if (DEBUG_INPUT) {
- Slog.v(WindowManagerService.TAG, "Setting event dispatching to " + enabled);
+ Slog.v(TAG_WM, "Setting event dispatching to " + enabled);
}
mInputDispatchEnabled = enabled;
diff --git a/services/core/java/com/android/server/wm/KeyguardDisableHandler.java b/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
index 37d811f..377071d 100644
--- a/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
+++ b/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
@@ -16,6 +16,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.app.ActivityManagerNative;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
@@ -29,7 +32,7 @@
import android.view.WindowManagerPolicy;
public class KeyguardDisableHandler extends Handler {
- private static final String TAG = "KeyguardDisableHandler";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "KeyguardDisableHandler" : TAG_WM;
private static final int ALLOW_DISABLE_YES = 1;
private static final int ALLOW_DISABLE_NO = 0;
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index 3158c47..c118a21 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -16,11 +16,16 @@
package com.android.server.wm;
-import java.io.PrintWriter;
-
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+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.TYPE_LAYER_MULTIPLIER;
-import static com.android.server.wm.WindowSurfaceController.SurfaceTrace;
import static com.android.server.wm.WindowStateAnimator.WINDOW_FREEZE_LAYER;
+import static com.android.server.wm.WindowSurfaceController.SurfaceTrace;
+
import android.content.Context;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
@@ -28,16 +33,18 @@
import android.util.Slog;
import android.view.Display;
import android.view.DisplayInfo;
-import android.view.Surface.OutOfResourcesException;
import android.view.Surface;
+import android.view.Surface.OutOfResourcesException;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
+import java.io.PrintWriter;
+
class ScreenRotationAnimation {
- static final String TAG = "ScreenRotationAnimation";
+ static final String TAG = TAG_WITH_CLASS_NAME ? "ScreenRotationAnimation" : TAG_WM;
static final boolean DEBUG_STATE = false;
static final boolean DEBUG_TRANSFORMS = false;
static final boolean TWO_PHASE_ANIMATION = false;
@@ -244,7 +251,7 @@
mOriginalHeight = originalHeight;
if (!inTransaction) {
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION ScreenRotationAnimation");
SurfaceControl.openTransaction();
}
@@ -256,7 +263,7 @@
flags |= SurfaceControl.SECURE;
}
- if (WindowManagerService.DEBUG_SURFACE_TRACE) {
+ if (DEBUG_SURFACE_TRACE) {
mSurfaceControl = new SurfaceTrace(session, "ScreenshotSurface",
mWidth, mHeight,
PixelFormat.OPAQUE, flags);
@@ -282,15 +289,14 @@
Slog.w(TAG, "Unable to allocate freeze surface", e);
}
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
- " FREEZE " + mSurfaceControl + ": CREATE");
+ if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
+ " FREEZE " + mSurfaceControl + ": CREATE");
setRotationInTransaction(originalRotation);
} finally {
if (!inTransaction) {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
"<<< CLOSE TRANSACTION ScreenRotationAnimation");
}
}
@@ -537,8 +543,8 @@
final int layerStack = mDisplayContent.getDisplay().getLayerStack();
if (USE_CUSTOM_BLACK_FRAME && mCustomBlackFrame == null) {
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation");
SurfaceControl.openTransaction();
@@ -561,15 +567,15 @@
Slog.w(TAG, "Unable to allocate black surface", e);
} finally {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
"<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation");
}
}
if (!customAnim && mExitingBlackFrame == null) {
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation");
SurfaceControl.openTransaction();
try {
@@ -601,15 +607,15 @@
Slog.w(TAG, "Unable to allocate black surface", e);
} finally {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
"<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation");
}
}
if (customAnim && mEnteringBlackFrame == null) {
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
">>> OPEN TRANSACTION ScreenRotationAnimation.startAnimation");
SurfaceControl.openTransaction();
@@ -623,8 +629,8 @@
Slog.w(TAG, "Unable to allocate black surface", e);
} finally {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
- WindowManagerService.TAG,
+ if (SHOW_LIGHT_TRANSACTIONS || DEBUG_STATE) Slog.i(
+ TAG_WM,
"<<< CLOSE TRANSACTION ScreenRotationAnimation.startAnimation");
}
}
@@ -657,8 +663,8 @@
public void kill() {
if (DEBUG_STATE) Slog.v(TAG, "Kill!");
if (mSurfaceControl != null) {
- if (WindowManagerService.SHOW_TRANSACTIONS ||
- WindowManagerService.SHOW_SURFACE_ALLOC) Slog.i(WindowManagerService.TAG,
+ if (SHOW_TRANSACTIONS ||
+ SHOW_SURFACE_ALLOC) Slog.i(TAG_WM,
" FREEZE " + mSurfaceControl + ": DESTROY");
mSurfaceControl.destroy();
mSurfaceControl = null;
diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java
index 6e2e830..1b6957d 100644
--- a/services/core/java/com/android/server/wm/Session.java
+++ b/services/core/java/com/android/server/wm/Session.java
@@ -16,12 +16,11 @@
package com.android.server.wm;
-import android.view.IWindowId;
-import android.view.IWindowSessionCallback;
-import com.android.internal.view.IInputContext;
-import com.android.internal.view.IInputMethodClient;
-import com.android.internal.view.IInputMethodManager;
-import com.android.server.wm.WindowManagerService.H;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DRAG;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.content.ClipData;
import android.content.Context;
@@ -39,13 +38,20 @@
import android.util.Slog;
import android.view.Display;
import android.view.IWindow;
+import android.view.IWindowId;
import android.view.IWindowSession;
+import android.view.IWindowSessionCallback;
import android.view.InputChannel;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
import android.view.WindowManager;
+import com.android.internal.view.IInputContext;
+import com.android.internal.view.IInputMethodClient;
+import com.android.internal.view.IInputMethodManager;
+import com.android.server.wm.WindowManagerService.H;
+
import java.io.PrintWriter;
/**
@@ -131,7 +137,7 @@
} catch (RuntimeException e) {
// Log all 'real' exceptions thrown to the caller
if (!(e instanceof SecurityException)) {
- Slog.wtf(WindowManagerService.TAG, "Window Session Crash", e);
+ Slog.wtf(TAG_WM, "Window Session Crash", e);
}
throw e;
}
@@ -200,13 +206,13 @@
Rect outVisibleInsets, Rect outStableInsets, Rect outsets, Configuration
outConfig,
Surface outSurface) {
- if (false) Slog.d(WindowManagerService.TAG, ">>>>>> ENTERED relayout from "
+ if (false) Slog.d(TAG_WM, ">>>>>> ENTERED relayout from "
+ Binder.getCallingPid());
int res = mService.relayoutWindow(this, window, seq, attrs,
requestedWidth, requestedHeight, viewFlags, flags,
outFrame, outOverscanInsets, outContentInsets, outVisibleInsets,
outStableInsets, outsets, outConfig, outSurface);
- if (false) Slog.d(WindowManagerService.TAG, "<<<<<< EXITING relayout to "
+ if (false) Slog.d(TAG_WM, "<<<<<< EXITING relayout to "
+ Binder.getCallingPid());
return res;
}
@@ -235,7 +241,7 @@
public void finishDrawing(IWindow window) {
if (WindowManagerService.localLOGV) Slog.v(
- WindowManagerService.TAG, "IWindow finishDrawing called for " + window);
+ TAG_WM, "IWindow finishDrawing called for " + window);
mService.finishDrawingWindow(this, window);
}
@@ -275,24 +281,24 @@
public boolean performDrag(IWindow window, IBinder dragToken,
float touchX, float touchY, float thumbCenterX, float thumbCenterY,
ClipData data) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "perform drag: win=" + window + " data=" + data);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "perform drag: win=" + window + " data=" + data);
}
synchronized (mService.mWindowMap) {
if (mService.mDragState == null) {
- Slog.w(WindowManagerService.TAG, "No drag prepared");
+ Slog.w(TAG_WM, "No drag prepared");
throw new IllegalStateException("performDrag() without prepareDrag()");
}
if (dragToken != mService.mDragState.mToken) {
- Slog.w(WindowManagerService.TAG, "Performing mismatched drag");
+ Slog.w(TAG_WM, "Performing mismatched drag");
throw new IllegalStateException("performDrag() does not match prepareDrag()");
}
WindowState callingWin = mService.windowForClientLocked(null, window, false);
if (callingWin == null) {
- Slog.w(WindowManagerService.TAG, "Bad requesting window " + window);
+ Slog.w(TAG_WM, "Bad requesting window " + window);
return false; // !!! TODO: throw here?
}
@@ -317,7 +323,7 @@
mService.mInputMonitor.updateInputWindowsLw(true /*force*/);
if (!mService.mInputManager.transferTouchFocus(callingWin.mInputChannel,
mService.mDragState.mServerChannel)) {
- Slog.e(WindowManagerService.TAG, "Unable to transfer touch focus");
+ Slog.e(TAG_WM, "Unable to transfer touch focus");
mService.mDragState.unregister();
mService.mDragState = null;
mService.mInputMonitor.updateInputWindowsLw(true /*force*/);
@@ -333,8 +339,8 @@
// Make the surface visible at the proper location
final SurfaceControl surfaceControl = mService.mDragState.mSurfaceControl;
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, ">>> OPEN TRANSACTION performDrag");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ TAG_WM, ">>> OPEN TRANSACTION performDrag");
SurfaceControl.openTransaction();
try {
surfaceControl.setPosition(touchX - thumbCenterX,
@@ -344,8 +350,8 @@
surfaceControl.show();
} finally {
SurfaceControl.closeTransaction();
- if (WindowManagerService.SHOW_LIGHT_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, "<<< CLOSE TRANSACTION performDrag");
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(
+ TAG_WM, "<<< CLOSE TRANSACTION performDrag");
}
}
@@ -353,16 +359,16 @@
}
public boolean startMovingTask(IWindow window, float startX, float startY) {
- if (WindowManagerService.DEBUG_TASK_POSITIONING) Slog.d(
- WindowManagerService.TAG, "startMovingTask: {" + startX + "," + startY + "}");
+ if (DEBUG_TASK_POSITIONING) Slog.d(
+ TAG_WM, "startMovingTask: {" + startX + "," + startY + "}");
return mService.startMovingTask(window, startX, startY);
}
public void reportDropResult(IWindow window, boolean consumed) {
IBinder token = window.asBinder();
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "Drop result=" + consumed + " reported by " + token);
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "Drop result=" + consumed + " reported by " + token);
}
synchronized (mService.mWindowMap) {
@@ -371,13 +377,13 @@
if (mService.mDragState == null) {
// Most likely the drop recipient ANRed and we ended the drag
// out from under it. Log the issue and move on.
- Slog.w(WindowManagerService.TAG, "Drop result given but no drag in progress");
+ Slog.w(TAG_WM, "Drop result given but no drag in progress");
return;
}
if (mService.mDragState.mToken != token) {
// We're in a drag, but the wrong window has responded.
- Slog.w(WindowManagerService.TAG, "Invalid drop-result claim by " + window);
+ Slog.w(TAG_WM, "Invalid drop-result claim by " + window);
throw new IllegalStateException("reportDropResult() by non-recipient");
}
@@ -387,7 +393,7 @@
mService.mH.removeMessages(H.DRAG_END_TIMEOUT, window.asBinder());
WindowState callingWin = mService.windowForClientLocked(null, window, false);
if (callingWin == null) {
- Slog.w(WindowManagerService.TAG, "Bad result-reporting window " + window);
+ Slog.w(TAG_WM, "Bad result-reporting window " + window);
return; // !!! TODO: throw here?
}
@@ -400,20 +406,20 @@
}
public void cancelDragAndDrop(IBinder dragToken) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "cancelDragAndDrop");
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "cancelDragAndDrop");
}
synchronized (mService.mWindowMap) {
long ident = Binder.clearCallingIdentity();
try {
if (mService.mDragState == null) {
- Slog.w(WindowManagerService.TAG, "cancelDragAndDrop() without prepareDrag()");
+ Slog.w(TAG_WM, "cancelDragAndDrop() without prepareDrag()");
throw new IllegalStateException("cancelDragAndDrop() without prepareDrag()");
}
if (mService.mDragState.mToken != dragToken) {
- Slog.w(WindowManagerService.TAG,
+ Slog.w(TAG_WM,
"cancelDragAndDrop() does not match prepareDrag()");
throw new IllegalStateException(
"cancelDragAndDrop() does not match prepareDrag()");
@@ -428,14 +434,14 @@
}
public void dragRecipientEntered(IWindow window) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "Drag into new candidate view @ " + window.asBinder());
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "Drag into new candidate view @ " + window.asBinder());
}
}
public void dragRecipientExited(IWindow window) {
- if (WindowManagerService.DEBUG_DRAG) {
- Slog.d(WindowManagerService.TAG, "Drag from old candidate view @ " + window.asBinder());
+ if (DEBUG_DRAG) {
+ Slog.d(TAG_WM, "Drag from old candidate view @ " + window.asBinder());
}
}
@@ -518,10 +524,10 @@
void windowAddedLocked() {
if (mSurfaceSession == null) {
if (WindowManagerService.localLOGV) Slog.v(
- WindowManagerService.TAG, "First window added to " + this + ", creating SurfaceSession");
+ TAG_WM, "First window added to " + this + ", creating SurfaceSession");
mSurfaceSession = new SurfaceSession();
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, " NEW SURFACE SESSION " + mSurfaceSession);
+ if (SHOW_TRANSACTIONS) Slog.i(
+ TAG_WM, " NEW SURFACE SESSION " + mSurfaceSession);
mService.mSessions.add(this);
if (mLastReportedAnimatorScale != mService.getCurrentAnimatorScale()) {
mService.dispatchNewAnimatorScaleLocked(this);
@@ -540,14 +546,14 @@
mService.mSessions.remove(this);
if (mSurfaceSession != null) {
if (WindowManagerService.localLOGV) Slog.v(
- WindowManagerService.TAG, "Last window removed from " + this
+ TAG_WM, "Last window removed from " + this
+ ", destroying " + mSurfaceSession);
- if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(
- WindowManagerService.TAG, " KILL SURFACE SESSION " + mSurfaceSession);
+ if (SHOW_TRANSACTIONS) Slog.i(
+ TAG_WM, " KILL SURFACE SESSION " + mSurfaceSession);
try {
mSurfaceSession.kill();
} catch (Exception e) {
- Slog.w(WindowManagerService.TAG, "Exception thrown when killing surface session "
+ Slog.w(TAG_WM, "Exception thrown when killing surface session "
+ mSurfaceSession + " in session " + this
+ ": " + e.toString());
}
diff --git a/services/core/java/com/android/server/wm/StrictModeFlash.java b/services/core/java/com/android/server/wm/StrictModeFlash.java
index fb5876b..d1547eb 100644
--- a/services/core/java/com/android/server/wm/StrictModeFlash.java
+++ b/services/core/java/com/android/server/wm/StrictModeFlash.java
@@ -17,6 +17,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PixelFormat;
@@ -29,7 +32,7 @@
import android.view.SurfaceSession;
class StrictModeFlash {
- private static final String TAG = "StrictModeFlash";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "StrictModeFlash" : TAG_WM;
private final SurfaceControl mSurfaceControl;
private final Surface mSurface = new Surface();
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 22f1d63..72a8343 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -19,12 +19,11 @@
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.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.app.ActivityManager.RESIZE_MODE_SYSTEM_SCREEN_ROTATION;
-import static com.android.server.wm.WindowManagerService.TAG;
-import static com.android.server.wm.WindowManagerService.DEBUG_RESIZE;
-import static com.android.server.wm.WindowManagerService.DEBUG_STACK;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_RESIZE;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK;
import static com.android.server.wm.WindowManagerService.H.RESIZE_TASK;
import static com.android.server.wm.WindowManagerService.H.SHOW_NON_RESIZEABLE_DOCK_TOAST;
import static android.view.WindowManager.DOCKED_INVALID;
@@ -156,11 +155,11 @@
void removeLocked() {
if (!mAppTokens.isEmpty() && mStack.isAnimating()) {
- if (DEBUG_STACK) Slog.i(TAG, "removeTask: deferring removing taskId=" + mTaskId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: deferring removing taskId=" + mTaskId);
mDeferRemoval = true;
return;
}
- if (DEBUG_STACK) Slog.i(TAG, "removeTask: removing taskId=" + mTaskId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: removing taskId=" + mTaskId);
EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "removeTask");
mDeferRemoval = false;
DisplayContent content = getDisplayContent();
@@ -175,7 +174,7 @@
if (stack == mStack) {
return;
}
- if (DEBUG_STACK) Slog.i(TAG, "moveTaskToStack: removing taskId=" + mTaskId
+ if (DEBUG_STACK) Slog.i(TAG_WM, "moveTaskToStack: removing taskId=" + mTaskId
+ " from stack=" + mStack);
EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask");
if (mStack != null) {
@@ -186,7 +185,7 @@
void positionTaskInStack(TaskStack stack, int position, Rect bounds, Configuration config) {
if (mStack != null && stack != mStack) {
- if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: removing taskId=" + mTaskId
+ if (DEBUG_STACK) Slog.i(TAG_WM, "positionTaskInStack: removing taskId=" + mTaskId
+ " from stack=" + mStack);
EventLog.writeEvent(EventLogTags.WM_TASK_REMOVED, mTaskId, "moveTask");
mStack.removeTask(this);
@@ -252,7 +251,7 @@
}
int boundsChange = BOUNDS_CHANGE_NONE;
- if (mBounds.left != bounds.left || mBounds.right != bounds.right) {
+ if (mBounds.left != bounds.left || mBounds.top != bounds.top) {
boundsChange |= BOUNDS_CHANGE_POSITION;
}
if (mBounds.width() != bounds.width() || mBounds.height() != bounds.height()) {
@@ -464,7 +463,7 @@
for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) {
final WindowState win = windows.get(winNdx);
if (!resizingWindows.contains(win)) {
- if (DEBUG_RESIZE) Slog.d(TAG, "setBounds: Resizing " + win);
+ if (DEBUG_RESIZE) Slog.d(TAG_WM, "setBounds: Resizing " + win);
resizingWindows.add(win);
}
}
diff --git a/services/core/java/com/android/server/wm/TaskPositioner.java b/services/core/java/com/android/server/wm/TaskPositioner.java
index 32c3205..725bbbc 100644
--- a/services/core/java/com/android/server/wm/TaskPositioner.java
+++ b/services/core/java/com/android/server/wm/TaskPositioner.java
@@ -18,15 +18,18 @@
import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
-import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.RESIZE_MODE_USER;
import static android.app.ActivityManager.RESIZE_MODE_USER_FORCED;
+import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static com.android.server.wm.DimLayer.RESIZING_HINT_ALPHA;
import static com.android.server.wm.DimLayer.RESIZING_HINT_DURATION_MS;
-import static com.android.server.wm.WindowManagerService.DEBUG_TASK_POSITIONING;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_POSITIONING;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+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.dipToPixel;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_HEIGHT_IN_DP;
import static com.android.server.wm.WindowState.MINIMUM_VISIBLE_WIDTH_IN_DP;
@@ -40,13 +43,13 @@
import android.os.Trace;
import android.util.DisplayMetrics;
import android.util.Slog;
+import android.view.BatchedInputEventReceiver;
import android.view.Choreographer;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.InputChannel;
import android.view.InputDevice;
import android.view.InputEvent;
-import android.view.BatchedInputEventReceiver;
import android.view.MotionEvent;
import android.view.SurfaceControl;
import android.view.WindowManager;
@@ -59,7 +62,7 @@
import java.lang.annotation.RetentionPolicy;
class TaskPositioner implements DimLayer.DimLayerUser {
- private static final String TAG = "TaskPositioner";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskPositioner" : TAG_WM;
// The margin the pointer position has to be within the side of the screen to be
// considered at the side of the screen.
@@ -277,7 +280,7 @@
mDragWindowHandle.frameBottom = p.y;
// Pause rotations before a drag.
- if (WindowManagerService.DEBUG_ORIENTATION) {
+ if (DEBUG_ORIENTATION) {
Slog.d(TAG, "Pausing rotation during re-position");
}
mService.pauseRotationLocked();
@@ -321,7 +324,7 @@
mDragEnded = true;
// Resume rotations after a drag.
- if (WindowManagerService.DEBUG_ORIENTATION) {
+ if (DEBUG_ORIENTATION) {
Slog.d(TAG, "Resuming rotation after re-position");
}
mService.resumeRotationLocked();
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 116c16e..49d9efe 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -39,9 +39,9 @@
import static android.view.WindowManager.DOCKED_LEFT;
import static android.view.WindowManager.DOCKED_RIGHT;
import static android.view.WindowManager.DOCKED_TOP;
-import static com.android.server.wm.WindowManagerService.DEBUG_TASK_MOVEMENT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_TASK_MOVEMENT;
import static com.android.server.wm.WindowManagerService.H.RESIZE_STACK;
-import static com.android.server.wm.WindowManagerService.TAG;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
public class TaskStack implements DimLayer.DimLayerUser {
@@ -138,7 +138,7 @@
task.setBounds(bounds, config);
}
} else {
- Slog.wtf(TAG, "No config for task: " + task + ", is there a mismatch with AM?");
+ Slog.wtf(TAG_WM, "No config for task: " + task + ", is there a mismatch with AM?");
}
}
return true;
@@ -285,7 +285,7 @@
// Reset position based on minimum/maximum possible positions.
position = Math.min(Math.max(position, minPosition), maxPosition);
- if (DEBUG_TASK_MOVEMENT) Slog.d(TAG,
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM,
"positionTask: task=" + task + " position=" + position);
mTasks.add(position, task);
@@ -338,14 +338,14 @@
}
void moveTaskToTop(Task task) {
- if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToTop: task=" + task + " Callers="
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM, "moveTaskToTop: task=" + task + " Callers="
+ Debug.getCallers(6));
mTasks.remove(task);
addTask(task, true);
}
void moveTaskToBottom(Task task) {
- if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToBottom: task=" + task);
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM, "moveTaskToBottom: task=" + task);
mTasks.remove(task);
addTask(task, false);
}
@@ -356,7 +356,7 @@
* @param task The Task to delete.
*/
void removeTask(Task task) {
- if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "removeTask: task=" + task);
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG_WM, "removeTask: task=" + task);
mTasks.remove(task);
if (mDisplayContent != null) {
if (mTasks.isEmpty()) {
@@ -433,7 +433,7 @@
final int dockedSide = dockedStack.getDockSide();
if (dockedSide == DOCKED_INVALID) {
// Not sure how you got here...Only thing we can do is return current bounds.
- Slog.e(TAG, "Failed to get valid docked side for docked stack=" + dockedStack);
+ Slog.e(TAG_WM, "Failed to get valid docked side for docked stack=" + dockedStack);
outBounds.set(mBounds);
return;
}
@@ -692,6 +692,10 @@
}
boolean isVisibleLocked() {
+ final boolean keyguardOn = mService.mPolicy.isKeyguardShowingOrOccluded();
+ if (keyguardOn && !StackId.isAllowedOverLockscreen(mStackId)) {
+ return false;
+ }
for (int i = mTasks.size() - 1; i >= 0; i--) {
Task task = mTasks.get(i);
for (int j = task.mAppTokens.size() - 1; j >= 0; j--) {
@@ -702,26 +706,4 @@
}
return false;
}
-
- /**
- * Returns true if this stack has a window that is fully visible, doesn't perform an entry
- * animation and is just positioned where it's supposed to be.
- */
- boolean hasWindowWithFinalVisibility() {
- for (int i = mTasks.size() - 1; i >= 0; i--) {
- Task task = mTasks.get(i);
- for (int j = task.mAppTokens.size() - 1; j >= 0; j--) {
- final AppWindowToken token = task.mAppTokens.get(j);
- if (token.mAppAnimator.animating || token.mWillReplaceWindow) {
- continue;
- }
- WindowState win = token.findMainWindow();
- if (win != null && !win.mWinAnimator.mEnterAnimationPending
- && !win.mWinAnimator.mEnteringAnimation) {
- return true;
- }
- }
- }
- return false;
- }
}
diff --git a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
index 2f890be..af109d4 100644
--- a/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
+++ b/services/core/java/com/android/server/wm/TaskTapPointerEventListener.java
@@ -109,6 +109,7 @@
final int y = (int) motionEvent.getY();
final Task task = mDisplayContent.findTaskForControlPoint(x, y);
if (task == null) {
+ mPointerIconShape = STYLE_NOT_SPECIFIED;
break;
}
task.getDimBounds(mTmpRect);
@@ -137,6 +138,7 @@
} break;
case MotionEvent.ACTION_HOVER_EXIT:
+ mPointerIconShape = STYLE_NOT_SPECIFIED;
motionEvent.getDevice().setPointerShape(STYLE_DEFAULT);
break;
diff --git a/services/core/java/com/android/server/wm/ViewServer.java b/services/core/java/com/android/server/wm/ViewServer.java
index 741cee3..ecf5652 100644
--- a/services/core/java/com/android/server/wm/ViewServer.java
+++ b/services/core/java/com/android/server/wm/ViewServer.java
@@ -17,6 +17,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.util.Slog;
import java.net.ServerSocket;
@@ -47,7 +50,7 @@
private static final int VIEW_SERVER_MAX_CONNECTIONS = 10;
// Debug facility
- private static final String LOG_TAG = "ViewServer";
+ private static final String LOG_TAG = TAG_WITH_CLASS_NAME ? "ViewServer" : TAG_WM;
private static final String VALUE_PROTOCOL_VERSION = "4";
private static final String VALUE_SERVER_VERSION = "4";
@@ -150,7 +153,7 @@
*
* @see #start()
* @see #stop()
- * @see WindowManagerService#isViewServerRunning()
+ * @see WindowManagerService#isViewServerRunning()
*/
boolean isRunning() {
return mThread != null && mThread.isAlive();
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 8b984f0..3db9ae0 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -22,13 +22,15 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
-import static com.android.server.wm.WindowManagerService.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerService.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYERS;
-import static com.android.server.wm.WindowManagerService.DEBUG_WINDOW_MOVEMENT;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerService.DEBUG_WALLPAPER;
-import static com.android.server.wm.WindowManagerService.DEBUG_WALLPAPER_LIGHT;
+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_LAYERS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
+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.WALLPAPER_DRAW_PENDING_TIMEOUT;
import static com.android.server.wm.WindowManagerService.TYPE_LAYER_MULTIPLIER;
import static com.android.server.wm.WindowManagerService.TYPE_LAYER_OFFSET;
@@ -51,7 +53,7 @@
* NOTE: All methods in this class must be called with the window manager service lock held.
*/
class WallpaperController {
- private static final String TAG = com.android.server.wm.WindowManagerService.TAG;
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "WallpaperController" : TAG_WM;
final private WindowManagerService mService;
private final ArrayList<WindowToken> mWallpaperTokens = new ArrayList<>();
diff --git a/services/core/java/com/android/server/wm/Watermark.java b/services/core/java/com/android/server/wm/Watermark.java
index e226e3d..171e575 100644
--- a/services/core/java/com/android/server/wm/Watermark.java
+++ b/services/core/java/com/android/server/wm/Watermark.java
@@ -16,6 +16,8 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PixelFormat;
@@ -53,9 +55,9 @@
Watermark(Display display, DisplayMetrics dm, SurfaceSession session, String[] tokens) {
if (false) {
- Log.i(WindowManagerService.TAG, "*********************** WATERMARK");
+ Log.i(TAG_WM, "*********************** WATERMARK");
for (int i=0; i<tokens.length; i++) {
- Log.i(WindowManagerService.TAG, " TOKEN #" + i + ": " + tokens[i]);
+ Log.i(TAG_WM, " TOKEN #" + i + ": " + tokens[i]);
}
}
@@ -78,7 +80,7 @@
}
mText = builder.toString();
if (false) {
- Log.i(WindowManagerService.TAG, "Final text: " + mText);
+ Log.i(TAG_WM, "Final text: " + mText);
}
int fontSize = WindowManagerService.getPropertyInt(tokens, 1,
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index f20c4e5..a6523a4 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -21,15 +21,17 @@
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerService.DEBUG_FOCUS_LIGHT;
-import static com.android.server.wm.WindowManagerService.DEBUG_KEYGUARD;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT_REPEATS;
-import static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerService.DEBUG_WALLPAPER;
-import static com.android.server.wm.WindowManagerService.DEBUG_WINDOW_TRACE;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEYGUARD;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+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_WINDOW_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+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.WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED;
import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE;
import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION;
@@ -56,7 +58,7 @@
* on behalf of WindowManagerService.
*/
public class WindowAnimator {
- private static final String TAG = "WindowAnimator";
+ private static final String TAG = TAG_WITH_CLASS_NAME ? "WindowAnimator" : TAG_WM;
/** How long to give statusbar to clear the private keyguard flag when animating out */
private static final long KEYGUARD_ANIM_TIMEOUT_MS = 1000;
diff --git a/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java b/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java
new file mode 100644
index 0000000..a49bb31
--- /dev/null
+++ b/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2007 The Android Open 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;
+
+/**
+ * Common class for the various debug {@link android.util.Log} output configuration in the window
+ * manager package.
+ */
+public class WindowManagerDebugConfig {
+ // All output logs in the window manager package use the {@link #TAG_WM} string for tagging
+ // their log output. This makes it easy to identify the origin of the log message when sifting
+ // through a large amount of log output from multiple sources. However, it also makes trying
+ // to figure-out the origin of a log message while debugging the window manager a little
+ // painful. By setting this constant to true, log messages from the window manager package
+ // will be tagged with their class names instead fot the generic tag.
+ static final boolean TAG_WITH_CLASS_NAME = false;
+
+ // Default log tag for the window manager package.
+ static final String TAG_WM = "WindowManager";
+
+ static final boolean DEBUG_RESIZE = false;
+ static final boolean DEBUG = false;
+ static final boolean DEBUG_ADD_REMOVE = false;
+ static final boolean DEBUG_FOCUS = false;
+ static final boolean DEBUG_FOCUS_LIGHT = DEBUG_FOCUS || false;
+ static final boolean DEBUG_ANIM = false;
+ static final boolean DEBUG_KEYGUARD = false;
+ static final boolean DEBUG_LAYOUT = false;
+ static final boolean DEBUG_LAYERS = false;
+ static final boolean DEBUG_INPUT = false;
+ static final boolean DEBUG_INPUT_METHOD = false;
+ static final boolean DEBUG_VISIBILITY = false;
+ static final boolean DEBUG_WINDOW_MOVEMENT = false;
+ static final boolean DEBUG_TOKEN_MOVEMENT = false;
+ static final boolean DEBUG_ORIENTATION = false;
+ static final boolean DEBUG_APP_ORIENTATION = false;
+ static final boolean DEBUG_CONFIGURATION = false;
+ static final boolean DEBUG_APP_TRANSITIONS = false;
+ static final boolean DEBUG_STARTING_WINDOW = false;
+ static final boolean DEBUG_WALLPAPER = false;
+ static final boolean DEBUG_WALLPAPER_LIGHT = false || DEBUG_WALLPAPER;
+ static final boolean DEBUG_DRAG = false;
+ static final boolean DEBUG_SCREEN_ON = false;
+ static final boolean DEBUG_SCREENSHOT = false;
+ static final boolean DEBUG_BOOT = false;
+ static final boolean DEBUG_LAYOUT_REPEATS = true;
+ static final boolean DEBUG_SURFACE_TRACE = false;
+ static final boolean DEBUG_WINDOW_TRACE = false;
+ static final boolean DEBUG_TASK_MOVEMENT = false;
+ static final boolean DEBUG_TASK_POSITIONING = false;
+ static final boolean DEBUG_STACK = false;
+ static final boolean DEBUG_DISPLAY = false;
+ static final boolean DEBUG_POWER = false;
+ static final boolean DEBUG_DIM_LAYER = false;
+ static final boolean SHOW_SURFACE_ALLOC = false;
+ static final boolean SHOW_TRANSACTIONS = false;
+ static final boolean SHOW_VERBOSE_TRANSACTIONS = false && SHOW_TRANSACTIONS;
+ static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
+ static final boolean HIDE_STACK_CRAWLS = true;
+ static final boolean DEBUG_WINDOW_CROP = false;
+}
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index dab195f..0c606fe 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -20,8 +20,8 @@
import static android.app.ActivityManager.StackId.DOCKED_STACK_ID;
import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.StatusBarManager.DISABLE_MASK;
-import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND;
+import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
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;
@@ -43,20 +43,55 @@
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_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_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_WALLPAPER;
-
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.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_ORIENTATION;
+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_DISPLAY;
+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_INPUT_METHOD;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_KEYGUARD;
+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_RESIZE;
+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_SURFACE_TRACE;
+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.HIDE_STACK_CRAWLS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+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_WM;
import android.Manifest;
import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager.StackId;
import android.app.ActivityManagerNative;
import android.app.AppOpsManager;
import android.app.IActivityManager;
@@ -119,8 +154,8 @@
import android.view.DisplayInfo;
import android.view.DropPermissionHolder;
import android.view.Gravity;
-import android.view.IApplicationToken;
import android.view.IAppTransitionAnimationSpecsFuture;
+import android.view.IApplicationToken;
import android.view.IDockDividerVisibilityListener;
import android.view.IInputFilter;
import android.view.IOnKeyguardExitResult;
@@ -152,8 +187,8 @@
import android.view.animation.Animation;
import android.widget.Toast;
-import com.android.internal.app.IAssistScreenshotReceiver;
import com.android.internal.R;
+import com.android.internal.app.IAssistScreenshotReceiver;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.view.IInputContext;
import com.android.internal.view.IInputMethodClient;
@@ -193,46 +228,6 @@
/** {@hide} */
public class WindowManagerService extends IWindowManager.Stub
implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs {
- static final String TAG = "WindowManager";
- static final boolean DEBUG = false;
- static final boolean DEBUG_ADD_REMOVE = false;
- static final boolean DEBUG_FOCUS = false;
- static final boolean DEBUG_FOCUS_LIGHT = DEBUG_FOCUS || false;
- static final boolean DEBUG_ANIM = false;
- static final boolean DEBUG_KEYGUARD = false;
- static final boolean DEBUG_LAYOUT = false;
- static final boolean DEBUG_RESIZE = false;
- static final boolean DEBUG_LAYERS = false;
- static final boolean DEBUG_INPUT = false;
- static final boolean DEBUG_INPUT_METHOD = false;
- static final boolean DEBUG_VISIBILITY = false;
- static final boolean DEBUG_WINDOW_MOVEMENT = false;
- static final boolean DEBUG_TOKEN_MOVEMENT = false;
- static final boolean DEBUG_ORIENTATION = false;
- static final boolean DEBUG_APP_ORIENTATION = false;
- static final boolean DEBUG_CONFIGURATION = false;
- static final boolean DEBUG_APP_TRANSITIONS = false;
- static final boolean DEBUG_STARTING_WINDOW = false;
- static final boolean DEBUG_WALLPAPER = false;
- static final boolean DEBUG_WALLPAPER_LIGHT = false || DEBUG_WALLPAPER;
- static final boolean DEBUG_DRAG = false;
- static final boolean DEBUG_SCREEN_ON = false;
- static final boolean DEBUG_SCREENSHOT = false;
- static final boolean DEBUG_BOOT = false;
- static final boolean DEBUG_LAYOUT_REPEATS = true;
- static final boolean DEBUG_SURFACE_TRACE = false;
- static final boolean DEBUG_WINDOW_TRACE = false;
- static final boolean DEBUG_TASK_MOVEMENT = false;
- static final boolean DEBUG_TASK_POSITIONING = false;
- static final boolean DEBUG_STACK = false;
- static final boolean DEBUG_DISPLAY = false;
- static final boolean DEBUG_POWER = false;
- static final boolean DEBUG_DIM_LAYER = false;
- static final boolean SHOW_SURFACE_ALLOC = false;
- static final boolean SHOW_TRANSACTIONS = false;
- static final boolean SHOW_LIGHT_TRANSACTIONS = false || SHOW_TRANSACTIONS;
- static final boolean SHOW_VERBOSE_TRANSACTIONS = false && SHOW_TRANSACTIONS;
- static final boolean HIDE_STACK_CRAWLS = true;
static final int LAYOUT_REPEAT_THRESHOLD = 4;
static final boolean PROFILE_ORIENTATION = false;
@@ -523,7 +518,7 @@
boolean mClientFreezingScreen = false;
int mAppsFreezingScreen = 0;
int mLastWindowForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
- int mLastKeyguardForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
+ int mLastKeyguardForcedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
int mLayoutSeq = 0;
@@ -703,13 +698,13 @@
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (DEBUG_DRAG) {
- Slog.w(TAG, "Unexpected ACTION_DOWN in drag layer");
+ Slog.w(TAG_WM, "Unexpected ACTION_DOWN in drag layer");
}
} break;
case MotionEvent.ACTION_MOVE: {
if (mStylusButtonDownAtStart && !isStylusButtonDown) {
- if (DEBUG_DRAG) Slog.d(TAG, "Button no longer pressed; dropping at "
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "Button no longer pressed; dropping at "
+ newX + "," + newY);
synchronized (mWindowMap) {
endDrag = completeDropLw(newX, newY);
@@ -723,7 +718,7 @@
} break;
case MotionEvent.ACTION_UP: {
- if (DEBUG_DRAG) Slog.d(TAG, "Got UP on move channel; dropping at "
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "Got UP on move channel; dropping at "
+ newX + "," + newY);
synchronized (mWindowMap) {
endDrag = completeDropLw(newX, newY);
@@ -731,13 +726,13 @@
} break;
case MotionEvent.ACTION_CANCEL: {
- if (DEBUG_DRAG) Slog.d(TAG, "Drag cancelled!");
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "Drag cancelled!");
endDrag = true;
} break;
}
if (endDrag) {
- if (DEBUG_DRAG) Slog.d(TAG, "Drag ended; tearing down state");
+ if (DEBUG_DRAG) Slog.d(TAG_WM, "Drag ended; tearing down state");
// tell all the windows that the drag has ended
synchronized (mWindowMap) {
mDragState.endDragLw();
@@ -749,7 +744,7 @@
handled = true;
}
} catch (Exception e) {
- Slog.e(TAG, "Exception caught by drag handleMotion", e);
+ Slog.e(TAG_WM, "Exception caught by drag handleMotion", e);
} finally {
finishInputEvent(event, handled);
}
@@ -886,7 +881,7 @@
LocalServices.addService(WindowManagerPolicy.class, mPolicy);
- mPointerEventDispatcher = new PointerEventDispatcher(mInputManager.monitorInput(TAG));
+ mPointerEventDispatcher = new PointerEventDispatcher(mInputManager.monitorInput(TAG_WM));
mFxSession = new SurfaceSession();
mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
@@ -947,7 +942,7 @@
updateShowImeWithHardKeyboard();
mHoldingScreenWakeLock = mPowerManager.newWakeLock(
- PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG);
+ PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG_WM);
mHoldingScreenWakeLock.setReferenceCounted(false);
mAnimator = new WindowAnimator(this);
@@ -985,7 +980,7 @@
// The window manager only throws security exceptions, so let's
// log all others.
if (!(e instanceof SecurityException)) {
- Slog.wtf(TAG, "Window Manager Crash", e);
+ Slog.wtf(TAG_WM, "Window Manager Crash", e);
}
throw e;
}
@@ -995,7 +990,7 @@
final WindowList windows = pos.getWindowList();
final int i = windows.indexOf(pos);
if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(
- TAG, "Adding window " + window + " at "
+ TAG_WM, "Adding window " + window + " at "
+ (i+1) + " of " + windows.size() + " (after " + pos + ")");
windows.add(i+1, window);
mWindowsChanged = true;
@@ -1005,10 +1000,10 @@
final WindowList windows = pos.getWindowList();
int i = windows.indexOf(pos);
if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(
- TAG, "Adding window " + window + " at "
+ TAG_WM, "Adding window " + window + " at "
+ i + " of " + windows.size() + " (before " + pos + ")");
if (i < 0) {
- Slog.w(TAG, "placeWindowBefore: Unable to find " + pos + " in " + windows);
+ Slog.w(TAG_WM, "placeWindowBefore: Unable to find " + pos + " in " + windows);
i = 0;
}
windows.add(i, window);
@@ -1084,7 +1079,7 @@
}
// No windows from this token on this display
- if (localLOGV) Slog.v(TAG, "Figuring out where to add app window " + client.asBinder()
+ if (localLOGV) Slog.v(TAG_WM, "Figuring out where to add app window " + client.asBinder()
+ " (token=" + token + ")");
// Figure out where the window should go, based on the
// order of applications.
@@ -1192,7 +1187,7 @@
break;
}
}
- if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG,
+ if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM,
"Based on layer: Adding window " + win + " at " + (i + 1) + " of "
+ windows.size());
windows.add(i + 1, win);
@@ -1224,7 +1219,7 @@
//apptoken note that the window could be a floating window
//that was created later or a window at the top of the list of
//windows associated with this token.
- if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG,
+ if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM,
"not Base app: Adding window " + win + " at " + (newIdx + 1) + " of "
+ windows.size());
windows.add(newIdx + 1, win);
@@ -1262,7 +1257,7 @@
}
}
i++;
- if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG,
+ if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM,
"Free window: Adding window " + win + " at " + i + " of " + windows.size());
windows.add(i, win);
mWindowsChanged = true;
@@ -1297,7 +1292,7 @@
// in the same sublayer.
if (wSublayer >= sublayer) {
if (addToToken) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Adding " + win + " to " + token);
token.windows.add(i, win);
}
placeWindowBefore(wSublayer >= 0 ? attached : w, win);
@@ -1308,7 +1303,7 @@
// in the same sublayer.
if (wSublayer > sublayer) {
if (addToToken) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Adding " + win + " to " + token);
token.windows.add(i, win);
}
placeWindowBefore(w, win);
@@ -1318,7 +1313,7 @@
}
if (i >= NA) {
if (addToToken) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Adding " + win + " to " + token);
token.windows.add(win);
}
if (sublayer < 0) {
@@ -1333,7 +1328,7 @@
}
private void addWindowToListInOrderLocked(final WindowState win, boolean addToToken) {
- if (DEBUG_FOCUS_LIGHT) Slog.d(TAG, "addWindowToListInOrderLocked: win=" + win +
+ if (DEBUG_FOCUS_LIGHT) Slog.d(TAG_WM, "addWindowToListInOrderLocked: win=" + win +
" Callers=" + Debug.getCallers(4));
if (win.mAttachedWindow == null) {
final WindowToken token = win.mToken;
@@ -1344,7 +1339,7 @@
addFreeWindowToListLocked(win);
}
if (addToToken) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + win + " to " + token);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Adding " + win + " to " + token);
token.windows.add(tokenWindowsPos, win);
}
} else {
@@ -1372,9 +1367,9 @@
if (fl == 0 || fl == (FLAG_NOT_FOCUSABLE|FLAG_ALT_FOCUSABLE_IM)
|| type == TYPE_APPLICATION_STARTING || type == TYPE_DOCK_DIVIDER) {
if (DEBUG_INPUT_METHOD) {
- Slog.i(TAG, "isVisibleOrAdding " + w + ": " + w.isVisibleOrAdding());
+ Slog.i(TAG_WM, "isVisibleOrAdding " + w + ": " + w.isVisibleOrAdding());
if (!w.isVisibleOrAdding()) {
- Slog.i(TAG, " mSurfaceController=" + w.mWinAnimator.mSurfaceController
+ Slog.i(TAG_WM, " mSurfaceController=" + w.mWinAnimator.mSurfaceController
+ " relayoutCalled=" + w.mRelayoutCalled
+ " viewVis=" + w.mViewVisibility
+ " policyVis=" + w.mPolicyVisibility
@@ -1382,7 +1377,7 @@
+ " attachHid=" + w.mAttachedHidden
+ " exiting=" + w.mExiting + " destroying=" + w.mDestroying);
if (w.mAppToken != null) {
- Slog.i(TAG, " mAppToken.hiddenRequested=" + w.mAppToken.hiddenRequested);
+ Slog.i(TAG_WM, " mAppToken.hiddenRequested=" + w.mAppToken.hiddenRequested);
}
}
}
@@ -1406,11 +1401,11 @@
for (i = windows.size() - 1; i >= 0; --i) {
WindowState win = windows.get(i);
- if (DEBUG_INPUT_METHOD && willMove) Slog.i(TAG, "Checking window @" + i
+ if (DEBUG_INPUT_METHOD && willMove) Slog.i(TAG_WM, "Checking window @" + i
+ " " + win + " fl=0x" + Integer.toHexString(win.mAttrs.flags));
if (canBeImeTarget(win)) {
w = win;
- //Slog.i(TAG, "Putting input method here!");
+ //Slog.i(TAG_WM, "Putting input method here!");
// Yet more tricksyness! If this window is a "starting"
// window, we do actually want to be on top of it, but
@@ -1432,7 +1427,7 @@
// Now w is either mWindows[0] or an IME (or null if mWindows is empty).
- if (DEBUG_INPUT_METHOD && willMove) Slog.v(TAG, "Proposed new IME target: " + w);
+ if (DEBUG_INPUT_METHOD && willMove) Slog.v(TAG_WM, "Proposed new IME target: " + w);
// Now, a special case -- if the last target's window is in the
// process of exiting, and is above the new target, keep on the
@@ -1445,11 +1440,11 @@
&& curTarget.isDisplayedLw()
&& curTarget.isClosing()
&& (w == null || curTarget.mWinAnimator.mAnimLayer > w.mWinAnimator.mAnimLayer)) {
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Current target higher, not changing");
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, "Current target higher, not changing");
return windows.indexOf(curTarget) + 1;
}
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Desired input method target="
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, "Desired input method target="
+ w + " willMove=" + willMove);
if (willMove && w != null) {
@@ -1482,7 +1477,7 @@
}
if (highestTarget != null) {
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, mAppTransition + " " + highestTarget
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, mAppTransition + " " + highestTarget
+ " animating=" + highestTarget.mWinAnimator.isAnimating()
+ " layer=" + highestTarget.mWinAnimator.mAnimLayer
+ " new layer=" + w.mWinAnimator.mAnimLayer);
@@ -1507,10 +1502,10 @@
}
}
- //Slog.i(TAG, "Placing input method @" + (i+1));
+ //Slog.i(TAG_WM, "Placing input method @" + (i+1));
if (w != null) {
if (willMove) {
- if (DEBUG_INPUT_METHOD) Slog.w(TAG, "Moving IM target from " + curTarget + " to "
+ if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from " + curTarget + " to "
+ w + (HIDE_STACK_CRAWLS ? "" : " Callers=" + Debug.getCallers(4)));
mInputMethodTarget = w;
mInputMethodTargetWaitingAnim = false;
@@ -1523,7 +1518,7 @@
return i+1;
}
if (willMove) {
- if (DEBUG_INPUT_METHOD) Slog.w(TAG, "Moving IM target from " + curTarget + " to null."
+ if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from " + curTarget + " to null."
+ (HIDE_STACK_CRAWLS ? "" : " Callers=" + Debug.getCallers(4)));
mInputMethodTarget = null;
setInputMethodAnimLayerAdjustment(0);
@@ -1536,7 +1531,7 @@
if (pos >= 0) {
win.mTargetAppToken = mInputMethodTarget.mAppToken;
if (DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(
- TAG, "Adding input method window " + win + " at " + pos);
+ TAG_WM, "Adding input method window " + win + " at " + pos);
// TODO(multidisplay): IMEs are only supported on the default display.
getDefaultWindowListLocked().add(pos, win);
mWindowsChanged = true;
@@ -1549,19 +1544,19 @@
}
void setInputMethodAnimLayerAdjustment(int adj) {
- if (DEBUG_LAYERS) Slog.v(TAG, "Setting im layer adj to " + adj);
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "Setting im layer adj to " + adj);
mInputMethodAnimLayerAdjustment = adj;
WindowState imw = mInputMethodWindow;
if (imw != null) {
imw.mWinAnimator.mAnimLayer = imw.mLayer + adj;
- if (DEBUG_LAYERS) Slog.v(TAG, "IM win " + imw
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "IM win " + imw
+ " anim layer: " + imw.mWinAnimator.mAnimLayer);
int wi = imw.mChildWindows.size();
while (wi > 0) {
wi--;
WindowState cw = imw.mChildWindows.get(wi);
cw.mWinAnimator.mAnimLayer = cw.mLayer + adj;
- if (DEBUG_LAYERS) Slog.v(TAG, "IM win " + cw
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "IM win " + cw
+ " anim layer: " + cw.mWinAnimator.mAnimLayer);
}
}
@@ -1570,7 +1565,7 @@
di --;
imw = mInputMethodDialogs.get(di);
imw.mWinAnimator.mAnimLayer = imw.mLayer + adj;
- if (DEBUG_LAYERS) Slog.v(TAG, "IM win " + imw
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "IM win " + imw
+ " anim layer: " + imw.mWinAnimator.mAnimLayer);
}
}
@@ -1580,7 +1575,7 @@
int wpos = windows.indexOf(win);
if (wpos >= 0) {
if (wpos < interestingPos) interestingPos--;
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Temp removing at " + wpos + ": " + win);
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Temp removing at " + wpos + ": " + win);
windows.remove(wpos);
mWindowsChanged = true;
int NC = win.mChildWindows.size();
@@ -1590,7 +1585,7 @@
int cpos = windows.indexOf(cw);
if (cpos >= 0) {
if (cpos < interestingPos) interestingPos--;
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Temp removing child at "
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Temp removing child at "
+ cpos + ": " + cw);
windows.remove(cpos);
}
@@ -1607,7 +1602,7 @@
WindowList windows = win.getWindowList();
int wpos = windows.indexOf(win);
if (wpos >= 0) {
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "ReAdd removing from " + wpos + ": " + win);
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "ReAdd removing from " + wpos + ": " + win);
windows.remove(wpos);
mWindowsChanged = true;
reAddWindowLocked(wpos, win);
@@ -1618,7 +1613,7 @@
int N = windows.size();
while (N > 0) {
N--;
- Slog.v(TAG, prefix + "#" + N + ": " + windows.get(N));
+ Slog.v(TAG_WM, prefix + "#" + N + ": " + windows.get(N));
}
}
@@ -1628,12 +1623,12 @@
// TODO(multidisplay): IMEs are only supported on the default display.
WindowList windows = getDefaultWindowListLocked();
final int N = dialogs.size();
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Removing " + N + " dialogs w/pos=" + pos);
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, "Removing " + N + " dialogs w/pos=" + pos);
for (int i=0; i<N; i++) {
pos = tmpRemoveWindowLocked(pos, dialogs.get(i));
}
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "Window list w/pos=" + pos);
+ Slog.v(TAG_WM, "Window list w/pos=" + pos);
logWindowList(windows, " ");
}
@@ -1650,14 +1645,14 @@
break;
}
}
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Adding " + N + " dialogs at pos=" + pos);
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, "Adding " + N + " dialogs at pos=" + pos);
for (int i=0; i<N; i++) {
WindowState win = dialogs.get(i);
win.mTargetAppToken = targetAppToken;
pos = reAddWindowLocked(pos, win);
}
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "Final window list:");
+ Slog.v(TAG_WM, "Final window list:");
logWindowList(windows, " ");
}
return;
@@ -1667,7 +1662,7 @@
win.mTargetAppToken = null;
reAddWindowToListInOrderLocked(win);
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "No IM target, final list:");
+ Slog.v(TAG_WM, "No IM target, final list:");
logWindowList(windows, " ");
}
}
@@ -1733,18 +1728,18 @@
if (imWin != null) {
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "Moving IM from " + imPos);
+ Slog.v(TAG_WM, "Moving IM from " + imPos);
logWindowList(windows, " ");
}
imPos = tmpRemoveWindowLocked(imPos, imWin);
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "List after removing with new pos " + imPos + ":");
+ Slog.v(TAG_WM, "List after removing with new pos " + imPos + ":");
logWindowList(windows, " ");
}
imWin.mTargetAppToken = mInputMethodTarget.mAppToken;
reAddWindowLocked(imPos, imWin);
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "List after moving IM to " + imPos + ":");
+ Slog.v(TAG_WM, "List after moving IM to " + imPos + ":");
logWindowList(windows, " ");
}
if (DN > 0) moveInputMethodDialogsLocked(imPos+1);
@@ -1757,12 +1752,12 @@
// because they aren't currently associated with a focus window.
if (imWin != null) {
- if (DEBUG_INPUT_METHOD) Slog.v(TAG, "Moving IM from " + imPos);
+ if (DEBUG_INPUT_METHOD) Slog.v(TAG_WM, "Moving IM from " + imPos);
tmpRemoveWindowLocked(0, imWin);
imWin.mTargetAppToken = null;
reAddWindowToListInOrderLocked(imWin);
if (DEBUG_INPUT_METHOD) {
- Slog.v(TAG, "List with no IM target:");
+ Slog.v(TAG_WM, "List with no IM target:");
logWindowList(windows, " ");
}
if (DN > 0) moveInputMethodDialogsLocked(-1);
@@ -1801,38 +1796,38 @@
final DisplayContent displayContent = getDisplayContentLocked(displayId);
if (displayContent == null) {
- Slog.w(TAG, "Attempted to add window to a display that does not exist: "
+ Slog.w(TAG_WM, "Attempted to add window to a display that does not exist: "
+ displayId + ". Aborting.");
return WindowManagerGlobal.ADD_INVALID_DISPLAY;
}
if (!displayContent.hasAccess(session.mUid)) {
- Slog.w(TAG, "Attempted to add window to a display for which the application "
+ Slog.w(TAG_WM, "Attempted to add window to a display for which the application "
+ "does not have access: " + displayId + ". Aborting.");
return WindowManagerGlobal.ADD_INVALID_DISPLAY;
}
if (mWindowMap.containsKey(client.asBinder())) {
- Slog.w(TAG, "Window " + client + " is already added");
+ Slog.w(TAG_WM, "Window " + client + " is already added");
return WindowManagerGlobal.ADD_DUPLICATE_ADD;
}
if (type >= FIRST_SUB_WINDOW && type <= LAST_SUB_WINDOW) {
attachedWindow = windowForClientLocked(null, attrs.token, false);
if (attachedWindow == null) {
- Slog.w(TAG, "Attempted to add window with token that is not a window: "
+ Slog.w(TAG_WM, "Attempted to add window with token that is not a window: "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_SUBWINDOW_TOKEN;
}
if (attachedWindow.mAttrs.type >= FIRST_SUB_WINDOW
&& attachedWindow.mAttrs.type <= LAST_SUB_WINDOW) {
- Slog.w(TAG, "Attempted to add window with token that is a sub-window: "
+ Slog.w(TAG_WM, "Attempted to add window with token that is a sub-window: "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_SUBWINDOW_TOKEN;
}
}
if (type == TYPE_PRIVATE_PRESENTATION && !displayContent.isPrivate()) {
- Slog.w(TAG, "Attempted to add private presentation window to a non-private display. Aborting.");
+ Slog.w(TAG_WM, "Attempted to add private presentation window to a non-private display. Aborting.");
return WindowManagerGlobal.ADD_PERMISSION_DENIED;
}
@@ -1841,32 +1836,37 @@
AppWindowToken atoken = null;
if (token == null) {
if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) {
- Slog.w(TAG, "Attempted to add application window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add application window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
if (type == TYPE_INPUT_METHOD) {
- Slog.w(TAG, "Attempted to add input method window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add input method window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
if (type == TYPE_VOICE_INTERACTION) {
- Slog.w(TAG, "Attempted to add voice interaction window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add voice interaction window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
if (type == TYPE_WALLPAPER) {
- Slog.w(TAG, "Attempted to add wallpaper window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add wallpaper window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
if (type == TYPE_DREAM) {
- Slog.w(TAG, "Attempted to add Dream window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add Dream window with unknown token "
+ + attrs.token + ". Aborting.");
+ return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
+ }
+ if (type == TYPE_QS_DIALOG) {
+ Slog.w(TAG_WM, "Attempted to add QS dialog window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
if (type == TYPE_ACCESSIBILITY_OVERLAY) {
- Slog.w(TAG, "Attempted to add Accessibility overlay window with unknown token "
+ Slog.w(TAG_WM, "Attempted to add Accessibility overlay window with unknown token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
@@ -1875,52 +1875,52 @@
} else if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) {
atoken = token.appWindowToken;
if (atoken == null) {
- Slog.w(TAG, "Attempted to add window with non-application token "
+ Slog.w(TAG_WM, "Attempted to add window with non-application token "
+ token + ". Aborting.");
return WindowManagerGlobal.ADD_NOT_APP_TOKEN;
} else if (atoken.removed) {
- Slog.w(TAG, "Attempted to add window with exiting application token "
+ Slog.w(TAG_WM, "Attempted to add window with exiting application token "
+ token + ". Aborting.");
return WindowManagerGlobal.ADD_APP_EXITING;
}
if (type == TYPE_APPLICATION_STARTING && atoken.firstWindowDrawn) {
// No need for this guy!
if (DEBUG_STARTING_WINDOW || localLOGV) Slog.v(
- TAG, "**** NO NEED TO START: " + attrs.getTitle());
+ TAG_WM, "**** NO NEED TO START: " + attrs.getTitle());
return WindowManagerGlobal.ADD_STARTING_NOT_NEEDED;
}
} else if (type == TYPE_INPUT_METHOD) {
if (token.windowType != TYPE_INPUT_METHOD) {
- Slog.w(TAG, "Attempted to add input method window with bad token "
+ Slog.w(TAG_WM, "Attempted to add input method window with bad token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
} else if (type == TYPE_VOICE_INTERACTION) {
if (token.windowType != TYPE_VOICE_INTERACTION) {
- Slog.w(TAG, "Attempted to add voice interaction window with bad token "
+ Slog.w(TAG_WM, "Attempted to add voice interaction window with bad token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
} else if (type == TYPE_WALLPAPER) {
if (token.windowType != TYPE_WALLPAPER) {
- Slog.w(TAG, "Attempted to add wallpaper window with bad token "
+ Slog.w(TAG_WM, "Attempted to add wallpaper window with bad token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
} else if (type == TYPE_DREAM) {
if (token.windowType != TYPE_DREAM) {
- Slog.w(TAG, "Attempted to add Dream window with bad token "
+ Slog.w(TAG_WM, "Attempted to add Dream window with bad token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
} else if (type == TYPE_ACCESSIBILITY_OVERLAY) {
if (token.windowType != TYPE_ACCESSIBILITY_OVERLAY) {
- Slog.w(TAG, "Attempted to add Accessibility overlay window with bad token "
+ Slog.w(TAG_WM, "Attempted to add Accessibility overlay window with bad token "
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
} else if (token.appWindowToken != null) {
- Slog.w(TAG, "Non-null appWindowToken for system window of type=" + type);
+ Slog.w(TAG_WM, "Non-null appWindowToken for system window of type=" + type);
// It is not valid to use an app token with other system types; we will
// instead make a new token for it (as if null had been passed in for the token).
attrs.token = null;
@@ -1933,18 +1933,18 @@
if (win.mDeathRecipient == null) {
// Client has apparently died, so there is no reason to
// continue.
- Slog.w(TAG, "Adding window client " + client.asBinder()
+ Slog.w(TAG_WM, "Adding window client " + client.asBinder()
+ " that is dead, aborting.");
return WindowManagerGlobal.ADD_APP_EXITING;
}
if (win.getDisplayContent() == null) {
- Slog.w(TAG, "Adding window to Display that has been removed.");
+ Slog.w(TAG_WM, "Adding window to Display that has been removed.");
return WindowManagerGlobal.ADD_INVALID_DISPLAY;
}
if (atoken != null && atoken.appDied) {
- Slog.d(TAG, "App is now revived: " + atoken);
+ Slog.d(TAG_WM, "App is now revived: " + atoken);
atoken.appDied = false;
}
@@ -1984,7 +1984,7 @@
if (type == TYPE_APPLICATION_STARTING && token.appWindowToken != null) {
token.appWindowToken.startingWindow = win;
- if (DEBUG_STARTING_WINDOW) Slog.v (TAG, "addWindow: " + token.appWindowToken
+ if (DEBUG_STARTING_WINDOW) Slog.v (TAG_WM, "addWindow: " + token.appWindowToken
+ " startingWindow=" + win);
}
@@ -2065,7 +2065,7 @@
}
mInputMonitor.updateInputWindowsLw(false /*force*/);
- if (localLOGV || DEBUG_ADD_REMOVE) Slog.v(TAG, "addWindow: New client "
+ if (localLOGV || DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "addWindow: New client "
+ client.asBinder() + ": window=" + win + " Callers=" + Debug.getCallers(5));
if (win.isVisibleOrAdding() && updateOrientationFromAppTokensLocked(false)) {
@@ -2170,11 +2170,11 @@
void removeWindowLocked(WindowState win) {
final boolean startingWindow = win.mAttrs.type == TYPE_APPLICATION_STARTING;
if (startingWindow) {
- if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Starting window removed " + win);
+ if (DEBUG_STARTING_WINDOW) Slog.d(TAG_WM, "Starting window removed " + win);
}
if (localLOGV || DEBUG_FOCUS || DEBUG_FOCUS_LIGHT && win==mCurrentFocus) Slog.v(
- TAG, "Remove " + win + " client="
+ TAG_WM, "Remove " + win + " client="
+ Integer.toHexString(System.identityHashCode(win.mClient.asBinder()))
+ ", surfaceController=" + win.mWinAnimator.mSurfaceController + " Callers="
+ Debug.getCallers(4));
@@ -2184,7 +2184,7 @@
win.disposeInputChannel();
if (DEBUG_APP_TRANSITIONS) Slog.v(
- TAG, "Remove " + win + ": mSurfaceController=" + win.mWinAnimator.mSurfaceController
+ TAG_WM, "Remove " + win + ": mSurfaceController=" + win.mWinAnimator.mSurfaceController
+ " mExiting=" + win.mExiting
+ " isAnimating=" + win.mWinAnimator.isAnimating()
+ " app-animation="
@@ -2205,7 +2205,7 @@
if (appToken != null && appToken.mWillReplaceWindow) {
// This window is going to be replaced. We need to keep it around until the new one
// gets added, then we will get rid of this one.
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Preserving " + win + " until the new one is "
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Preserving " + win + " until the new one is "
+ "added");
win.mExiting = true;
appToken.mReplacingRemoveRequested = true;
@@ -2217,7 +2217,7 @@
wasVisible = win.isWinVisibleLw();
if (wasVisible && appToken != null && appToken.appDied) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG,
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM,
"Not removing " + win + " because app died while it's visible");
win.mAppDied = true;
@@ -2292,7 +2292,7 @@
for (int i=win.mChildWindows.size()-1; i>=0; i--) {
WindowState cwin = win.mChildWindows.get(i);
- Slog.w(TAG, "Force-removing child win " + cwin + " from container "
+ Slog.w(TAG_WM, "Force-removing child win " + cwin + " from container "
+ win);
removeWindowInnerLocked(cwin);
}
@@ -2306,13 +2306,13 @@
if (false) {
RuntimeException e = new RuntimeException("here");
e.fillInStackTrace();
- Slog.w(TAG, "Removing window " + win, e);
+ Slog.w(TAG_WM, "Removing window " + win, e);
}
mPolicy.removeWindowLw(win);
win.removeLocked();
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "removeWindowInnerLocked: " + win);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "removeWindowInnerLocked: " + win);
mWindowMap.remove(win.mClient.asBinder());
if (win.mAppOp != AppOpsManager.OP_NONE) {
mAppOps.finishOp(win.mAppOp, win.getOwningUid(), win.getOwningPackage());
@@ -2321,7 +2321,7 @@
mPendingRemove.remove(win);
mResizingWindows.remove(win);
mWindowsChanged = true;
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Final remove of window: " + win);
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Final remove of window: " + win);
if (mInputMethodWindow == win) {
mInputMethodWindow = null;
@@ -2331,13 +2331,13 @@
final WindowToken token = win.mToken;
final AppWindowToken atoken = win.mAppToken;
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + win + " from " + token);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "Removing " + win + " from " + token);
token.windows.remove(win);
if (atoken != null) {
atoken.allAppWindows.remove(win);
}
if (localLOGV) Slog.v(
- TAG, "**** Removing window " + win + ": count="
+ TAG_WM, "**** Removing window " + win + ": count="
+ token.windows.size());
if (token.windows.size() == 0) {
if (!token.explicit) {
@@ -2349,13 +2349,13 @@
if (atoken != null) {
if (atoken.startingWindow == win) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Notify removed startingWindow " + win);
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Notify removed startingWindow " + win);
scheduleRemoveStartingWindowLocked(atoken);
} else
if (atoken.allAppWindows.size() == 0 && atoken.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, "Nulling last startingWindow");
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Nulling last startingWindow");
atoken.startingData = null;
} else if (atoken.allAppWindows.size() == 1 && atoken.startingView != null) {
// If this is the last window except for a starting transition
@@ -2411,18 +2411,18 @@
static void logSurface(WindowState w, String msg, RuntimeException where) {
String str = " SURFACE " + msg + ": " + w;
if (where != null) {
- Slog.i(TAG, str, where);
+ Slog.i(TAG_WM, str, where);
} else {
- Slog.i(TAG, str);
+ Slog.i(TAG_WM, str);
}
}
static void logSurface(SurfaceControl s, String title, String msg, RuntimeException where) {
String str = " SURFACE " + s + ": " + msg + " / " + title;
if (where != null) {
- Slog.i(TAG, str, where);
+ Slog.i(TAG_WM, str, where);
} else {
- Slog.i(TAG, str);
+ Slog.i(TAG_WM, str);
}
}
@@ -2511,7 +2511,7 @@
}
void repositionChild(Session session, IWindow client,
- int top, int left, int right, int bottom,
+ int left, int top, int right, int bottom,
long deferTransactionUntilFrame, Rect outFrame) {
Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "repositionChild");
long origId = Binder.clearCallingIdentity();
@@ -2528,29 +2528,38 @@
+ "attached to a parent win=" + win);
}
- win.mFrame.left = left;
- win.mFrame.top = top;
- win.mFrame.right = right;
- win.mFrame.bottom = bottom;
+ win.mAttrs.x = left;
+ win.mAttrs.y = top;
+ win.mAttrs.width = right - left;
+ win.mAttrs.height = bottom - top;
+ win.setWindowScale(win.mRequestedWidth, win.mRequestedHeight);
- win.mWinAnimator.computeShownFrameLocked();
+ if (win.mHasSurface) {
+ if (SHOW_TRANSACTIONS) {
+ Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild");
+ }
- if (SHOW_TRANSACTIONS) {
- Slog.i(TAG, ">>> OPEN TRANSACTION repositionChild");
- }
+ SurfaceControl.openTransaction();
- SurfaceControl.openTransaction();
+ try {
- if (deferTransactionUntilFrame > 0) {
- win.mWinAnimator.mSurfaceController.deferTransactionUntil(
- win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
- deferTransactionUntilFrame);
- }
- win.mWinAnimator.setSurfaceBoundariesLocked(false);
+ win.applyGravityAndUpdateFrame();
+ win.mWinAnimator.computeShownFrameLocked();
- SurfaceControl.closeTransaction();
- if (SHOW_TRANSACTIONS) {
- Slog.i(TAG, "<<< CLOSE TRANSACTION repositionChild");
+ win.mWinAnimator.setSurfaceBoundariesLocked(false);
+
+ if (deferTransactionUntilFrame > 0) {
+ win.mWinAnimator.mSurfaceController.deferTransactionUntil(
+ win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
+ deferTransactionUntilFrame);
+ }
+
+ } finally {
+ SurfaceControl.closeTransaction();
+ if (SHOW_TRANSACTIONS) {
+ Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild");
+ }
+ }
}
outFrame = win.mCompatFrame;
@@ -2580,6 +2589,7 @@
if (win == null) {
return 0;
}
+
WindowStateAnimator winAnimator = win.mWinAnimator;
if (viewVisibility != View.GONE) {
win.setRequestedSize(requestedWidth, requestedHeight);
@@ -2621,7 +2631,7 @@
}
}
- if (DEBUG_LAYOUT) Slog.v(TAG, "Relayout " + win + ": viewVisibility=" + viewVisibility
+ if (DEBUG_LAYOUT) Slog.v(TAG_WM, "Relayout " + win + ": viewVisibility=" + viewVisibility
+ " req=" + requestedWidth + "x" + requestedHeight + " " + win.mAttrs);
winAnimator.mSurfaceDestroyDeferred = (flags & RELAYOUT_DEFER_SURFACE_DESTROY) != 0;
win.mEnforceSizeCompat =
@@ -2650,7 +2660,7 @@
if (DEBUG_SCREEN_ON) {
RuntimeException stack = new RuntimeException();
stack.fillInStackTrace();
- Slog.i(TAG, "Relayout " + win + ": oldVis=" + oldVisibility
+ Slog.i(TAG_WM, "Relayout " + win + ": oldVis=" + oldVisibility
+ " newVis=" + viewVisibility, stack);
}
if (viewVisibility == View.VISIBLE &&
@@ -2662,7 +2672,7 @@
} catch (Exception e) {
mInputMonitor.updateInputWindowsLw(true /*force*/);
- Slog.w(TAG, "Exception thrown when creating surface for client "
+ Slog.w(TAG_WM, "Exception thrown when creating surface for client "
+ client + " (" + win.mAttrs.getTitle() + ")",
e);
Binder.restoreCallingIdentity(origId);
@@ -2681,7 +2691,7 @@
winAnimator.mEnteringAnimation = false;
if (winAnimator.mSurfaceController != null &&
winAnimator.mSurfaceController.hasSurface()) {
- if (DEBUG_VISIBILITY) Slog.i(TAG, "Relayout invis " + win
+ if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Relayout invis " + win
+ ": mExiting=" + win.mExiting);
// If we are using a saved surface to do enter animation, just let the
// animation run and don't destroy the surface. This could happen when
@@ -2701,7 +2711,7 @@
}
outSurface.release();
- if (DEBUG_VISIBILITY) Slog.i(TAG, "Releasing surface in: " + win);
+ if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win);
}
if (focusMayChange) {
@@ -2753,7 +2763,7 @@
outStableInsets.set(win.mStableInsets);
outOutsets.set(win.mOutsets);
if (localLOGV) Slog.v(
- TAG, "Relayout given client " + client.asBinder()
+ TAG_WM, "Relayout given client " + client.asBinder()
+ ", requestedWidth=" + requestedWidth
+ ", requestedHeight=" + requestedHeight
+ ", viewVisibility=" + viewVisibility
@@ -2761,14 +2771,14 @@
+ ", surface=" + outSurface);
if (localLOGV || DEBUG_FOCUS) Slog.v(
- TAG, "Relayout of " + win + ": focusMayChange=" + focusMayChange);
+ TAG_WM, "Relayout of " + win + ": focusMayChange=" + focusMayChange);
result |= mInTouchMode ? WindowManagerGlobal.RELAYOUT_RES_IN_TOUCH_MODE : 0;
mInputMonitor.updateInputWindowsLw(true /*force*/);
if (DEBUG_LAYOUT) {
- Slog.v(TAG, "Relayout complete " + win + ": outFrame=" + outFrame.toShortString());
+ Slog.v(TAG_WM, "Relayout complete " + win + ": outFrame=" + outFrame.toShortString());
}
}
@@ -2804,9 +2814,7 @@
if (mInputMethodWindow == win) {
mInputMethodWindow = null;
}
- if (!win.shouldSaveSurface()) {
- winAnimator.destroySurfaceLocked();
- }
+ win.destroyOrSaveSurface();
}
//TODO (multidisplay): Magnification is supported only for the default
if (mAccessibilityController != null
@@ -2824,7 +2832,7 @@
WindowSurfaceController surfaceController = winAnimator.createSurfaceLocked();
if (surfaceController != null) {
surfaceController.getSurface(outSurface);
- if (SHOW_TRANSACTIONS) Slog.i(TAG, " OUT SURFACE " + outSurface + ": copied");
+ if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " OUT SURFACE " + outSurface + ": copied");
} else {
// For some reason there isn't a surface. Clear the
// caller's object so they see the same state.
@@ -2920,7 +2928,7 @@
try {
synchronized (mWindowMap) {
WindowState win = windowForClientLocked(session, client, false);
- if (DEBUG_ADD_REMOVE) Slog.d(TAG, "finishDrawingWindow: " + win + " mDrawState="
+ if (DEBUG_ADD_REMOVE) Slog.d(TAG_WM, "finishDrawingWindow: " + win + " mDrawState="
+ (win != null ? win.mWinAnimator.drawStateToString() : "null"));
if (win != null && win.mWinAnimator.finishDrawingLocked()) {
if ((win.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
@@ -2946,7 +2954,7 @@
DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
final int width = displayInfo.appWidth;
final int height = displayInfo.appHeight;
- if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG_WM,
"applyAnimation: atoken=" + atoken);
// Determine the visible rect to calculate the thumbnail clip
@@ -2982,7 +2990,7 @@
// screen gets the enter animation. Both appear in the mOpeningApps set.
enter = false;
}
- if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "Loading animation for app transition."
+ if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "Loading animation for app transition."
+ " transit=" + AppTransition.appTransitionToString(transit) + " enter=" + enter
+ " frame=" + frame + " insets=" + insets + " surfaceInsets=" + surfaceInsets);
Animation a = mAppTransition.loadAnimation(lp, transit, enter,
@@ -2995,7 +3003,7 @@
e = new RuntimeException();
e.fillInStackTrace();
}
- Slog.v(TAG, "Loaded animation " + a + " for " + atoken, e);
+ Slog.v(TAG_WM, "Loaded animation " + a + " for " + atoken, e);
}
final int containingWidth = frame.width();
final int containingHeight = frame.height();
@@ -3017,7 +3025,7 @@
synchronized (mWindowMap) {
int t = tasks.size() - 1;
if (t < 0) {
- Slog.w(TAG, "validateAppTokens: empty task list");
+ Slog.w(TAG_WM, "validateAppTokens: empty task list");
return;
}
@@ -3026,7 +3034,7 @@
Task targetTask = mTaskIdToTask.get(taskId);
DisplayContent displayContent = targetTask.getDisplayContent();
if (displayContent == null) {
- Slog.w(TAG, "validateAppTokens: no Display for taskId=" + taskId);
+ Slog.w(TAG_WM, "validateAppTokens: no Display for taskId=" + taskId);
return;
}
@@ -3040,7 +3048,7 @@
DisplayContent lastDisplayContent = displayContent;
displayContent = mTaskIdToTask.get(taskId).getDisplayContent();
if (displayContent != lastDisplayContent) {
- Slog.w(TAG, "validateAppTokens: displayContent changed in TaskGroup list!");
+ Slog.w(TAG_WM, "validateAppTokens: displayContent changed in TaskGroup list!");
return;
}
@@ -3066,9 +3074,9 @@
}
if (taskNdx >= 0 || t >= 0) {
- Slog.w(TAG, "validateAppTokens: Mismatch! ActivityManager=" + tasks);
- Slog.w(TAG, "validateAppTokens: Mismatch! WindowManager=" + localTasks);
- Slog.w(TAG, "validateAppTokens: Mismatch! Callers=" + Debug.getCallers(4));
+ Slog.w(TAG_WM, "validateAppTokens: Mismatch! ActivityManager=" + tasks);
+ Slog.w(TAG_WM, "validateAppTokens: Mismatch! WindowManager=" + localTasks);
+ Slog.w(TAG_WM, "validateAppTokens: Mismatch! Callers=" + Debug.getCallers(4));
}
}
}
@@ -3091,7 +3099,7 @@
+ Binder.getCallingPid()
+ ", uid=" + Binder.getCallingUid()
+ " requires " + permission;
- Slog.w(TAG, msg);
+ Slog.w(TAG_WM, msg);
return false;
}
@@ -3117,7 +3125,7 @@
synchronized(mWindowMap) {
WindowToken wtoken = mTokenMap.get(token);
if (wtoken != null) {
- Slog.w(TAG, "Attempted to add existing input method token: " + token);
+ Slog.w(TAG_WM, "Attempted to add existing input method token: " + token);
return;
}
wtoken = new WindowToken(this, token, type, true);
@@ -3187,7 +3195,7 @@
mInputMonitor.updateInputWindowsLw(true /*force*/);
} else {
- Slog.w(TAG, "Attempted to remove non-existing token: " + token);
+ Slog.w(TAG_WM, "Attempted to remove non-existing token: " + token);
}
}
Binder.restoreCallingIdentity(origId);
@@ -3195,7 +3203,7 @@
private Task createTaskLocked(int taskId, int stackId, int userId, AppWindowToken atoken,
Rect bounds, Configuration config) {
- if (DEBUG_STACK) Slog.i(TAG, "createTaskLocked: taskId=" + taskId + " stackId=" + stackId
+ if (DEBUG_STACK) Slog.i(TAG_WM, "createTaskLocked: taskId=" + taskId + " stackId=" + stackId
+ " atoken=" + atoken + " bounds=" + bounds);
final TaskStack stack = mStackIdToStack.get(stackId);
if (stack == null) {
@@ -3228,14 +3236,14 @@
try {
inputDispatchingTimeoutNanos = token.getKeyDispatchingTimeout() * 1000000L;
} catch (RemoteException ex) {
- Slog.w(TAG, "Could not get dispatching timeout.", ex);
+ Slog.w(TAG_WM, "Could not get dispatching timeout.", ex);
inputDispatchingTimeoutNanos = DEFAULT_INPUT_DISPATCHING_TIMEOUT_NANOS;
}
synchronized(mWindowMap) {
AppWindowToken atoken = findAppWindowToken(token.asBinder());
if (atoken != null) {
- Slog.w(TAG, "Attempted to add existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to add existing app token: " + token);
return;
}
atoken = new AppWindowToken(this, token, voiceInteraction);
@@ -3247,7 +3255,7 @@
(ActivityInfo.CONFIG_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) != 0;
atoken.mLaunchTaskBehind = launchTaskBehind;
atoken.mCropWindowsToStack = cropWindowsToStack;
- if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken
+ if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG_WM, "addAppToken: " + atoken
+ " to stack=" + stackId + " task=" + taskId + " at " + addPos);
Task task = mTaskIdToTask.get(taskId);
@@ -3265,7 +3273,8 @@
}
@Override
- public void setAppTask(IBinder token, int taskId, Rect taskBounds, Configuration config) {
+ public void setAppTask(
+ IBinder token, int taskId, int stackId, Rect taskBounds, Configuration config) {
if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
"setAppTask()")) {
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
@@ -3274,7 +3283,7 @@
synchronized(mWindowMap) {
final AppWindowToken atoken = findAppWindowToken(token);
if (atoken == null) {
- Slog.w(TAG, "Attempted to set task id of non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to set task id of non-existing app token: " + token);
return;
}
final Task oldTask = atoken.mTask;
@@ -3283,8 +3292,7 @@
Task newTask = mTaskIdToTask.get(taskId);
if (newTask == null) {
newTask = createTaskLocked(
- taskId, oldTask.mStack.mStackId, oldTask.mUserId, atoken, taskBounds,
- config);
+ taskId, stackId, oldTask.mUserId, atoken, taskBounds, config);
}
newTask.addAppToken(Integer.MAX_VALUE /* at top */, atoken);
}
@@ -3293,7 +3301,7 @@
public int getOrientationLocked() {
if (mDisplayFrozen) {
if (mLastWindowForcedOrientation != SCREEN_ORIENTATION_UNSPECIFIED) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Display is frozen, return " + mLastWindowForcedOrientation);
// If the display is frozen, some activities may be in the middle
// of restarting, and thus have removed their old window. If the
@@ -3320,7 +3328,7 @@
continue;
}
- if (DEBUG_ORIENTATION) Slog.v(TAG, win + " forcing orientation to " + req);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, win + " forcing orientation to " + req);
if (mPolicy.isKeyguardHostWindow(win.mAttrs)) {
mLastKeyguardForcedOrientation = req;
}
@@ -3340,11 +3348,11 @@
if (req == SCREEN_ORIENTATION_BEHIND) {
req = mLastKeyguardForcedOrientation;
}
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + appShowWhenLocked
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Done at " + appShowWhenLocked
+ " -- show when locked, return " + req);
return req;
}
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"No one is requesting an orientation when the screen is locked");
return mLastKeyguardForcedOrientation;
}
@@ -3374,12 +3382,12 @@
for (int tokenNdx = firstToken; tokenNdx >= 0; --tokenNdx) {
final AppWindowToken atoken = tokens.get(tokenNdx);
- if (DEBUG_APP_ORIENTATION) Slog.v(TAG, "Checking app orientation: " + atoken);
+ if (DEBUG_APP_ORIENTATION) Slog.v(TAG_WM, "Checking app orientation: " + atoken);
// if we're about to tear down this window and not seek for
// the behind activity, don't use it for orientation
if (!findingBehind && !atoken.hidden && atoken.hiddenRequested) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Skipping " + atoken + " -- going to hide");
continue;
}
@@ -3389,7 +3397,7 @@
// explicitly say to use the orientation behind it, and the last app was
// full screen, then we'll stick with the user's orientation.
if (lastOrientation != SCREEN_ORIENTATION_BEHIND && lastFullscreen) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Done at " + atoken
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Done at " + atoken
+ " -- end of group, return " + lastOrientation);
return lastOrientation;
}
@@ -3397,7 +3405,7 @@
// We ignore any hidden applications on the top.
if (atoken.hiddenRequested) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Skipping " + atoken + " -- hidden on top");
continue;
}
@@ -3413,20 +3421,20 @@
// orientation it has and ignores whatever is under it.
lastFullscreen = atoken.appFullscreen;
if (lastFullscreen && or != SCREEN_ORIENTATION_BEHIND) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Done at " + atoken + " -- full screen, return " + or);
return or;
}
// If this application has requested an explicit orientation, then use it.
if (or != SCREEN_ORIENTATION_UNSPECIFIED && or != SCREEN_ORIENTATION_BEHIND) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Done at " + atoken + " -- explicitly set, return " + or);
return or;
}
findingBehind |= (or == SCREEN_ORIENTATION_BEHIND);
}
}
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"No app is requesting an orientation, return " + mForcedAppOrientation);
// The next app has not been requested to be visible, so we keep the current orientation
// to prevent freezing/unfreezing the display too early.
@@ -3557,7 +3565,7 @@
synchronized(mWindowMap) {
AppWindowToken atoken = findAppWindowToken(token.asBinder());
if (atoken == null) {
- Slog.w(TAG, "Attempted to set orientation of non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to set orientation of non-existing app token: " + token);
return;
}
@@ -3597,14 +3605,14 @@
synchronized(mWindowMap) {
final AppWindowToken newFocus;
if (token == null) {
- if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Clearing focused app, was " + mFocusedApp);
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Clearing focused app, was " + mFocusedApp);
newFocus = null;
} else {
newFocus = findAppWindowToken(token);
if (newFocus == null) {
- Slog.w(TAG, "Attempted to set focus to non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to set focus to non-existing app token: " + token);
}
- if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Set focused app to: " + newFocus
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Set focused app to: " + newFocus
+ " old focus=" + mFocusedApp + " moveFocusNow=" + moveFocusNow);
}
@@ -3764,7 +3772,7 @@
}
synchronized(mWindowMap) {
- if (DEBUG_APP_TRANSITIONS) Slog.w(TAG, "Execute app transition: " + mAppTransition
+ if (DEBUG_APP_TRANSITIONS) Slog.w(TAG_WM, "Execute app transition: " + mAppTransition
+ " Callers=" + Debug.getCallers(5));
if (mAppTransition.isTransitionSet()) {
mAppTransition.setReady();
@@ -3790,12 +3798,12 @@
synchronized(mWindowMap) {
if (DEBUG_STARTING_WINDOW) Slog.v(
- TAG, "setAppStartingWindow: token=" + token + " pkg=" + pkg
+ TAG_WM, "setAppStartingWindow: token=" + token + " pkg=" + pkg
+ " transferFrom=" + transferFrom);
AppWindowToken wtoken = findAppWindowToken(token);
if (wtoken == null) {
- Slog.w(TAG, "Attempted to set icon of non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to set icon of non-existing app token: " + token);
return;
}
@@ -3824,7 +3832,7 @@
// 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, "Checking theme of starting window: 0x"
+ 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,
@@ -3842,7 +3850,7 @@
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, "Translucent=" + windowIsTranslucent
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Translucent=" + windowIsTranslucent
+ " Floating=" + windowIsFloating
+ " ShowWallpaper=" + windowShowWallpaper);
if (windowIsTranslucent) {
@@ -3865,14 +3873,14 @@
}
}
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Creating StartingData");
+ 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, "Enqueueing ADD_STARTING");
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING");
mH.sendMessageAtFrontOfQueue(m);
}
}
@@ -3891,7 +3899,7 @@
// letting windows get shown immediately without any more transitions.
mSkipAppTransitionAnimation = true;
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG,
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
"Moving existing starting " + startingWindow + " from " + ttoken
+ " to " + wtoken);
final long origId = Binder.clearCallingIdentity();
@@ -3912,11 +3920,11 @@
startingWindow.mAppToken = wtoken;
if (DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE || DEBUG_STARTING_WINDOW) {
- Slog.v(TAG, "Removing starting window: " + startingWindow);
+ Slog.v(TAG_WM, "Removing starting window: " + startingWindow);
}
startingWindow.getWindowList().remove(startingWindow);
mWindowsChanged = true;
- if (DEBUG_ADD_REMOVE) Slog.v(TAG,
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG_WM,
"Removing starting " + startingWindow + " from " + ttoken);
ttoken.windows.remove(startingWindow);
ttoken.allAppWindows.remove(startingWindow);
@@ -3954,7 +3962,7 @@
} else if (ttoken.startingData != null) {
// The previous app was getting ready to show a
// starting window, but hasn't yet done so. Steal it!
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Moving pending starting from " + ttoken
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Moving pending starting from " + ttoken
+ " to " + wtoken);
wtoken.startingData = ttoken.startingData;
ttoken.startingData = null;
@@ -4037,7 +4045,7 @@
(visible && wtoken.mWillReplaceWindow)) {
boolean changed = false;
if (DEBUG_APP_TRANSITIONS) Slog.v(
- TAG, "Changing app " + wtoken + " hidden=" + wtoken.hidden
+ TAG_WM, "Changing app " + wtoken + " hidden=" + wtoken.hidden
+ " performLayout=" + performLayout);
boolean runningAppAnimation = false;
@@ -4065,7 +4073,7 @@
continue;
}
- //Slog.i(TAG, "Window " + win + ": vis=" + win.isVisible());
+ //Slog.i(TAG_WM, "Window " + win + ": vis=" + win.isVisible());
//win.dump(" ");
if (visible) {
if (!win.isVisibleNow()) {
@@ -4111,7 +4119,7 @@
}
}
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "setTokenVisibilityLocked: " + wtoken
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "setTokenVisibilityLocked: " + wtoken
+ ": hidden=" + wtoken.hidden + " hiddenRequested="
+ wtoken.hiddenRequested);
@@ -4160,11 +4168,11 @@
synchronized(mWindowMap) {
wtoken = findAppWindowToken(token);
if (wtoken == null) {
- Slog.w(TAG, "Attempted to set visibility of non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to set visibility of non-existing app token: " + token);
return;
}
- if (DEBUG_APP_TRANSITIONS || DEBUG_ORIENTATION) Slog.v(TAG, "setAppVisibility(" +
+ 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));
@@ -4192,7 +4200,7 @@
if (!wtoken.mAppAnimator.usingTransferredAnimation &&
(!wtoken.startingDisplayed || mSkipAppTransitionAnimation)) {
if (DEBUG_APP_TRANSITIONS) Slog.v(
- TAG, "Setting dummy animation on: " + wtoken);
+ TAG_WM, "Setting dummy animation on: " + wtoken);
wtoken.mAppAnimator.setDummyAnimation();
}
wtoken.inPendingTransaction = true;
@@ -4231,7 +4239,7 @@
if (win != null) {
final AppWindowToken focusedToken = win.mAppToken;
if (focusedToken != null) {
- if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "TRANSIT_TASK_OPEN_BEHIND, " +
+ if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "TRANSIT_TASK_OPEN_BEHIND, " +
" adding " + focusedToken + " to mOpeningApps");
// Force animation to be loaded.
focusedToken.hidden = true;
@@ -4254,7 +4262,7 @@
void unsetAppFreezingScreenLocked(AppWindowToken wtoken,
boolean unfreezeSurfaceNow, boolean force) {
if (wtoken.mAppAnimator.freezingScreen) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Clear freezing of " + wtoken
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + wtoken
+ " force=" + force);
final int N = wtoken.allAppWindows.size();
boolean unfrozeWindows = false;
@@ -4264,7 +4272,7 @@
w.mAppFreezing = false;
if (w.mHasSurface && !w.mOrientationChanging
&& mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "set mOrientationChanging of " + w);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "set mOrientationChanging of " + w);
w.mOrientationChanging = true;
mWindowPlacerLocked.mOrientationChangeComplete = false;
}
@@ -4274,7 +4282,7 @@
}
}
if (force || unfrozeWindows) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "No longer freezing: " + wtoken);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "No longer freezing: " + wtoken);
wtoken.mAppAnimator.freezingScreen = false;
wtoken.mAppAnimator.lastFreezeDuration = (int)(SystemClock.elapsedRealtime()
- mDisplayFreezeTime);
@@ -4297,7 +4305,7 @@
e = new RuntimeException();
e.fillInStackTrace();
}
- Slog.i(TAG, "Set freezing of " + wtoken.appToken
+ Slog.i(TAG_WM, "Set freezing of " + wtoken.appToken
+ ": hidden=" + wtoken.hidden + " freezing="
+ wtoken.mAppAnimator.freezingScreen, e);
}
@@ -4329,13 +4337,13 @@
synchronized(mWindowMap) {
if (configChanges == 0 && okToDisplay()) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Skipping set freeze of " + token);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Skipping set freeze of " + token);
return;
}
AppWindowToken wtoken = findAppWindowToken(token);
if (wtoken == null || wtoken.appToken == null) {
- Slog.w(TAG, "Attempted to freeze screen with non-existing app token: " + wtoken);
+ Slog.w(TAG_WM, "Attempted to freeze screen with non-existing app token: " + wtoken);
return;
}
final long origId = Binder.clearCallingIdentity();
@@ -4357,7 +4365,7 @@
return;
}
final long origId = Binder.clearCallingIdentity();
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Clear freezing of " + token
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + token
+ ": hidden=" + wtoken.hidden + " freezing=" + wtoken.mAppAnimator.freezingScreen);
unsetAppFreezingScreenLocked(wtoken, true, force);
Binder.restoreCallingIdentity(origId);
@@ -4379,7 +4387,7 @@
synchronized(mWindowMap) {
WindowToken basewtoken = mTokenMap.remove(token);
if (basewtoken != null && (wtoken=basewtoken.appWindowToken) != null) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Removing app token: " + wtoken);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Removing app token: " + wtoken);
delayed = setTokenVisibilityLocked(wtoken, null, false,
AppTransition.TRANSIT_UNSET, true, wtoken.voiceInteraction);
wtoken.inPendingTransaction = false;
@@ -4392,15 +4400,15 @@
delayed = true;
}
if (DEBUG_APP_TRANSITIONS) Slog.v(
- TAG, "Removing app " + wtoken + " delayed=" + delayed
+ TAG_WM, "Removing app " + wtoken + " delayed=" + delayed
+ " animation=" + wtoken.mAppAnimator.animation
+ " animating=" + wtoken.mAppAnimator.animating);
- if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "removeAppToken: "
+ if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG_WM, "removeAppToken: "
+ wtoken + " delayed=" + delayed + " Callers=" + Debug.getCallers(4));
final TaskStack stack = wtoken.mTask.mStack;
if (delayed && !wtoken.allAppWindows.isEmpty()) {
// set the token aside because it has an active animation to be finished
- if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG,
+ if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT) Slog.v(TAG_WM,
"removeAppToken make exiting: " + wtoken);
stack.mExitingAppTokens.add(wtoken);
wtoken.mIsExiting = true;
@@ -4419,13 +4427,13 @@
}
unsetAppFreezingScreenLocked(wtoken, true, true);
if (mFocusedApp == wtoken) {
- if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "Removing focused app token:" + wtoken);
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "Removing focused app token:" + wtoken);
mFocusedApp = null;
updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, true /*updateInputWindows*/);
mInputMonitor.setFocusedAppLw(null);
}
} else {
- Slog.w(TAG, "Attempted to remove non-existing app token: " + token);
+ Slog.w(TAG_WM, "Attempted to remove non-existing app token: " + token);
}
if (!delayed && wtoken != null) {
@@ -4445,7 +4453,7 @@
return;
}
if (wtoken != null && wtoken.startingWindow != null) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) +
+ 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);
@@ -4457,16 +4465,16 @@
final int numStacks = mStackIdToStack.size();
for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
final TaskStack stack = mStackIdToStack.valueAt(stackNdx);
- Slog.v(TAG, " Stack #" + stack.mStackId + " tasks from bottom to top:");
+ Slog.v(TAG_WM, " Stack #" + stack.mStackId + " tasks from bottom to top:");
final ArrayList<Task> tasks = stack.getTasks();
final int numTasks = tasks.size();
for (int taskNdx = 0; taskNdx < numTasks; ++taskNdx) {
final Task task = tasks.get(taskNdx);
- Slog.v(TAG, " Task #" + task.mTaskId + " activities from bottom to top:");
+ Slog.v(TAG_WM, " Task #" + task.mTaskId + " activities from bottom to top:");
AppTokenList tokens = task.mAppTokens;
final int numTokens = tokens.size();
for (int tokenNdx = 0; tokenNdx < numTokens; ++tokenNdx) {
- Slog.v(TAG, " activity #" + tokenNdx + ": " + tokens.get(tokenNdx).token);
+ Slog.v(TAG_WM, " activity #" + tokenNdx + ": " + tokens.get(tokenNdx).token);
}
}
}
@@ -4476,10 +4484,10 @@
final int numDisplays = mDisplayContents.size();
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final DisplayContent displayContent = mDisplayContents.valueAt(displayNdx);
- Slog.v(TAG, " Display #" + displayContent.getDisplayId());
+ Slog.v(TAG_WM, " Display #" + displayContent.getDisplayId());
final WindowList windows = displayContent.getWindowList();
for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) {
- Slog.v(TAG, " #" + winNdx + ": " + windows.get(winNdx));
+ Slog.v(TAG_WM, " #" + winNdx + ": " + windows.get(winNdx));
}
}
}
@@ -4492,21 +4500,21 @@
for (int j=0; j<NCW; j++) {
WindowState cwin = win.mChildWindows.get(j);
if (!winAdded && cwin.mSubLayer >= 0) {
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Re-adding child window at "
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Re-adding child window at "
+ index + ": " + cwin);
win.mRebuilding = false;
windows.add(index, win);
index++;
winAdded = true;
}
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Re-adding window at "
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Re-adding window at "
+ index + ": " + cwin);
cwin.mRebuilding = false;
windows.add(index, cwin);
index++;
}
if (!winAdded) {
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Re-adding window at "
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Re-adding window at "
+ index + ": " + win);
win.mRebuilding = false;
windows.add(index, win);
@@ -4613,7 +4621,7 @@
synchronized(mWindowMap) {
Task task = mTaskIdToTask.get(taskId);
if (task == null) {
- Slog.e(TAG, "moveTaskToBottom: taskId=" + taskId
+ Slog.e(TAG_WM, "moveTaskToBottom: taskId=" + taskId
+ " not found in mTaskIdToTask");
return;
}
@@ -4657,7 +4665,7 @@
if (displayContent != null) {
TaskStack stack = mStackIdToStack.get(stackId);
if (stack == null) {
- if (DEBUG_STACK) Slog.d(TAG, "attachStack: stackId=" + stackId);
+ if (DEBUG_STACK) Slog.d(TAG_WM, "attachStack: stackId=" + stackId);
stack = new TaskStack(this, stackId);
mStackIdToStack.put(stackId, stack);
}
@@ -4713,7 +4721,7 @@
synchronized (mWindowMap) {
Task task = mTaskIdToTask.get(taskId);
if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG, "removeTask: could not find taskId=" + taskId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "removeTask: could not find taskId=" + taskId);
return;
}
task.removeLocked();
@@ -4742,11 +4750,11 @@
public void addTask(int taskId, int stackId, boolean toTop) {
synchronized (mWindowMap) {
- if (DEBUG_STACK) Slog.i(TAG, "addTask: adding taskId=" + taskId
+ if (DEBUG_STACK) Slog.i(TAG_WM, "addTask: adding taskId=" + taskId
+ " to " + (toTop ? "top" : "bottom"));
Task task = mTaskIdToTask.get(taskId);
if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG, "addTask: could not find taskId=" + taskId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "addTask: could not find taskId=" + taskId);
return;
}
TaskStack stack = mStackIdToStack.get(stackId);
@@ -4759,16 +4767,16 @@
public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
synchronized (mWindowMap) {
- if (DEBUG_STACK) Slog.i(TAG, "moveTaskToStack: moving taskId=" + taskId
+ 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, "moveTaskToStack: could not find taskId=" + taskId);
+ 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, "moveTaskToStack: could not find stackId=" + stackId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "moveTaskToStack: could not find stackId=" + stackId);
return;
}
task.moveTaskToStack(stack, toTop);
@@ -4793,7 +4801,7 @@
synchronized (mWindowMap) {
Task task = mTaskIdToTask.get(taskId);
if (task == null) {
- if (DEBUG_STACK) Slog.i(TAG, "scheduleShowToast: could not find taskId=" + taskId);
+ if (DEBUG_STACK) Slog.i(TAG_WM, "scheduleShowToast: could not find taskId=" + taskId);
return;
}
task.setShowNonResizeableDockToast();
@@ -4839,17 +4847,17 @@
public void positionTaskInStack(int taskId, int stackId, int position, Rect bounds,
Configuration config) {
synchronized (mWindowMap) {
- if (DEBUG_STACK) Slog.i(TAG, "positionTaskInStack: positioning taskId=" + taskId
+ 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,
+ 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,
+ if (DEBUG_STACK) Slog.i(TAG_WM,
"positionTaskInStack: could not find stackId=" + stackId);
return;
}
@@ -4990,7 +4998,7 @@
// If this isn't coming from the system then don't allow disabling the lockscreen
// to bypass security.
if (Binder.getCallingUid() != Process.SYSTEM_UID && isKeyguardSecure()) {
- Log.d(TAG, "current mode is SecurityMode, ignore hide keyguard");
+ Log.d(TAG_WM, "current mode is SecurityMode, ignore hide keyguard");
return;
}
@@ -5081,7 +5089,7 @@
!= PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("Requires DISABLE_KEYGUARD permission");
}
- if (DEBUG_KEYGUARD) Slog.d(TAG, "keyguardGoingAway: disableWinAnim="
+ if (DEBUG_KEYGUARD) Slog.d(TAG_WM, "keyguardGoingAway: disableWinAnim="
+ disableWindowAnimations + " kgToNotifShade=" + keyguardGoingToNotificationShade);
synchronized (mWindowMap) {
mAnimator.mKeyguardGoingAway = true;
@@ -5092,14 +5100,14 @@
}
public void keyguardWaitingForActivityDrawn() {
- if (DEBUG_KEYGUARD) Slog.d(TAG, "keyguardWaitingForActivityDrawn");
+ if (DEBUG_KEYGUARD) Slog.d(TAG_WM, "keyguardWaitingForActivityDrawn");
synchronized (mWindowMap) {
mKeyguardWaitingForActivityDrawn = true;
}
}
public void notifyActivityDrawnForKeyguard() {
- if (DEBUG_KEYGUARD) Slog.d(TAG, "notifyActivityDrawnForKeyguard: waiting="
+ if (DEBUG_KEYGUARD) Slog.d(TAG_WM, "notifyActivityDrawnForKeyguard: waiting="
+ mKeyguardWaitingForActivityDrawn + " Callers=" + Debug.getCallers(5));
synchronized (mWindowMap) {
if (mKeyguardWaitingForActivityDrawn) {
@@ -5250,6 +5258,12 @@
// Called by window manager policy. Not exposed externally.
@Override
+ public void lockDeviceNow() {
+ lockNow(null);
+ }
+
+ // Called by window manager policy. Not exposed externally.
+ @Override
public int getCameraLensCoverState() {
int sw = mInputManager.getSwitchState(-1, InputDevice.SOURCE_ANY,
InputManagerService.SW_CAMERA_LENS_COVER);
@@ -5321,7 +5335,7 @@
if (DEBUG_BOOT) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
- Slog.i(TAG, "enableScreenAfterBoot: mDisplayEnabled=" + mDisplayEnabled
+ Slog.i(TAG_WM, "enableScreenAfterBoot: mDisplayEnabled=" + mDisplayEnabled
+ " mForceDisplayEnabled=" + mForceDisplayEnabled
+ " mShowingBootMessages=" + mShowingBootMessages
+ " mSystemBooted=" + mSystemBooted, here);
@@ -5352,7 +5366,7 @@
if (DEBUG_BOOT) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
- Slog.i(TAG, "enableScreenIfNeededLocked: mDisplayEnabled=" + mDisplayEnabled
+ Slog.i(TAG_WM, "enableScreenIfNeededLocked: mDisplayEnabled=" + mDisplayEnabled
+ " mForceDisplayEnabled=" + mForceDisplayEnabled
+ " mShowingBootMessages=" + mShowingBootMessages
+ " mSystemBooted=" + mSystemBooted, here);
@@ -5371,7 +5385,7 @@
if (mDisplayEnabled) {
return;
}
- Slog.w(TAG, "***** BOOT TIMEOUT: forcing display enabled");
+ Slog.w(TAG_WM, "***** BOOT TIMEOUT: forcing display enabled");
mForceDisplayEnabled = true;
}
performEnableScreen();
@@ -5410,7 +5424,7 @@
}
if (DEBUG_SCREEN_ON || DEBUG_BOOT) {
- Slog.i(TAG, "******** booted=" + mSystemBooted + " msg=" + mShowingBootMessages
+ Slog.i(TAG_WM, "******** booted=" + mSystemBooted + " msg=" + mShowingBootMessages
+ " haveBoot=" + haveBootMsg + " haveApp=" + haveApp
+ " haveWall=" + haveWallpaper + " wallEnabled=" + wallpaperEnabled
+ " haveKeyguard=" + haveKeyguard);
@@ -5435,7 +5449,7 @@
public void performEnableScreen() {
synchronized(mWindowMap) {
- if (DEBUG_BOOT) Slog.i(TAG, "performEnableScreen: mDisplayEnabled=" + mDisplayEnabled
+ if (DEBUG_BOOT) Slog.i(TAG_WM, "performEnableScreen: mDisplayEnabled=" + mDisplayEnabled
+ " mForceDisplayEnabled=" + mForceDisplayEnabled
+ " mShowingBootMessages=" + mShowingBootMessages
+ " mSystemBooted=" + mSystemBooted
@@ -5459,7 +5473,7 @@
try {
IBinder surfaceFlinger = ServiceManager.getService("SurfaceFlinger");
if (surfaceFlinger != null) {
- //Slog.i(TAG, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
+ //Slog.i(TAG_WM, "******* TELLING SURFACE FLINGER WE ARE BOOTED!");
Parcel data = Parcel.obtain();
data.writeInterfaceToken("android.ui.ISurfaceComposer");
surfaceFlinger.transact(IBinder.FIRST_CALL_TRANSACTION, // BOOT_FINISHED
@@ -5467,20 +5481,20 @@
data.recycle();
}
} catch (RemoteException ex) {
- Slog.e(TAG, "Boot completed: SurfaceFlinger is dead!");
+ Slog.e(TAG_WM, "Boot completed: SurfaceFlinger is dead!");
}
mBootAnimationStopped = true;
}
if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) {
- if (DEBUG_BOOT) Slog.i(TAG, "performEnableScreen: Waiting for anim complete");
+ if (DEBUG_BOOT) Slog.i(TAG_WM, "performEnableScreen: Waiting for anim complete");
return;
}
EventLog.writeEvent(EventLogTags.WM_BOOT_ANIMATION_DONE, SystemClock.uptimeMillis());
Trace.asyncTraceEnd(Trace.TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);
mDisplayEnabled = true;
- if (DEBUG_SCREEN_ON || DEBUG_BOOT) Slog.i(TAG, "******************** ENABLING SCREEN!");
+ if (DEBUG_SCREEN_ON || DEBUG_BOOT) Slog.i(TAG_WM, "******************** ENABLING SCREEN!");
// Enable input dispatch.
mInputMonitor.setEventDispatchingLw(mEventDispatchingEnabled);
@@ -5502,10 +5516,10 @@
mH.removeMessages(H.CHECK_IF_BOOT_ANIMATION_FINISHED);
mH.sendEmptyMessageDelayed(H.CHECK_IF_BOOT_ANIMATION_FINISHED,
BOOT_ANIMATION_POLL_INTERVAL);
- if (DEBUG_BOOT) Slog.i(TAG, "checkBootAnimationComplete: Waiting for anim complete");
+ if (DEBUG_BOOT) Slog.i(TAG_WM, "checkBootAnimationComplete: Waiting for anim complete");
return false;
}
- if (DEBUG_BOOT) Slog.i(TAG, "checkBootAnimationComplete: Animation complete!");
+ if (DEBUG_BOOT) Slog.i(TAG_WM, "checkBootAnimationComplete: Animation complete!");
return true;
}
@@ -5515,7 +5529,7 @@
if (DEBUG_BOOT) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
- Slog.i(TAG, "showBootMessage: msg=" + msg + " always=" + always
+ Slog.i(TAG_WM, "showBootMessage: msg=" + msg + " always=" + always
+ " mAllowBootMessages=" + mAllowBootMessages
+ " mShowingBootMessages=" + mShowingBootMessages
+ " mSystemBooted=" + mSystemBooted, here);
@@ -5544,7 +5558,7 @@
if (DEBUG_BOOT) {
RuntimeException here = new RuntimeException("here");
here.fillInStackTrace();
- Slog.i(TAG, "hideBootMessagesLocked: mDisplayEnabled=" + mDisplayEnabled
+ Slog.i(TAG_WM, "hideBootMessagesLocked: mDisplayEnabled=" + mDisplayEnabled
+ " mForceDisplayEnabled=" + mForceDisplayEnabled
+ " mShowingBootMessages=" + mShowingBootMessages
+ " mSystemBooted=" + mSystemBooted, here);
@@ -5595,7 +5609,7 @@
public void showCircularMask(boolean visible) {
synchronized(mWindowMap) {
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION showCircularMask(visible=" + visible + ")");
SurfaceControl.openTransaction();
try {
@@ -5621,7 +5635,7 @@
}
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
"<<< CLOSE TRANSACTION showCircularMask(visible=" + visible + ")");
}
}
@@ -5630,7 +5644,7 @@
public void showEmulatorDisplayOverlay() {
synchronized(mWindowMap) {
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION showEmulatorDisplayOverlay");
SurfaceControl.openTransaction();
try {
@@ -5646,7 +5660,7 @@
mEmulatorDisplayOverlay.setVisibility(true);
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
"<<< CLOSE TRANSACTION showEmulatorDisplayOverlay");
}
}
@@ -5685,7 +5699,7 @@
}
}
- if (SHOW_VERBOSE_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_VERBOSE_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION showStrictModeViolation");
SurfaceControl.openTransaction();
try {
@@ -5697,7 +5711,7 @@
mStrictModeFlash.setVisibility(on);
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_VERBOSE_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_VERBOSE_TRANSACTIONS) Slog.i(TAG_WM,
"<<< CLOSE TRANSACTION showStrictModeViolation");
}
}
@@ -5784,7 +5798,7 @@
synchronized(mWindowMap) {
displayContent = getDisplayContentLocked(displayId);
if (displayContent == null) {
- if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot of " + appToken
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM, "Screenshot of " + appToken
+ ": returning null. No Display for displayId=" + displayId);
return null;
}
@@ -5793,7 +5807,7 @@
int dw = displayInfo.logicalWidth;
int dh = displayInfo.logicalHeight;
if (dw == 0 || dh == 0) {
- if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot of " + appToken
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM, "Screenshot of " + appToken
+ ": returning null. logical widthxheight=" + dw + "x" + dh);
return null;
}
@@ -5915,21 +5929,21 @@
if (appToken != null && appWin == null) {
// Can't find a window to snapshot.
- if (DEBUG_SCREENSHOT) Slog.i(TAG,
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM,
"Screenshot: Couldn't find a surface matching " + appToken);
return null;
}
if (!screenshotReady) {
if (retryCount > MAX_SCREENSHOT_RETRIES) {
- Slog.i(TAG, "Screenshot max retries " + retryCount + " of " + appToken +
+ Slog.i(TAG_WM, "Screenshot max retries " + retryCount + " of " + appToken +
" appWin=" + (appWin == null ? "null" : (appWin + " drawState=" +
appWin.mWinAnimator.mDrawState)));
return null;
}
// Delay and hope that window gets drawn.
- if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot: No image ready for " + appToken
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM, "Screenshot: No image ready for " + appToken
+ ", " + appWin + " drawState=" + appWin.mWinAnimator.mDrawState);
continue;
}
@@ -5940,7 +5954,7 @@
// taken.
if (maxLayer == 0) {
- if (DEBUG_SCREENSHOT) Slog.i(TAG, "Screenshot of " + appToken
+ if (DEBUG_SCREENSHOT) Slog.i(TAG_WM, "Screenshot of " + appToken
+ ": returning null maxLayer=" + maxLayer);
return null;
}
@@ -5988,11 +6002,11 @@
convertCropForSurfaceFlinger(crop, rot, dw, dh);
if (DEBUG_SCREENSHOT) {
- Slog.i(TAG, "Screenshot: " + dw + "x" + dh + " from " + minLayer + " to "
+ Slog.i(TAG_WM, "Screenshot: " + dw + "x" + dh + " from " + minLayer + " to "
+ maxLayer + " appToken=" + appToken);
for (int i = 0; i < windows.size(); i++) {
WindowState win = windows.get(i);
- Slog.i(TAG, win + ": " + win.mLayer
+ Slog.i(TAG_WM, win + ": " + win.mLayer
+ " animLayer=" + win.mWinAnimator.mAnimLayer
+ " surfaceLayer=" + win.mWinAnimator.mSurfaceController.getLayer());
}
@@ -6002,13 +6016,13 @@
mAnimator.getScreenRotationAnimationLocked(Display.DEFAULT_DISPLAY);
final boolean inRotation = screenRotationAnimation != null &&
screenRotationAnimation.isAnimating();
- if (DEBUG_SCREENSHOT && inRotation) Slog.v(TAG,
+ if (DEBUG_SCREENSHOT && inRotation) Slog.v(TAG_WM,
"Taking screenshot while rotating");
bm = SurfaceControl.screenshot(crop, width, height, minLayer, maxLayer,
inRotation, rot);
if (bm == null) {
- Slog.w(TAG, "Screenshot failure taking screenshot for (" + dw + "x" + dh
+ Slog.w(TAG_WM, "Screenshot failure taking screenshot for (" + dw + "x" + dh
+ ") to layer " + maxLayer);
return null;
}
@@ -6030,7 +6044,7 @@
}
}
if (allBlack) {
- Slog.i(TAG, "Screenshot " + appWin + " was monochrome(" +
+ Slog.i(TAG_WM, "Screenshot " + appWin + " was monochrome(" +
Integer.toHexString(firstColor) + ")! mSurfaceLayer=" +
(appWin != null ?
appWin.mWinAnimator.mSurfaceController.getLayer() : "null") +
@@ -6062,7 +6076,7 @@
+ "rotation constant.");
}
- if (DEBUG_ORIENTATION) Slog.v(TAG, "freezeRotation: mRotation=" + mRotation);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "freezeRotation: mRotation=" + mRotation);
long origId = Binder.clearCallingIdentity();
try {
@@ -6086,7 +6100,7 @@
throw new SecurityException("Requires SET_ORIENTATION permission");
}
- if (DEBUG_ORIENTATION) Slog.v(TAG, "thawRotation: mRotation=" + mRotation);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "thawRotation: mRotation=" + mRotation);
long origId = Binder.clearCallingIdentity();
try {
@@ -6140,7 +6154,7 @@
}
public void updateRotationUnchecked(boolean alwaysSendConfiguration, boolean forceRelayout) {
- if(DEBUG_ORIENTATION) Slog.v(TAG, "updateRotationUnchecked("
+ if(DEBUG_ORIENTATION) Slog.v(TAG_WM, "updateRotationUnchecked("
+ "alwaysSendConfiguration=" + alwaysSendConfiguration + ")");
long origId = Binder.clearCallingIdentity();
@@ -6171,7 +6185,7 @@
if (mDeferredRotationPauseCount > 0) {
// Rotation updates have been paused temporarily. Defer the update until
// updates have been resumed.
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, rotation is paused.");
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Deferring rotation, rotation is paused.");
return false;
}
@@ -6181,13 +6195,13 @@
// Rotation updates cannot be performed while the previous rotation change
// animation is still in progress. Skip this update. We will try updating
// again after the animation is finished and the display is unfrozen.
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, animation in progress.");
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Deferring rotation, animation in progress.");
return false;
}
if (!mDisplayEnabled) {
// No point choosing a rotation if the display is not enabled.
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Deferring rotation, display is not enabled.");
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Deferring rotation, display is not enabled.");
return false;
}
@@ -6201,7 +6215,7 @@
mForcedAppOrientation, rotation);
if (DEBUG_ORIENTATION) {
- Slog.v(TAG, "Application requested orientation "
+ Slog.v(TAG_WM, "Application requested orientation "
+ mForcedAppOrientation + ", got rotation " + rotation
+ " which has " + (altOrientation ? "incompatible" : "compatible")
+ " metrics");
@@ -6213,7 +6227,7 @@
}
if (DEBUG_ORIENTATION) {
- Slog.v(TAG,
+ Slog.v(TAG_WM,
"Rotation changed to " + rotation + (altOrientation ? " (alt)" : "")
+ " from " + mRotation + (mAltOrientation ? " (alt)" : "")
+ ", forceApp=" + mForcedAppOrientation);
@@ -6250,7 +6264,7 @@
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
if (!inTransaction) {
if (SHOW_TRANSACTIONS) {
- Slog.i(TAG, ">>> OPEN TRANSACTION setRotationUnchecked");
+ Slog.i(TAG_WM, ">>> OPEN TRANSACTION setRotationUnchecked");
}
SurfaceControl.openTransaction();
}
@@ -6272,7 +6286,7 @@
if (!inTransaction) {
SurfaceControl.closeTransaction();
if (SHOW_LIGHT_TRANSACTIONS) {
- Slog.i(TAG, "<<< CLOSE TRANSACTION setRotationUnchecked");
+ Slog.i(TAG_WM, "<<< CLOSE TRANSACTION setRotationUnchecked");
}
}
}
@@ -6285,7 +6299,7 @@
w.mAppToken.destroySavedSurfaces();
}
if (w.mHasSurface) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Set mOrientationChanging of " + w);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Set mOrientationChanging of " + w);
w.mOrientationChanging = true;
mWindowPlacerLocked.mOrientationChangeComplete = false;
}
@@ -6455,7 +6469,7 @@
try {
return mViewServer.start();
} catch (IOException e) {
- Slog.w(TAG, "View server did not start");
+ Slog.w(TAG_WM, "View server did not start");
}
}
return false;
@@ -6465,7 +6479,7 @@
mViewServer = new ViewServer(this, port);
return mViewServer.start();
} catch (IOException e) {
- Slog.w(TAG, "View server did not start");
+ Slog.w(TAG_WM, "View server did not start");
}
return false;
}
@@ -6699,7 +6713,7 @@
}
} catch (Exception e) {
- Slog.w(TAG, "Could not send command " + command + " with parameters " + parameters, e);
+ Slog.w(TAG_WM, "Could not send command " + command + " with parameters " + parameters, e);
success = false;
} finally {
if (data != null) {
@@ -6970,7 +6984,7 @@
displayContent.mBaseDisplayRect.set(0, 0, dw, dh);
if (false) {
- Slog.i(TAG, "Set app display size: " + appWidth + " x " + appHeight);
+ Slog.i(TAG_WM, "Set app display size: " + appWidth + " x " + appHeight);
}
mCompatibleScreenScale = CompatibilityInfo.computeCompatibleScaling(mDisplayMetrics,
@@ -7113,7 +7127,7 @@
}
private void startScrollingTask(DisplayContent displayContent, int startX, int startY) {
- if (DEBUG_TASK_POSITIONING) Slog.d(TAG,
+ if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM,
"startScrollingTask: " + "{" + startX + ", " + startY + "}");
Task task = null;
@@ -7148,22 +7162,22 @@
private boolean startPositioningLocked(
WindowState win, boolean resize, float startX, float startY) {
- if (DEBUG_TASK_POSITIONING) Slog.d(TAG, "startPositioningLocked: "
+ if (DEBUG_TASK_POSITIONING) Slog.d(TAG_WM, "startPositioningLocked: "
+ "win=" + win + ", resize=" + resize + ", {" + startX + ", " + startY + "}");
if (win == null || win.getAppToken() == null) {
- Slog.w(TAG, "startPositioningLocked: Bad window " + win);
+ Slog.w(TAG_WM, "startPositioningLocked: Bad window " + win);
return false;
}
if (win.mInputChannel == null) {
- Slog.wtf(TAG, "startPositioningLocked: " + win + " has no input channel, "
+ Slog.wtf(TAG_WM, "startPositioningLocked: " + win + " has no input channel, "
+ " probably being removed");
return false;
}
final DisplayContent displayContent = win.getDisplayContent();
if (displayContent == null) {
- Slog.w(TAG, "startPositioningLocked: Invalid display content " + win);
+ Slog.w(TAG_WM, "startPositioningLocked: Invalid display content " + win);
return false;
}
@@ -7173,7 +7187,7 @@
mInputMonitor.updateInputWindowsLw(true /*force*/);
if (!mInputManager.transferTouchFocus(
win.mInputChannel, mTaskPositioner.mServerChannel)) {
- Slog.e(TAG, "startPositioningLocked: Unable to transfer touch focus");
+ Slog.e(TAG_WM, "startPositioningLocked: Unable to transfer touch focus");
mTaskPositioner.unregister();
mTaskPositioner = null;
mInputMonitor.updateInputWindowsLw(true /*force*/);
@@ -7186,7 +7200,7 @@
private void finishPositioning() {
if (DEBUG_TASK_POSITIONING) {
- Slog.d(TAG, "finishPositioning");
+ Slog.d(TAG_WM, "finishPositioning");
}
synchronized (mWindowMap) {
if (mTaskPositioner != null) {
@@ -7204,7 +7218,7 @@
IBinder prepareDragSurface(IWindow window, SurfaceSession session,
int flags, int width, int height, Surface outSurface) {
if (DEBUG_DRAG) {
- Slog.d(TAG, "prepare drag surface: w=" + width + " h=" + height
+ Slog.d(TAG_WM, "prepare drag surface: w=" + width + " h=" + height
+ " flags=" + Integer.toHexString(flags) + " win=" + window
+ " asbinder=" + window.asBinder());
}
@@ -7231,7 +7245,7 @@
}
surface.setAlpha(alpha);
- if (SHOW_TRANSACTIONS) Slog.i(TAG, " DRAG "
+ if (SHOW_TRANSACTIONS) Slog.i(TAG_WM, " DRAG "
+ surface + ": CREATE");
outSurface.copyFrom(surface);
final IBinder winBinder = window.asBinder();
@@ -7247,10 +7261,10 @@
Message msg = mH.obtainMessage(H.DRAG_START_TIMEOUT, winBinder);
mH.sendMessageDelayed(msg, 5000);
} else {
- Slog.w(TAG, "Drag already in progress");
+ Slog.w(TAG_WM, "Drag already in progress");
}
} catch (OutOfResourcesException e) {
- Slog.e(TAG, "Can't allocate drag surface w=" + width + " h=" + height, e);
+ Slog.e(TAG_WM, "Can't allocate drag surface w=" + width + " h=" + height, e);
if (mDragState != null) {
mDragState.reset();
mDragState = null;
@@ -7329,7 +7343,7 @@
public boolean detectSafeMode() {
if (!mInputMonitor.waitForInputDevicesReady(
INPUT_DEVICES_READY_FOR_SAFE_MODE_DETECTION_TIMEOUT_MILLIS)) {
- Slog.w(TAG, "Devices still not ready after waiting "
+ Slog.w(TAG_WM, "Devices still not ready after waiting "
+ INPUT_DEVICES_READY_FOR_SAFE_MODE_DETECTION_TIMEOUT_MILLIS
+ " milliseconds before attempting to detect safe mode.");
}
@@ -7353,10 +7367,10 @@
} catch (IllegalArgumentException e) {
}
if (mSafeMode) {
- Log.i(TAG, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
+ Log.i(TAG_WM, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
+ " dpad=" + dpadState + " trackball=" + trackballState + ")");
} else {
- Log.i(TAG, "SAFE MODE not enabled");
+ Log.i(TAG_WM, "SAFE MODE not enabled");
}
mPolicy.setSafeMode(mSafeMode);
return mSafeMode;
@@ -7398,7 +7412,9 @@
if (displayContent != null) {
mAnimator.addDisplayLocked(displayId);
displayContent.initializeDisplayBaseInfo();
- displayContent.mTapDetector.init();
+ if (displayContent.mTapDetector != null) {
+ displayContent.mTapDetector.init();
+ }
}
}
}
@@ -7475,7 +7491,7 @@
@Override
public void handleMessage(Message msg) {
if (DEBUG_WINDOW_TRACE) {
- Slog.v(TAG, "handleMessage: entry what=" + msg.what);
+ Slog.v(TAG_WM, "handleMessage: entry what=" + msg.what);
}
switch (msg.what) {
case REPORT_FOCUS_CHANGE: {
@@ -7498,11 +7514,11 @@
return;
}
mLastFocus = newFocus;
- if (DEBUG_FOCUS_LIGHT) Slog.i(TAG, "Focus moving from " + lastFocus +
+ if (DEBUG_FOCUS_LIGHT) Slog.i(TAG_WM, "Focus moving from " + lastFocus +
" to " + newFocus);
if (newFocus != null && lastFocus != null
&& !newFocus.isDisplayedLw()) {
- //Slog.i(TAG, "Delaying loss of focus...");
+ //Slog.i(TAG_WM, "Delaying loss of focus...");
mLosingFocus.add(lastFocus);
lastFocus = null;
}
@@ -7517,13 +7533,13 @@
//System.out.println("Changing focus from " + lastFocus
// + " to " + newFocus);
if (newFocus != null) {
- if (DEBUG_FOCUS_LIGHT) Slog.i(TAG, "Gaining focus: " + newFocus);
+ if (DEBUG_FOCUS_LIGHT) Slog.i(TAG_WM, "Gaining focus: " + newFocus);
newFocus.reportFocusChangedSerialized(true, mInTouchMode);
notifyFocusChanged();
}
if (lastFocus != null) {
- if (DEBUG_FOCUS_LIGHT) Slog.i(TAG, "Losing focus: " + lastFocus);
+ if (DEBUG_FOCUS_LIGHT) Slog.i(TAG_WM, "Losing focus: " + lastFocus);
lastFocus.reportFocusChangedSerialized(false, mInTouchMode);
}
} break;
@@ -7538,7 +7554,7 @@
final int N = losers.size();
for (int i=0; i<N; i++) {
- if (DEBUG_FOCUS_LIGHT) Slog.i(TAG, "Losing delayed focus: " +
+ if (DEBUG_FOCUS_LIGHT) Slog.i(TAG_WM, "Losing delayed focus: " +
losers.get(i));
losers.get(i).reportFocusChangedSerialized(false, mInTouchMode);
}
@@ -7559,7 +7575,7 @@
return;
}
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Add starting "
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Add starting "
+ wtoken + ": pkg=" + sd.pkg);
View view = null;
@@ -7568,7 +7584,7 @@
wtoken.token, sd.pkg, sd.theme, sd.compatInfo,
sd.nonLocalizedLabel, sd.labelRes, sd.icon, sd.logo, sd.windowFlags);
} catch (Exception e) {
- Slog.w(TAG, "Exception when adding starting window", e);
+ Slog.w(TAG_WM, "Exception when adding starting window", e);
}
if (view != null) {
@@ -7579,7 +7595,7 @@
// If the window was successfully added, then
// we need to remove it.
if (wtoken.startingWindow != null) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG,
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
"Aborted starting " + wtoken
+ ": removed=" + wtoken.removed
+ " startingData=" + wtoken.startingData);
@@ -7590,7 +7606,7 @@
} else {
wtoken.startingView = view;
}
- if (DEBUG_STARTING_WINDOW && !abort) Slog.v(TAG,
+ if (DEBUG_STARTING_WINDOW && !abort) Slog.v(TAG_WM,
"Added starting " + wtoken
+ ": startingWindow="
+ wtoken.startingWindow + " startingView="
@@ -7601,7 +7617,7 @@
try {
mPolicy.removeStartingWindow(wtoken.token, view);
} catch (Exception e) {
- Slog.w(TAG, "Exception when removing starting window", e);
+ Slog.w(TAG_WM, "Exception when removing starting window", e);
}
}
}
@@ -7612,7 +7628,7 @@
IBinder token = null;
View view = null;
synchronized (mWindowMap) {
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Remove starting "
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Remove starting "
+ wtoken + ": startingWindow="
+ wtoken.startingWindow + " startingView="
+ wtoken.startingView);
@@ -7629,7 +7645,7 @@
try {
mPolicy.removeStartingWindow(token, view);
} catch (Exception e) {
- Slog.w(TAG, "Exception when removing starting window", e);
+ Slog.w(TAG_WM, "Exception when removing starting window", e);
}
}
} break;
@@ -7645,7 +7661,7 @@
}
AppWindowToken wtoken = mFinishedStarting.remove(N-1);
- if (DEBUG_STARTING_WINDOW) Slog.v(TAG,
+ if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM,
"Finished starting " + wtoken
+ ": startingWindow=" + wtoken.startingWindow
+ " startingView=" + wtoken.startingView);
@@ -7665,7 +7681,7 @@
try {
mPolicy.removeStartingWindow(token, view);
} catch (Exception e) {
- Slog.w(TAG, "Exception when removing starting window", e);
+ Slog.w(TAG_WM, "Exception when removing starting window", e);
}
}
} break;
@@ -7675,7 +7691,7 @@
try {
if (DEBUG_VISIBILITY) Slog.v(
- TAG, "Reporting drawn in " + wtoken);
+ TAG_WM, "Reporting drawn in " + wtoken);
wtoken.appToken.windowsDrawn();
} catch (RemoteException ex) {
}
@@ -7689,7 +7705,7 @@
try {
if (DEBUG_VISIBILITY) Slog.v(
- TAG, "Reporting visible in " + wtoken
+ TAG_WM, "Reporting visible in " + wtoken
+ " visible=" + nowVisible
+ " gone=" + nowGone);
if (nowVisible) {
@@ -7704,7 +7720,7 @@
case WINDOW_FREEZE_TIMEOUT: {
// TODO(multidisplay): Can non-default displays rotate?
synchronized (mWindowMap) {
- Slog.w(TAG, "Window freeze timeout expired.");
+ Slog.w(TAG_WM, "Window freeze timeout expired.");
mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_TIMEOUT;
final WindowList windows = getDefaultWindowListLocked();
int i = windows.size();
@@ -7715,7 +7731,7 @@
w.mOrientationChanging = false;
w.mLastFreezeDuration = (int)(SystemClock.elapsedRealtime()
- mDisplayFreezeTime);
- Slog.w(TAG, "Force clearing orientation change: " + w);
+ Slog.w(TAG_WM, "Force clearing orientation change: " + w);
}
}
mWindowPlacerLocked.performSurfacePlacement();
@@ -7727,7 +7743,7 @@
synchronized (mWindowMap) {
if (mAppTransition.isTransitionSet() || !mOpeningApps.isEmpty()
|| !mClosingApps.isEmpty()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "*** APP TRANSITION TIMEOUT."
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT."
+ " isTransitionSet()=" + mAppTransition.isTransitionSet()
+ " mOpeningApps.size()=" + mOpeningApps.size()
+ " mClosingApps.size()=" + mClosingApps.size());
@@ -7776,7 +7792,7 @@
case APP_FREEZE_TIMEOUT: {
synchronized (mWindowMap) {
- Slog.w(TAG, "App freeze timeout expired.");
+ Slog.w(TAG_WM, "App freeze timeout expired.");
mWindowsFreezingScreen = WINDOWS_FREEZING_SCREENS_TIMEOUT;
final int numStacks = mStackIdToStack.size();
for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
@@ -7787,7 +7803,7 @@
for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) {
AppWindowToken tok = tokens.get(tokenNdx);
if (tok.mAppAnimator.freezingScreen) {
- Slog.w(TAG, "Force clearing freeze: " + tok);
+ Slog.w(TAG_WM, "Force clearing freeze: " + tok);
unsetAppFreezingScreenLocked(tok, true, true);
}
}
@@ -7827,7 +7843,7 @@
case DRAG_START_TIMEOUT: {
IBinder win = (IBinder)msg.obj;
if (DEBUG_DRAG) {
- Slog.w(TAG, "Timeout starting drag by win " + win);
+ Slog.w(TAG_WM, "Timeout starting drag by win " + win);
}
synchronized (mWindowMap) {
// !!! TODO: ANR the app that has failed to start the drag in time
@@ -7844,7 +7860,7 @@
case DRAG_END_TIMEOUT: {
IBinder win = (IBinder)msg.obj;
if (DEBUG_DRAG) {
- Slog.w(TAG, "Timeout ending drag to win " + win);
+ Slog.w(TAG_WM, "Timeout ending drag to win " + win);
}
synchronized (mWindowMap) {
// !!! TODO: ANR the drag-receiving app
@@ -7869,7 +7885,7 @@
case WAITING_FOR_DRAWN_TIMEOUT: {
Runnable callback = null;
synchronized (mWindowMap) {
- Slog.w(TAG, "Timeout waiting for drawn: undrawn=" + mWaitingForDrawn);
+ Slog.w(TAG_WM, "Timeout waiting for drawn: undrawn=" + mWaitingForDrawn);
mWaitingForDrawn.clear();
callback = mWaitingForDrawnCallback;
mWaitingForDrawnCallback = null;
@@ -7994,7 +8010,7 @@
case CHECK_IF_BOOT_ANIMATION_FINISHED: {
final boolean bootAnimationComplete;
synchronized (mWindowMap) {
- if (DEBUG_BOOT) Slog.i(TAG, "CHECK_IF_BOOT_ANIMATION_FINISHED:");
+ if (DEBUG_BOOT) Slog.i(TAG_WM, "CHECK_IF_BOOT_ANIMATION_FINISHED:");
bootAnimationComplete = checkBootAnimationCompleteLocked();
}
if (bootAnimationComplete) {
@@ -8018,7 +8034,7 @@
case UPDATE_DOCKED_STACK_DIVIDER: {
synchronized (mWindowMap) {
getDefaultDisplayContentLocked().getDockedDividerController()
- .reevaluateVisibility();
+ .reevaluateVisibility(false);
}
}
break;
@@ -8051,7 +8067,7 @@
break;
}
if (DEBUG_WINDOW_TRACE) {
- Slog.v(TAG, "handleMessage: exit");
+ Slog.v(TAG_WM, "handleMessage: exit");
}
}
}
@@ -8086,9 +8102,9 @@
// TODO(multidisplay): IMEs are only supported on the default display.
WindowState imFocus = getDefaultWindowListLocked().get(idx-1);
if (DEBUG_INPUT_METHOD) {
- Slog.i(TAG, "Desired input method target: " + imFocus);
- Slog.i(TAG, "Current focus: " + mCurrentFocus);
- Slog.i(TAG, "Last focus: " + mLastFocus);
+ Slog.i(TAG_WM, "Desired input method target: " + imFocus);
+ Slog.i(TAG_WM, "Current focus: " + mCurrentFocus);
+ Slog.i(TAG_WM, "Last focus: " + mLastFocus);
}
if (imFocus != null) {
// This may be a starting window, in which case we still want
@@ -8100,18 +8116,18 @@
for (int i=0; i<imFocus.mAppToken.windows.size(); i++) {
WindowState w = imFocus.mAppToken.windows.get(i);
if (w != imFocus) {
- Log.i(TAG, "Switching to real app window: " + w);
+ Log.i(TAG_WM, "Switching to real app window: " + w);
imFocus = w;
break;
}
}
}
if (DEBUG_INPUT_METHOD) {
- Slog.i(TAG, "IM target client: " + imFocus.mSession.mClient);
+ Slog.i(TAG_WM, "IM target client: " + imFocus.mSession.mClient);
if (imFocus.mSession.mClient != null) {
- Slog.i(TAG, "IM target client binder: "
+ Slog.i(TAG_WM, "IM target client binder: "
+ imFocus.mSession.mClient.asBinder());
- Slog.i(TAG, "Requesting client binder: " + client.asBinder());
+ Slog.i(TAG_WM, "Requesting client binder: " + client.asBinder());
}
}
if (imFocus.mSession.mClient != null &&
@@ -8224,7 +8240,7 @@
}
private void setForcedDisplayScalingModeLocked(DisplayContent displayContent, int mode) {
- Slog.i(TAG, "Using display scaling mode: " + (mode == 0 ? "auto" : "off"));
+ Slog.i(TAG_WM, "Using display scaling mode: " + (mode == 0 ? "auto" : "off"));
displayContent.mDisplayScalingDisabled = (mode != 0);
reconfigureDisplayLocked(displayContent);
}
@@ -8245,7 +8261,7 @@
height = Integer.parseInt(sizeStr.substring(pos+1));
if (displayContent.mBaseDisplayWidth != width
|| displayContent.mBaseDisplayHeight != height) {
- Slog.i(TAG, "FORCED DISPLAY SIZE: " + width + "x" + height);
+ Slog.i(TAG_WM, "FORCED DISPLAY SIZE: " + width + "x" + height);
displayContent.mBaseDisplayWidth = width;
displayContent.mBaseDisplayHeight = height;
}
@@ -8265,7 +8281,7 @@
try {
density = Integer.parseInt(densityStr);
if (displayContent.mBaseDisplayDensity != density) {
- Slog.i(TAG, "FORCED DISPLAY DENSITY: " + density);
+ Slog.i(TAG_WM, "FORCED DISPLAY DENSITY: " + density);
displayContent.mBaseDisplayDensity = density;
}
} catch (NumberFormatException ex) {
@@ -8276,14 +8292,14 @@
int mode = Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.DISPLAY_SCALING_FORCE, 0);
if (mode != 0) {
- Slog.i(TAG, "FORCED DISPLAY SCALING DISABLED");
+ Slog.i(TAG_WM, "FORCED DISPLAY SCALING DISABLED");
displayContent.mDisplayScalingDisabled = true;
}
}
// displayContent must not be null
private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) {
- Slog.i(TAG, "Using new display size: " + width + "x" + height);
+ Slog.i(TAG_WM, "Using new display size: " + width + "x" + height);
displayContent.mBaseDisplayWidth = width;
displayContent.mBaseDisplayHeight = height;
reconfigureDisplayLocked(displayContent);
@@ -8366,7 +8382,7 @@
// displayContent must not be null
private void setForcedDisplayDensityLocked(DisplayContent displayContent, int density) {
- Slog.i(TAG, "Using new display density: " + density);
+ Slog.i(TAG_WM, "Using new display density: " + density);
displayContent.mBaseDisplayDensity = density;
reconfigureDisplayLocked(displayContent);
}
@@ -8483,14 +8499,14 @@
boolean throwOnError) {
WindowState win = mWindowMap.get(client);
if (localLOGV) Slog.v(
- TAG, "Looking up client " + client + ": " + win);
+ TAG_WM, "Looking up client " + client + ": " + win);
if (win == null) {
RuntimeException ex = new IllegalArgumentException(
"Requested window " + client + " does not exist");
if (throwOnError) {
throw ex;
}
- Slog.w(TAG, "Failed looking up window", ex);
+ Slog.w(TAG_WM, "Failed looking up window", ex);
return null;
}
if (session != null && win.mSession != session) {
@@ -8500,7 +8516,7 @@
if (throwOnError) {
throw ex;
}
- Slog.w(TAG, "Failed looking up window", ex);
+ Slog.w(TAG_WM, "Failed looking up window", ex);
return null;
}
@@ -8531,7 +8547,7 @@
win.mRebuilding = true;
mRebuildTmp[numRemoved] = win;
mWindowsChanged = true;
- if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG, "Rebuild removing window: " + win);
+ if (DEBUG_WINDOW_MOVEMENT) Slog.v(TAG_WM, "Rebuild removing window: " + win);
NW--;
numRemoved++;
continue;
@@ -8582,7 +8598,7 @@
i -= lastBelow;
if (i != numRemoved) {
displayContent.layoutNeeded = true;
- Slog.w(TAG, "On display=" + displayContent.getDisplayId() + " Rebuild removed " +
+ Slog.w(TAG_WM, "On display=" + displayContent.getDisplayId() + " Rebuild removed " +
numRemoved + " windows but added " + i,
new RuntimeException("here").fillInStackTrace());
for (i=0; i<numRemoved; i++) {
@@ -8592,14 +8608,14 @@
PrintWriter pw = new FastPrintWriter(sw, false, 1024);
ws.dump(pw, "", true);
pw.flush();
- Slog.w(TAG, "This window was lost: " + ws);
- Slog.w(TAG, sw.toString());
+ Slog.w(TAG_WM, "This window was lost: " + ws);
+ Slog.w(TAG_WM, sw.toString());
ws.mWinAnimator.destroySurfaceLocked();
}
}
- Slog.w(TAG, "Current app token list:");
+ Slog.w(TAG_WM, "Current app token list:");
dumpAppTokensLocked();
- Slog.w(TAG, "Final window list:");
+ Slog.w(TAG_WM, "Final window list:");
dumpWindowsLocked();
}
Arrays.fill(mRebuildTmp, null);
@@ -8611,7 +8627,7 @@
int curLayer = 0;
int i;
- if (DEBUG_LAYERS) Slog.v(TAG, "Assigning layers based on windows=" + windows,
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "Assigning layers based on windows=" + windows,
new RuntimeException("here").fillInStackTrace());
boolean anyLayerChanged = false;
@@ -8640,14 +8656,7 @@
} else if (wtoken != null) {
winAnimator.mAnimLayer =
w.mLayer + wtoken.mAppAnimator.animLayerAdjustment;
- if (wtoken.mWillReplaceWindow && wtoken.mReplacingWindow != w
- && wtoken.mAnimateReplacingWindow) {
- // We know that we will be animating a relaunching window in the near future,
- // which will receive a z-order increase. We want the replaced window to
- // immediately receive the same treatment, e.g. to be above the dock divider.
- w.mLayer += TYPE_LAYER_OFFSET;
- winAnimator.mAnimLayer += TYPE_LAYER_OFFSET;
- }
+ forceHigherLayerIfNeeded(w, winAnimator, wtoken);
} else {
winAnimator.mAnimLayer = w.mLayer;
}
@@ -8667,7 +8676,7 @@
// Force an animation pass just to update the mDimLayer layer.
scheduleAnimationLocked();
}
- if (DEBUG_LAYERS) Slog.v(TAG, "Assign layer " + w + ": "
+ if (DEBUG_LAYERS) Slog.v(TAG_WM, "Assign layer " + w + ": "
+ "mBase=" + w.mBaseLayer
+ " mLayer=" + w.mLayer
+ (wtoken == null ?
@@ -8684,12 +8693,36 @@
}
}
+ private void forceHigherLayerIfNeeded(WindowState w, WindowStateAnimator winAnimator,
+ AppWindowToken wtoken) {
+ boolean force = false;
+ if (wtoken.mWillReplaceWindow && wtoken.mReplacingWindow != w
+ && wtoken.mAnimateReplacingWindow) {
+ // We know that we will be animating a relaunching window in the near future,
+ // which will receive a z-order increase. We want the replaced window to
+ // immediately receive the same treatment, e.g. to be above the dock divider.
+ force = true;
+ }
+ if (!force) {
+ final TaskStack stack = w.getStack();
+ if (stack != null && (StackId.shouldIncreaseApplicationWindowLayer(stack.mStackId))) {
+ // For pinned and docked stack window, we want to make them above other windows
+ // also when these windows are animating.
+ force = true;
+ }
+ }
+ if (force) {
+ w.mLayer += TYPE_LAYER_OFFSET;
+ winAnimator.mAnimLayer += TYPE_LAYER_OFFSET;
+ }
+ }
+
void makeWindowFreezingScreenIfNeededLocked(WindowState w) {
// If the screen is currently frozen or off, then keep
// it frozen/off until this window draws at its new
// orientation.
if (!okToDisplay() && mWindowsFreezingScreen != WINDOWS_FREEZING_SCREENS_TIMEOUT) {
- if (DEBUG_ORIENTATION) Slog.v(TAG, "Changing surface while display frozen: " + w);
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Changing surface while display frozen: " + w);
w.mOrientationChanging = true;
w.mLastFreezeDuration = 0;
mWindowPlacerLocked.mOrientationChangeComplete = false;
@@ -8734,7 +8767,7 @@
rebuildAppWindowListLocked();
changes |= PhoneWindowManager.FINISH_LAYOUT_REDO_LAYOUT;
- if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
+ if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG_WM,
"Wallpaper layer changed: assigning layers + relayout");
moveInputMethodWindowsIfNeededLocked(true);
mWindowPlacerLocked.mWallpaperMayChange = true;
@@ -8752,11 +8785,11 @@
w.setInsetsChanged();
boolean configChanged = w.isConfigChanged();
if (DEBUG_CONFIGURATION && configChanged) {
- Slog.v(TAG, "Win " + w + " config changed: "
+ Slog.v(TAG_WM, "Win " + w + " config changed: "
+ mCurConfiguration);
}
final boolean dragResizingChanged = w.isDragResizeChanged();
- if (localLOGV) Slog.v(TAG, "Resizing " + w
+ if (localLOGV) Slog.v(TAG_WM, "Resizing " + w
+ ": configChanged=" + configChanged
+ " dragResizingChanged=" + dragResizingChanged
+ " last=" + w.mLastFrame + " frame=" + w.mFrame);
@@ -8768,7 +8801,7 @@
|| configChanged
|| dragResizingChanged) {
if (DEBUG_RESIZE || DEBUG_ORIENTATION) {
- Slog.v(TAG, "Resize reasons for w=" + w + ": "
+ Slog.v(TAG_WM, "Resize reasons for w=" + w + ": "
+ " contentInsetsChanged=" + w.mContentInsetsChanged
+ " " + w.mContentInsets.toShortString()
+ " visibleInsetsChanged=" + w.mVisibleInsetsChanged
@@ -8802,7 +8835,7 @@
// application when it has finished drawing.
if (w.mOrientationChanging || dragResizingChanged) {
if (DEBUG_SURFACE_TRACE || DEBUG_ANIM || DEBUG_ORIENTATION || DEBUG_RESIZE) {
- Slog.v(TAG, "Orientation or resize start waiting for draw"
+ Slog.v(TAG_WM, "Orientation or resize start waiting for draw"
+ ", mDrawState=DRAW_PENDING in " + w
+ ", surfaceController " + winAnimator.mSurfaceController);
}
@@ -8813,13 +8846,13 @@
}
}
if (!mResizingWindows.contains(w)) {
- if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_RESIZE || DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Resizing window " + w);
mResizingWindows.add(w);
}
} else if (w.mOrientationChanging) {
if (w.isDrawnLw()) {
- if (DEBUG_ORIENTATION) Slog.v(TAG,
+ if (DEBUG_ORIENTATION) Slog.v(TAG_WM,
"Orientation not waiting for draw in "
+ w + ", surfaceController " + winAnimator.mSurfaceController);
w.mOrientationChanging = false;
@@ -8836,22 +8869,22 @@
}
for (int j = mWaitingForDrawn.size() - 1; j >= 0; j--) {
WindowState win = mWaitingForDrawn.get(j);
- if (DEBUG_SCREEN_ON) Slog.i(TAG, "Waiting for drawn " + win +
+ if (DEBUG_SCREEN_ON) Slog.i(TAG_WM, "Waiting for drawn " + win +
": removed=" + win.mRemoved + " visible=" + win.isVisibleLw() +
" mHasSurface=" + win.mHasSurface +
" drawState=" + win.mWinAnimator.mDrawState);
if (win.mRemoved || !win.mHasSurface || !win.mPolicyVisibility) {
// Window has been removed or hidden; no draw will now happen, so stop waiting.
- if (DEBUG_SCREEN_ON) Slog.w(TAG, "Aborted waiting for drawn: " + win);
+ if (DEBUG_SCREEN_ON) Slog.w(TAG_WM, "Aborted waiting for drawn: " + win);
mWaitingForDrawn.remove(win);
} else if (win.hasDrawnLw()) {
// Window is now drawn (and shown).
- if (DEBUG_SCREEN_ON) Slog.d(TAG, "Window drawn win=" + win);
+ if (DEBUG_SCREEN_ON) Slog.d(TAG_WM, "Window drawn win=" + win);
mWaitingForDrawn.remove(win);
}
}
if (mWaitingForDrawn.isEmpty()) {
- if (DEBUG_SCREEN_ON) Slog.d(TAG, "All windows drawn!");
+ if (DEBUG_SCREEN_ON) Slog.d(TAG_WM, "All windows drawn!");
mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT);
mH.sendEmptyMessage(H.ALL_WINDOWS_DRAWN);
}
@@ -8931,7 +8964,7 @@
// window list to make sure we haven't left any dangling surfaces
// around.
- Slog.i(TAG, "Out of memory for surface! Looking for leaks...");
+ Slog.i(TAG_WM, "Out of memory for surface! Looking for leaks...");
final int numDisplays = mDisplayContents.size();
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final WindowList windows = mDisplayContents.valueAt(displayNdx).getWindowList();
@@ -8941,7 +8974,7 @@
WindowStateAnimator wsa = ws.mWinAnimator;
if (wsa.mSurfaceController != null) {
if (!mSessions.contains(wsa.mSession)) {
- Slog.w(TAG, "LEAKED SURFACE (session doesn't exist): "
+ Slog.w(TAG_WM, "LEAKED SURFACE (session doesn't exist): "
+ ws + " surface=" + wsa.mSurfaceController
+ " token=" + ws.mToken
+ " pid=" + ws.mSession.mPid
@@ -8951,14 +8984,13 @@
mForceRemoves.add(ws);
leakedSurface = true;
} else if (ws.mAppToken != null && ws.mAppToken.clientHidden) {
- Slog.w(TAG, "LEAKED SURFACE (app token hidden): "
+ Slog.w(TAG_WM, "LEAKED SURFACE (app token hidden): "
+ ws + " surface=" + wsa.mSurfaceController
+ " token=" + ws.mAppToken
- + " saved=" + ws.mAppToken.mHasSavedSurface);
+ + " saved=" + ws.mAppToken.hasSavedSurface());
if (SHOW_TRANSACTIONS) logSurface(ws, "LEAK DESTROY", null);
wsa.destroySurface();
ws.setHasSurface(false);
- ws.mAppToken.mHasSavedSurface = false;
leakedSurface = true;
}
}
@@ -8966,7 +8998,7 @@
}
if (!leakedSurface) {
- Slog.w(TAG, "No leaked surfaces; killing applicatons!");
+ Slog.w(TAG_WM, "No leaked surfaces; killing applicatons!");
SparseIntArray pidCandidates = new SparseIntArray();
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final WindowList windows = mDisplayContents.valueAt(displayNdx).getWindowList();
@@ -8999,7 +9031,7 @@
if (leakedSurface || killedApps) {
// We managed to reclaim some memory, so get rid of the trouble
// surface and ask the app to request another one.
- Slog.w(TAG, "Looks like we have reclaimed some memory, clearing surface for retry.");
+ Slog.w(TAG_WM, "Looks like we have reclaimed some memory, clearing surface for retry.");
if (surfaceController != null) {
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) logSurface(winAnimator.mWin,
"RECOVER DESTROY", null);
@@ -9038,7 +9070,7 @@
newFocus = computeFocusedWindowLocked();
}
- if (DEBUG_FOCUS_LIGHT || localLOGV) Slog.v(TAG, "Changing focus from " +
+ if (DEBUG_FOCUS_LIGHT || localLOGV) Slog.v(TAG_WM, "Changing focus from " +
mCurrentFocus + " to " + newFocus + " Callers=" + Debug.getCallers(4));
final WindowState oldFocus = mCurrentFocus;
mCurrentFocus = newFocus;
@@ -9098,7 +9130,7 @@
final WindowState win = windows.get(i);
if (localLOGV || DEBUG_FOCUS) Slog.v(
- TAG, "Looking for focus: " + i
+ TAG_WM, "Looking for focus: " + i
+ " = " + win
+ ", flags=" + win.mAttrs.flags
+ ", canReceive=" + win.canReceiveKeys());
@@ -9111,7 +9143,7 @@
// If this window's application has been removed, just skip it.
if (wtoken != null && (wtoken.removed || wtoken.sendingToBottom)) {
- if (DEBUG_FOCUS) Slog.v(TAG, "Skipping " + wtoken + " because "
+ if (DEBUG_FOCUS) Slog.v(TAG_WM, "Skipping " + wtoken + " because "
+ (wtoken.removed ? "removed" : "sendingToBottom"));
continue;
}
@@ -9129,9 +9161,10 @@
if (wtoken == token) {
break;
}
- if (mFocusedApp == token) {
- // Whoops, we are below the focused app... no focus for you!
- if (localLOGV || DEBUG_FOCUS_LIGHT) Slog.v(TAG,
+ if (mFocusedApp == token && token.stackCanReceiveKeys()) {
+ // Whoops, we are below the focused app whose stack can receive keys...
+ // No focus for you!!!
+ if (localLOGV || DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM,
"findFocusedWindow: Reached focused app=" + mFocusedApp);
return null;
}
@@ -9143,12 +9176,12 @@
}
}
- if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "findFocusedWindow: Found new focus @ " + i +
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "findFocusedWindow: Found new focus @ " + i +
" = " + win);
return win;
}
- if (DEBUG_FOCUS_LIGHT) Slog.v(TAG, "findFocusedWindow: No focusable windows.");
+ if (DEBUG_FOCUS_LIGHT) Slog.v(TAG_WM, "findFocusedWindow: No focusable windows.");
return null;
}
@@ -9224,7 +9257,7 @@
if (mWaitingForConfig || mAppsFreezingScreen > 0
|| mWindowsFreezingScreen == WINDOWS_FREEZING_SCREENS_ACTIVE
|| mClientFreezingScreen || !mOpeningApps.isEmpty()) {
- if (DEBUG_ORIENTATION) Slog.d(TAG,
+ if (DEBUG_ORIENTATION) Slog.d(TAG_WM,
"stopFreezingDisplayLocked: Returning mWaitingForConfig=" + mWaitingForConfig
+ ", mAppsFreezingScreen=" + mAppsFreezingScreen
+ ", mWindowsFreezingScreen=" + mWindowsFreezingScreen
@@ -9242,7 +9275,7 @@
sb.append(" due to ");
sb.append(mLastFinishedFreezeSource);
}
- Slog.i(TAG, sb.toString());
+ Slog.i(TAG_WM, sb.toString());
mH.removeMessages(H.APP_FREEZE_TIMEOUT);
mH.removeMessages(H.CLIENT_FREEZE_TIMEOUT);
if (PROFILE_ORIENTATION) {
@@ -9257,7 +9290,7 @@
mAnimator.getScreenRotationAnimationLocked(displayId);
if (CUSTOM_SCREEN_ROTATION && screenRotationAnimation != null
&& screenRotationAnimation.hasScreenshot()) {
- if (DEBUG_ORIENTATION) Slog.i(TAG, "**** Dismissing screen rotation animation");
+ if (DEBUG_ORIENTATION) Slog.i(TAG_WM, "**** Dismissing screen rotation animation");
// TODO(multidisplay): rotation on main screen only.
DisplayInfo displayInfo = displayContent.getDisplayInfo();
// Get rotation animation again, with new top window
@@ -9303,7 +9336,7 @@
mScreenFrozenLock.release();
if (updateRotation) {
- if (DEBUG_ORIENTATION) Slog.d(TAG, "Performing post-rotate rotation");
+ if (DEBUG_ORIENTATION) Slog.d(TAG_WM, "Performing post-rotate rotation");
configChanged |= updateRotationUncheckedLocked(false);
}
@@ -10042,7 +10075,7 @@
private DisplayContent newDisplayContentLocked(final Display display) {
DisplayContent displayContent = new DisplayContent(display, this);
final int displayId = display.getDisplayId();
- if (DEBUG_DISPLAY) Slog.v(TAG, "Adding display=" + display);
+ if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Adding display=" + display);
mDisplayContents.put(displayId, displayContent);
DisplayInfo displayInfo = displayContent.getDisplayInfo();
@@ -10146,7 +10179,7 @@
displayContent.mDeferredRemoval = true;
return;
}
- if (DEBUG_DISPLAY) Slog.v(TAG, "Removing display=" + displayContent);
+ if (DEBUG_DISPLAY) Slog.v(TAG_WM, "Removing display=" + displayContent);
mDisplayContents.delete(displayId);
displayContent.close();
if (displayId == Display.DEFAULT_DISPLAY) {
@@ -10182,11 +10215,11 @@
public void setReplacingWindow(IBinder token, boolean animate) {
synchronized (mWindowMap) {
AppWindowToken appWindowToken = findAppWindowToken(token);
- if (appWindowToken == null) {
- Slog.w(TAG, "Attempted to set replacing window on non-existing app token " + token);
+ if (appWindowToken == null || !appWindowToken.isVisible()) {
+ Slog.w(TAG_WM, "Attempted to set replacing window on non-existing app token " + token);
return;
}
- if (DEBUG_ADD_REMOVE) Slog.d(TAG, "Marking app token " + appWindowToken
+ if (DEBUG_ADD_REMOVE) Slog.d(TAG_WM, "Marking app token " + appWindowToken
+ " as replacing window.");
appWindowToken.mWillReplaceWindow = true;
appWindowToken.mHasReplacedWindow = false;
@@ -10196,7 +10229,7 @@
// Set-up dummy animation so we can start treating windows associated with this
// token like they are in transition before the new app window is ready for us to
// run the real transition animation.
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"setReplacingWindow() Setting dummy animation on: " + appWindowToken);
appWindowToken.mAppAnimator.setDummyAnimation();
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 29cadf3..0fc7142 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -56,6 +56,7 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import static android.app.ActivityManager.StackId;
import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER;
import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_CONTENT;
import static android.view.ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
@@ -71,6 +72,7 @@
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_KEYGUARD;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
@@ -81,14 +83,18 @@
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 com.android.server.wm.WindowManagerService.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerService.DEBUG_CONFIGURATION;
-import static com.android.server.wm.WindowManagerService.DEBUG_FOCUS_LIGHT;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT;
-import static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerService.DEBUG_POWER;
-import static com.android.server.wm.WindowManagerService.DEBUG_RESIZE;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
+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_LIGHT;
+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_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
class WindowList extends ArrayList<WindowState> {
}
@@ -97,7 +103,7 @@
* A window in the window manager.
*/
final class WindowState implements WindowManagerPolicy.WindowState {
- static final String TAG = "WindowState";
+ static final String TAG = TAG_WITH_CLASS_NAME ? "WindowState" : TAG_WM;
// The minimal size of a window within the usable area of the freeform stack.
// TODO(multi-window): fix the min sizes when we have mininum width/height support,
@@ -253,13 +259,6 @@
*/
int mTouchableInsets = ViewTreeObserver.InternalInsetsInfo.TOUCHABLE_INSETS_FRAME;
- /**
- * This is rectangle of the window's surface that is not covered by
- * system decorations.
- */
- final Rect mSystemDecorRect = new Rect();
- final Rect mLastSystemDecorRect = new Rect();
-
// Current transformation being applied.
float mGlobalScale=1;
float mInvGlobalScale=1;
@@ -400,6 +399,10 @@
/** When true this window can be displayed on screens owther than mOwnerUid's */
private boolean mShowToOwnerOnly;
+ // Whether the window has a saved surface from last pause, which can be
+ // used to start an entering animation earlier.
+ public boolean mSurfaceSaved = false;
+
/**
* Wake lock for drawing.
* Even though it's slightly more expensive to do so, we will use a separate wake lock
@@ -471,8 +474,7 @@
+ WindowManagerService.TYPE_LAYER_OFFSET;
mSubLayer = mPolicy.subWindowTypeToLayerLw(a.type);
mAttachedWindow = attachedWindow;
- if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to "
- + mAttachedWindow);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Adding " + this + " to " + mAttachedWindow);
final WindowList childWindows = mAttachedWindow.mChildWindows;
final int numChildWindows = childWindows.size();
@@ -617,41 +619,8 @@
final int pw = mContainingFrame.width();
final int ph = mContainingFrame.height();
- int w,h;
- if ((mAttrs.flags & FLAG_SCALED) != 0) {
- if (mAttrs.width < 0) {
- w = pw;
- } else if (mEnforceSizeCompat) {
- w = (int)(mAttrs.width * mGlobalScale + .5f);
- } else {
- w = mAttrs.width;
- }
- if (mAttrs.height < 0) {
- h = ph;
- } else if (mEnforceSizeCompat) {
- h = (int)(mAttrs.height * mGlobalScale + .5f);
- } else {
- h = mAttrs.height;
- }
- } else {
- if (mAttrs.width == WindowManager.LayoutParams.MATCH_PARENT) {
- w = pw;
- } else if (mEnforceSizeCompat) {
- w = (int)(mRequestedWidth * mGlobalScale + .5f);
- } else {
- w = mRequestedWidth;
- }
- if (mAttrs.height == WindowManager.LayoutParams.MATCH_PARENT) {
- h = ph;
- } else if (mEnforceSizeCompat) {
- h = (int)(mRequestedHeight * mGlobalScale + .5f);
- } else {
- h = mRequestedHeight;
- }
- }
-
if (!mParentFrame.equals(pf)) {
- //Slog.i(TAG, "Window " + this + " content frame from " + mParentFrame
+ //Slog.i(TAG_WM, "Window " + this + " content frame from " + mParentFrame
// + " to " + pf);
mParentFrame.set(pf);
mContentChanged = true;
@@ -675,28 +644,7 @@
final int fw = mFrame.width();
final int fh = mFrame.height();
- float x, y;
- if (mEnforceSizeCompat) {
- x = mAttrs.x * mGlobalScale;
- y = mAttrs.y * mGlobalScale;
- } else {
- x = mAttrs.x;
- y = mAttrs.y;
- }
-
- if (nonFullscreenTask) {
- // Make sure window fits in containing frame since it is in a non-fullscreen stack as
- // required by {@link Gravity#apply} call.
- w = Math.min(w, pw);
- h = Math.min(h, ph);
- }
-
- Gravity.apply(mAttrs.gravity, w, h, mContainingFrame,
- (int) (x + mAttrs.horizontalMargin * pw),
- (int) (y + mAttrs.verticalMargin * ph), mFrame);
-
- // Now make sure the window fits in the overall display frame.
- Gravity.applyDisplay(mAttrs.gravity, mDisplayFrame, mFrame);
+ applyGravityAndUpdateFrame();
// Calculate the outsets before the content frame gets shrinked to the window frame.
if (hasOutsets) {
@@ -1288,7 +1236,7 @@
disposeInputChannel();
if (mAttachedWindow != null) {
- if (WindowManagerService.DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + this + " from " + mAttachedWindow);
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG, "Removing " + this + " from " + mAttachedWindow);
mAttachedWindow.mChildWindows.remove(this);
}
mWinAnimator.destroyDeferredSurfaceLocked();
@@ -1564,13 +1512,17 @@
}
}
- /**
- * @return true if this window desires key events.
- */
- public final boolean canReceiveKeys() {
+ /** @return true if this window desires key events. */
+ boolean canReceiveKeys() {
return isVisibleOrAdding()
&& (mViewVisibility == View.VISIBLE)
- && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0);
+ && ((mAttrs.flags & WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) == 0)
+ && stackCanReceiveKeys();
+ }
+
+ boolean stackCanReceiveKeys() {
+ final TaskStack stack = getStack();
+ return stack != null && StackId.canReceiveKeys(stack.mStackId);
}
@Override
@@ -1718,22 +1670,43 @@
return mAppToken != null && mAppToken.mAnimatingWithSavedSurface;
}
- boolean shouldSaveSurface() {
+ // Returns true if the surface is saved.
+ boolean destroyOrSaveSurface() {
+ Task task = getTask();
if (ActivityManager.isLowRamDeviceStatic()) {
// Don't save surfaces on Svelte devices.
- return false;
- }
-
- Task task = getTask();
- if (task == null || task.inHomeStack()
+ mSurfaceSaved = false;
+ } else if (task == null || task.inHomeStack()
|| task.getTopVisibleAppToken() != mAppToken) {
// Don't save surfaces for home stack apps. These usually resume and draw
// first frame very fast. Saving surfaces are mostly a waste of memory.
// Don't save if the window is not the topmost window.
- return false;
+ mSurfaceSaved = false;
+ } else if (mAttachedWindow != null) {
+ mSurfaceSaved = false;
+ } else {
+ mSurfaceSaved = mAppToken.shouldSaveSurface();
}
+ if (mSurfaceSaved == false) {
+ mWinAnimator.destroySurfaceLocked();
+ }
+ return mSurfaceSaved;
+ }
- return mAppToken.shouldSaveSurface();
+ public void destroySavedSurface() {
+ if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG, "Destroying saved surface: " + this);
+ if (mSurfaceSaved) {
+ mWinAnimator.destroySurfaceLocked();
+ }
+ }
+
+ public boolean hasSavedSurface() {
+ return mSurfaceSaved;
+ }
+
+ public void restoreSavedSurface() {
+ mSurfaceSaved = false;
+ mWinAnimator.mDrawState = WindowStateAnimator.READY_TO_SHOW;
}
@Override
@@ -2105,13 +2078,6 @@
pw.print(prefix); pw.print("mFrame="); mFrame.printShortString(pw);
pw.print(" last="); mLastFrame.printShortString(pw);
pw.println();
- pw.print(prefix); pw.print("mSystemDecorRect="); mSystemDecorRect.printShortString(pw);
- pw.print(" last="); mLastSystemDecorRect.printShortString(pw);
- if (mWinAnimator.mHasClipRect) {
- pw.print(" mLastClipRect=");
- mWinAnimator.mLastClipRect.printShortString(pw);
- }
- pw.println();
}
if (mEnforceSizeCompat) {
pw.print(prefix); pw.print("mCompatFrame="); mCompatFrame.printShortString(pw);
@@ -2224,4 +2190,69 @@
rect.bottom = rect.top + (int)((rect.bottom - rect.top) / mVScale);
}
}
+
+ void applyGravityAndUpdateFrame() {
+ final int pw = mContainingFrame.width();
+ final int ph = mContainingFrame.height();
+ final Task task = getTask();
+ final boolean nonFullscreenTask = task != null && !task.isFullscreen();
+
+ float x, y;
+ int w,h;
+
+ if ((mAttrs.flags & FLAG_SCALED) != 0) {
+ if (mAttrs.width < 0) {
+ w = pw;
+ } else if (mEnforceSizeCompat) {
+ w = (int)(mAttrs.width * mGlobalScale + .5f);
+ } else {
+ w = mAttrs.width;
+ }
+ if (mAttrs.height < 0) {
+ h = ph;
+ } else if (mEnforceSizeCompat) {
+ h = (int)(mAttrs.height * mGlobalScale + .5f);
+ } else {
+ h = mAttrs.height;
+ }
+ } else {
+ if (mAttrs.width == MATCH_PARENT) {
+ w = pw;
+ } else if (mEnforceSizeCompat) {
+ w = (int)(mRequestedWidth * mGlobalScale + .5f);
+ } else {
+ w = mRequestedWidth;
+ }
+ if (mAttrs.height == MATCH_PARENT) {
+ h = ph;
+ } else if (mEnforceSizeCompat) {
+ h = (int)(mRequestedHeight * mGlobalScale + .5f);
+ } else {
+ h = mRequestedHeight;
+ }
+ }
+
+ if (mEnforceSizeCompat) {
+ x = mAttrs.x * mGlobalScale;
+ y = mAttrs.y * mGlobalScale;
+ } else {
+ x = mAttrs.x;
+ y = mAttrs.y;
+ }
+
+ if (nonFullscreenTask) {
+ // Make sure window fits in containing frame since it is in a non-fullscreen stack as
+ // required by {@link Gravity#apply} call.
+ w = Math.min(w, pw);
+ h = Math.min(h, ph);
+ }
+
+ // Set mFrame
+ Gravity.apply(mAttrs.gravity, w, h, mContainingFrame,
+ (int) (x + mAttrs.horizontalMargin * pw),
+ (int) (y + mAttrs.verticalMargin * ph), mFrame);
+
+ // Now make sure the window fits in the overall display frame.
+ Gravity.applyDisplay(mAttrs.gravity, mDisplayFrame, mFrame);
+ }
}
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 132b1b6..7cd67d0 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -20,15 +20,21 @@
import static android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
import static android.view.WindowManager.LayoutParams.FLAG_SCALED;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static com.android.server.wm.WindowManagerService.DEBUG_ANIM;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYERS;
-import static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerService.DEBUG_STARTING_WINDOW;
-import static com.android.server.wm.WindowManagerService.DEBUG_SURFACE_TRACE;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerService.SHOW_SURFACE_ALLOC;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
+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_WINDOW_CROP;
+import static com.android.server.wm.WindowManagerDebugConfig.HIDE_STACK_CRAWLS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+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.TYPE_LAYER_MULTIPLIER;
import static com.android.server.wm.WindowManagerService.localLOGV;
import static com.android.server.wm.WindowState.DRAG_RESIZE_MODE_FREEFORM;
@@ -64,7 +70,7 @@
* Keep track of animations and surface operations for a single WindowState.
**/
class WindowStateAnimator {
- static final String TAG = "WindowStateAnimator";
+ static final String TAG = TAG_WITH_CLASS_NAME ? "WindowStateAnimator" : TAG_WM;
static final int WINDOW_FREEZE_LAYER = TYPE_LAYER_MULTIPLIER * 200;
// Unchanging local convenience fields.
@@ -123,6 +129,13 @@
Rect mLastClipRect = new Rect();
Rect mTmpStackBounds = new Rect();
+ /**
+ * This is rectangle of the window's surface that is not covered by
+ * system decorations.
+ */
+ private final Rect mSystemDecorRect = new Rect();
+ private final Rect mLastSystemDecorRect = new Rect();
+
// Used to save animation distances between the time they are calculated and when they are used.
private int mAnimDx;
private int mAnimDy;
@@ -402,7 +415,7 @@
finishExit();
final int displayId = mWin.getDisplayId();
mAnimator.setPendingLayoutChanges(displayId, WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM);
- if (WindowManagerService.DEBUG_LAYOUT_REPEATS)
+ if (DEBUG_LAYOUT_REPEATS)
mService.mWindowPlacerLocked.debugLayoutRepeats(
"WindowStateAnimator", mAnimator.getPendingLayoutChanges(displayId));
@@ -414,7 +427,7 @@
}
void finishExit() {
- if (WindowManagerService.DEBUG_ANIM) Slog.v(
+ if (DEBUG_ANIM) Slog.v(
TAG, "finishExit in " + this
+ ": exiting=" + mWin.mExiting
+ " remove=" + mWin.mRemoveOnExit
@@ -594,7 +607,7 @@
}
// We may abort, so initialize to defaults.
- w.mLastSystemDecorRect.set(0, 0, 0, 0);
+ mLastSystemDecorRect.set(0, 0, 0, 0);
mHasClipRect = false;
mClipRect.set(0, 0, 0, 0);
mLastClipRect.set(0, 0, 0, 0);
@@ -660,7 +673,7 @@
// Start a new transaction and apply position & offset.
final int layerStack = w.getDisplayContent().getDisplay().getLayerStack();
- if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
+ if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
"POS " + mTmpSize.left + ", " + mTmpSize.top, null);
mSurfaceController.setPositionAndLayer(mTmpSize.left, mTmpSize.top, layerStack,
mAnimLayer);
@@ -726,13 +739,14 @@
void destroySurfaceLocked() {
final AppWindowToken wtoken = mWin.mAppToken;
if (wtoken != null) {
- wtoken.mHasSavedSurface = false;
wtoken.mAnimatingWithSavedSurface = false;
if (mWin == wtoken.startingWindow) {
wtoken.startingDisplayed = false;
}
}
+ mWin.mSurfaceSaved = false;
+
if (mSurfaceController != null) {
int i = mWin.mChildWindows.size();
// When destroying a surface we want to make sure child windows
@@ -749,7 +763,7 @@
try {
if (DEBUG_VISIBILITY) {
RuntimeException e = null;
- if (!WindowManagerService.HIDE_STACK_CRAWLS) {
+ if (!HIDE_STACK_CRAWLS) {
e = new RuntimeException();
e.fillInStackTrace();
}
@@ -761,7 +775,7 @@
if (mPendingDestroySurface != null) {
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) {
RuntimeException e = null;
- if (!WindowManagerService.HIDE_STACK_CRAWLS) {
+ if (!HIDE_STACK_CRAWLS) {
e = new RuntimeException();
e.fillInStackTrace();
}
@@ -774,7 +788,7 @@
} else {
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) {
RuntimeException e = null;
- if (!WindowManagerService.HIDE_STACK_CRAWLS) {
+ if (!HIDE_STACK_CRAWLS) {
e = new RuntimeException();
e.fillInStackTrace();
}
@@ -810,7 +824,7 @@
if (mPendingDestroySurface != null) {
if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) {
RuntimeException e = null;
- if (!WindowManagerService.HIDE_STACK_CRAWLS) {
+ if (!HIDE_STACK_CRAWLS) {
e = new RuntimeException();
e.fillInStackTrace();
}
@@ -849,7 +863,7 @@
wallpaperAnimator.mAnimation != null &&
!wallpaperAnimator.mAnimation.getDetachWallpaper()) {
attachedTransformation = wallpaperAnimator.mTransformation;
- if (WindowManagerService.DEBUG_WALLPAPER && attachedTransformation != null) {
+ if (DEBUG_WALLPAPER && attachedTransformation != null) {
Slog.v(TAG, "WP target attached xform: " + attachedTransformation);
}
}
@@ -859,7 +873,7 @@
&& wpAppAnimator.animation != null
&& !wpAppAnimator.animation.getDetachWallpaper()) {
appTransformation = wpAppAnimator.transformation;
- if (WindowManagerService.DEBUG_WALLPAPER && appTransformation != null) {
+ if (DEBUG_WALLPAPER && appTransformation != null) {
Slog.v(TAG, "WP target app xform: " + appTransformation);
}
}
@@ -930,7 +944,7 @@
// (a 2x2 matrix + an offset)
// Here we must not transform the position of the surface
// since it is already included in the transformation.
- //Slog.i(TAG, "Transform: " + matrix);
+ //Slog.i(TAG_WM, "Transform: " + matrix);
mHaveMatrix = true;
tmpMatrix.getValues(tmpFloats);
@@ -952,7 +966,7 @@
|| (!PixelFormat.formatHasAlpha(mWin.mAttrs.format)
|| (mWin.isIdentityMatrix(mDsDx, mDtDx, mDsDy, mDtDy)
&& x == frame.left && y == frame.top))) {
- //Slog.i(TAG, "Applying alpha transform");
+ //Slog.i(TAG_WM, "Applying alpha transform");
if (selfTransformation) {
mShownAlpha *= mTransformation.getAlpha();
}
@@ -970,7 +984,7 @@
mShownAlpha *= screenRotationAnimation.getEnterTransformation().getAlpha();
}
} else {
- //Slog.i(TAG, "Not applying alpha transform");
+ //Slog.i(TAG_WM, "Not applying alpha transform");
}
if ((DEBUG_SURFACE_TRACE || WindowManagerService.localLOGV)
@@ -1042,8 +1056,9 @@
}
}
- private void applyDecorRect(final Rect decorRect) {
+ private void calculateSystemDecorRect() {
final WindowState w = mWin;
+ final Rect decorRect = w.mDecorFrame;
final int width = w.mFrame.width();
final int height = w.mFrame.height();
@@ -1052,11 +1067,17 @@
final int top = w.mYOffset + w.mFrame.top;
// Initialize the decor rect to the entire frame.
- w.mSystemDecorRect.set(0, 0, width, height);
+ mSystemDecorRect.set(0, 0, width, height);
- // Intersect with the decor rect, offsetted by window position.
- w.mSystemDecorRect.intersect(decorRect.left - left, decorRect.top - top,
- decorRect.right - left, decorRect.bottom - top);
+ // If a freeform window is animating from a position where it would be cutoff, it would be
+ // cutoff during the animation. We don't want that, so for the duration of the animation
+ // we ignore the decor cropping and depend on layering to position windows correctly.
+ final boolean cropToDecor = !(w.inFreeformWorkspace() && w.isAnimatingLw());
+ if (cropToDecor) {
+ // Intersect with the decor rect, offsetted by window position.
+ mSystemDecorRect.intersect(decorRect.left - left, decorRect.top - top,
+ decorRect.right - left, decorRect.bottom - top);
+ }
// If size compatibility is being applied to the window, the
// surface is scaled relative to the screen. Also apply this
@@ -1066,10 +1087,10 @@
// much and hide part of the window that should be seen.
if (w.mEnforceSizeCompat && w.mInvGlobalScale != 1.0f) {
final float scale = w.mInvGlobalScale;
- w.mSystemDecorRect.left = (int) (w.mSystemDecorRect.left * scale - 0.5f);
- w.mSystemDecorRect.top = (int) (w.mSystemDecorRect.top * scale - 0.5f);
- w.mSystemDecorRect.right = (int) ((w.mSystemDecorRect.right+1) * scale - 0.5f);
- w.mSystemDecorRect.bottom = (int) ((w.mSystemDecorRect.bottom+1) * scale - 0.5f);
+ mSystemDecorRect.left = (int) (mSystemDecorRect.left * scale - 0.5f);
+ mSystemDecorRect.top = (int) (mSystemDecorRect.top * scale - 0.5f);
+ mSystemDecorRect.right = (int) ((mSystemDecorRect.right+1) * scale - 0.5f);
+ mSystemDecorRect.bottom = (int) ((mSystemDecorRect.bottom+1) * scale - 0.5f);
}
}
@@ -1080,30 +1101,34 @@
return;
}
final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+ if (DEBUG_WINDOW_CROP) Slog.d(TAG, "Updating crop for window: " + w + ", " + "mLastCrop=" +
+ mLastClipRect);
// Need to recompute a new system decor rect each time.
if (!w.isDefaultDisplay()) {
// On a different display there is no system decor. Crop the window
// by the screen boundaries.
- w.mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
- w.mSystemDecorRect.intersect(-w.mCompatFrame.left, -w.mCompatFrame.top,
+ mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
+ mSystemDecorRect.intersect(-w.mCompatFrame.left, -w.mCompatFrame.top,
displayInfo.logicalWidth - w.mCompatFrame.left,
displayInfo.logicalHeight - w.mCompatFrame.top);
} else if (w.mLayer >= mService.mSystemDecorLayer) {
// Above the decor layer is easy, just use the entire window.
- w.mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
+ mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
} else if (w.mDecorFrame.isEmpty()) {
// Windows without policy decor aren't cropped.
- w.mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
+ mSystemDecorRect.set(0, 0, w.mCompatFrame.width(), w.mCompatFrame.height());
} else if (w.mAttrs.type == LayoutParams.TYPE_WALLPAPER && mAnimator.isAnimating()) {
// If we're animating, the wallpaper crop should only be updated at the end of the
// animation.
- mTmpClipRect.set(w.mSystemDecorRect);
- applyDecorRect(w.mDecorFrame);
- w.mSystemDecorRect.union(mTmpClipRect);
+ mTmpClipRect.set(mSystemDecorRect);
+ calculateSystemDecorRect();
+ mSystemDecorRect.union(mTmpClipRect);
} else {
// Crop to the system decor specified by policy.
- applyDecorRect(w.mDecorFrame);
+ calculateSystemDecorRect();
+ if (DEBUG_WINDOW_CROP) Slog.d(TAG, "Applying decor to crop for " + w + ", mDecorFrame="
+ + w.mDecorFrame + ", mSystemDecorRect=" + mSystemDecorRect);
}
final boolean fullscreen = w.isFrameFullscreen(displayInfo);
@@ -1117,7 +1142,9 @@
} else {
// We use the clip rect as provided by the tranformation for non-fullscreen windows to
// avoid premature clipping with the system decor rect.
- clipRect.set((mHasClipRect && !fullscreen) ? mClipRect : w.mSystemDecorRect);
+ clipRect.set((mHasClipRect && !fullscreen) ? mClipRect : mSystemDecorRect);
+ if (DEBUG_WINDOW_CROP) Slog.d(TAG, "Initial clip rect: " + clipRect + ", mHasClipRect="
+ + mHasClipRect + ", fullscreen=" + fullscreen);
}
// Expand the clip rect for surface insets.
final WindowManager.LayoutParams attrs = w.mAttrs;
@@ -1137,6 +1164,7 @@
clipRect.offset(attrs.surfaceInsets.left, attrs.surfaceInsets.top);
adjustCropToStackBounds(w, clipRect, isFreeformResizing);
+ if (DEBUG_WINDOW_CROP) Slog.d(TAG, "Clip rect after stack adjustment=" + mClipRect);
w.transformFromScreenToSurfaceSpace(clipRect);
@@ -1154,13 +1182,14 @@
}
// We don't apply the stack bounds crop if:
- // 1. The window is currently animating docked mode, otherwise the animating window will be
- // suddenly cut off.
+ // 1. The window is currently animating docked mode or in freeform mode, otherwise the
+ // animating window will be suddenly (docked) or for whole animation (freeform) cut off.
// 2. The window that is being replaced during animation, because it was living in a
// different stack. If we suddenly crop it to the new stack bounds, it might get cut off.
// We don't want it to happen, so we let it ignore the stack bounds until it gets removed.
// The window that will replace it will abide them.
- if (isAnimating() && (appToken.mWillReplaceWindow || w.inDockedWorkspace())) {
+ if (isAnimating() && (appToken.mWillReplaceWindow || w.inDockedWorkspace()
+ || w.inFreeformWorkspace())) {
return;
}
@@ -1262,7 +1291,7 @@
mLastDtDy = mDtDy;
w.mLastHScale = w.mHScale;
w.mLastVScale = w.mVScale;
- if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
+ if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
"controller=" + mSurfaceController +
"alpha=" + mShownAlpha + " layer=" + mAnimLayer
+ " matrix=[" + mDsDx + "*" + w.mHScale
@@ -1460,10 +1489,8 @@
mWin.mAppToken.removeAllDeadWindows();
if (mWin.mAppToken.startingData != null) {
- if (WindowManagerService.DEBUG_STARTING_WINDOW ||
- WindowManagerService.DEBUG_ANIM) Slog.v(TAG,
- "Finish starting " + mWin.mToken
- + ": first real window is shown, no animation");
+ if (DEBUG_STARTING_WINDOW || DEBUG_ANIM) Slog.v(TAG, "Finish starting "
+ + mWin.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
@@ -1574,16 +1601,16 @@
a = mService.mAppTransition.loadAnimationAttr(mWin.mAttrs, attr);
}
}
- if (WindowManagerService.DEBUG_ANIM) Slog.v(TAG,
+ if (DEBUG_ANIM) Slog.v(TAG,
"applyAnimation: win=" + this
+ " anim=" + anim + " attr=0x" + Integer.toHexString(attr)
+ " a=" + a
+ " transit=" + transit
+ " isEntrance=" + isEntrance + " Callers " + Debug.getCallers(3));
if (a != null) {
- if (WindowManagerService.DEBUG_ANIM) {
+ if (DEBUG_ANIM) {
RuntimeException e = null;
- if (!WindowManagerService.HIDE_STACK_CRAWLS) {
+ if (!HIDE_STACK_CRAWLS) {
e = new RuntimeException();
e.fillInStackTrace();
}
@@ -1642,6 +1669,12 @@
if (dumpAll) {
pw.print(prefix); pw.print("mDrawState="); pw.print(drawStateToString());
pw.print(prefix); pw.print(" mLastHidden="); pw.println(mLastHidden);
+ pw.print(prefix); pw.print("mSystemDecorRect="); mSystemDecorRect.printShortString(pw);
+ pw.print(" last="); mLastSystemDecorRect.printShortString(pw);
+ if (mHasClipRect) {
+ pw.print(" mLastClipRect="); mLastClipRect.printShortString(pw);
+ }
+ pw.println();
}
if (mPendingDestroySurface != null) {
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index f8b8d6c..bd2912d 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -16,12 +16,14 @@
package com.android.server.wm;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerService.SHOW_SURFACE_ALLOC;
-import static com.android.server.wm.WindowManagerService.DEBUG_SURFACE_TRACE;
-import static com.android.server.wm.WindowManagerService.HIDE_STACK_CRAWLS;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_SURFACE_ALLOC;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SURFACE_TRACE;
+import static com.android.server.wm.WindowManagerDebugConfig.HIDE_STACK_CRAWLS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import android.graphics.Point;
import android.graphics.PointF;
@@ -41,7 +43,7 @@
import java.util.ArrayList;
class WindowSurfaceController {
- static final String TAG = "WindowSurfaceController";
+ static final String TAG = TAG_WITH_CLASS_NAME ? "WindowSurfaceController" : TAG_WM;
final WindowStateAnimator mAnimator;
@@ -392,7 +394,7 @@
}
static class SurfaceTrace extends SurfaceControl {
- private final static String SURFACE_TAG = "SurfaceTrace";
+ private final static String SURFACE_TAG = TAG_WITH_CLASS_NAME ? "SurfaceTrace" : TAG_WM;
private final static boolean LOG_SURFACE_TRACE = DEBUG_SURFACE_TRACE;
final static ArrayList<SurfaceTrace> sSurfaces = new ArrayList<SurfaceTrace>();
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 2149019..50bdf25 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -15,24 +15,24 @@
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_CONFIG;
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-import static com.android.server.wm.WindowManagerService.DEBUG;
-import static com.android.server.wm.WindowManagerService.DEBUG_ADD_REMOVE;
-import static com.android.server.wm.WindowManagerService.DEBUG_APP_TRANSITIONS;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT;
-import static com.android.server.wm.WindowManagerService.DEBUG_LAYOUT_REPEATS;
-import static com.android.server.wm.WindowManagerService.DEBUG_ORIENTATION;
-import static com.android.server.wm.WindowManagerService.DEBUG_POWER;
-import static com.android.server.wm.WindowManagerService.DEBUG_STARTING_WINDOW;
-import static com.android.server.wm.WindowManagerService.DEBUG_TOKEN_MOVEMENT;
-import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
-import static com.android.server.wm.WindowManagerService.DEBUG_WALLPAPER_LIGHT;
-import static com.android.server.wm.WindowManagerService.DEBUG_WINDOW_TRACE;
+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_APP_TRANSITIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT_REPEATS;
+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_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.DEBUG_WALLPAPER_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_TRACE;
import static com.android.server.wm.WindowManagerService.H.*;
import static com.android.server.wm.WindowManagerService.LAYOUT_REPEAT_THRESHOLD;
import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
-import static com.android.server.wm.WindowManagerService.SHOW_LIGHT_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
-import static com.android.server.wm.WindowManagerService.TAG;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_PLACING_SURFACES;
import static com.android.server.wm.WindowManagerService.UPDATE_FOCUS_WILL_PLACE_SURFACES;
import static com.android.server.wm.WindowManagerService.WINDOWS_FREEZING_SCREENS_NONE;
@@ -54,7 +54,7 @@
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.View;
-import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
import android.view.animation.Animation;
import java.io.PrintWriter;
@@ -112,6 +112,12 @@
private boolean mTraversalScheduled;
private int mDeferDepth = 0;
+ private static final class LayerAndToken {
+ public int layer;
+ public AppWindowToken token;
+ }
+ private final LayerAndToken mTmpLayerAndToken = new LayerAndToken();
+
public WindowSurfacePlacer(WindowManagerService service) {
mService = service;
mWallpaperControllerLocked = mService.mWallpaperControllerLocked;
@@ -153,7 +159,7 @@
if (DEBUG) {
throw new RuntimeException("Recursive call!");
}
- Slog.w(TAG, "performLayoutAndPlaceSurfacesLocked called while in layout. Callers="
+ Slog.w(TAG_WM, "performLayoutAndPlaceSurfacesLocked called while in layout. Callers="
+ Debug.getCallers(3));
return;
}
@@ -179,10 +185,10 @@
// Wait a little bit for things to settle down, and off we go.
while (!mService.mForceRemoves.isEmpty()) {
WindowState ws = mService.mForceRemoves.remove(0);
- Slog.i(TAG, "Force removing: " + ws);
+ Slog.i(TAG_WM, "Force removing: " + ws);
mService.removeWindowInnerLocked(ws);
}
- Slog.w(TAG,
+ Slog.w(TAG_WM,
"Due to memory failure, waiting a bit for next layout");
Object tmp = new Object();
synchronized (tmp) {
@@ -202,7 +208,7 @@
if (++mLayoutRepeatCount < 6) {
requestTraversal();
} else {
- Slog.e(TAG, "Performed 6 layouts in a row. Skipping");
+ Slog.e(TAG_WM, "Performed 6 layouts in a row. Skipping");
mLayoutRepeatCount = 0;
}
} else {
@@ -215,7 +221,7 @@
}
} catch (RuntimeException e) {
mInLayout = false;
- Slog.wtf(TAG, "Unhandled exception while laying out windows", e);
+ Slog.wtf(TAG_WM, "Unhandled exception while laying out windows", e);
}
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
@@ -223,7 +229,7 @@
void debugLayoutRepeats(final String msg, int pendingLayoutChanges) {
if (mLayoutRepeatCount >= LAYOUT_REPEAT_THRESHOLD) {
- Slog.v(TAG, "Layouts looping: " + msg +
+ Slog.v(TAG_WM, "Layouts looping: " + msg +
", mPendingLayoutChanges = 0x" + Integer.toHexString(pendingLayoutChanges));
}
}
@@ -231,7 +237,7 @@
// "Something has changed! Let's make it correct now."
private void performSurfacePlacementInner(boolean recoveringMemory) {
if (DEBUG_WINDOW_TRACE) {
- Slog.v(TAG,
+ Slog.v(TAG_WM,
"performSurfacePlacementInner: entry. Called by "
+ Debug.getCallers(3));
}
@@ -276,16 +282,16 @@
final int defaultDw = defaultInfo.logicalWidth;
final int defaultDh = defaultInfo.logicalHeight;
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
">>> OPEN TRANSACTION performLayoutAndPlaceSurfaces");
SurfaceControl.openTransaction();
try {
applySurfaceChangesTransaction(recoveringMemory, numDisplays, defaultDw, defaultDh);
} catch (RuntimeException e) {
- Slog.wtf(TAG, "Unhandled exception in Window Manager", e);
+ Slog.wtf(TAG_WM, "Unhandled exception in Window Manager", e);
} finally {
SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
"<<< CLOSE TRANSACTION performLayoutAndPlaceSurfaces");
}
@@ -332,7 +338,7 @@
if (mWallpaperMayChange) {
if (DEBUG_WALLPAPER_LIGHT)
- Slog.v(TAG, "Wallpaper may change! Adjusting");
+ Slog.v(TAG_WM, "Wallpaper may change! Adjusting");
defaultDisplay.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
if (DEBUG_LAYOUT_REPEATS) debugLayoutRepeats("WallpaperMayChange",
defaultDisplay.pendingLayoutChanges);
@@ -368,7 +374,7 @@
}
if (DEBUG_ORIENTATION && mService.mDisplayFrozen)
- Slog.v(TAG,
+ Slog.v(TAG_WM,
"With display frozen, orientationChangeComplete="
+ mOrientationChangeComplete);
if (mOrientationChangeComplete) {
@@ -394,9 +400,7 @@
if (mWallpaperControllerLocked.isWallpaperTarget(win)) {
wallpaperDestroyed = true;
}
- if (!win.shouldSaveSurface()) {
- win.mWinAnimator.destroySurfaceLocked();
- }
+ win.destroyOrSaveSurface();
} while (i > 0);
mService.mDestroySurface.clear();
}
@@ -431,7 +435,7 @@
token.mAppAnimator.clearAnimation();
token.mAppAnimator.animating = false;
if (DEBUG_ADD_REMOVE || DEBUG_TOKEN_MOVEMENT)
- Slog.v(TAG,
+ Slog.v(TAG_WM,
"performLayout: App token exiting now removed" + token);
token.removeAppFromTaskLocked();
}
@@ -477,7 +481,7 @@
|| Settings.Global.getInt(mService.mContext.getContentResolver(),
Settings.Global.THEATER_MODE_ON, 0) == 0) {
if (DEBUG_VISIBILITY || DEBUG_POWER) {
- Slog.v(TAG, "Turning screen on after layout!");
+ Slog.v(TAG_WM, "Turning screen on after layout!");
}
mService.mPowerManager.wakeUp(SystemClock.uptimeMillis(),
"android.server.wm:TURN_ON");
@@ -486,7 +490,7 @@
}
if (mUpdateRotation) {
- if (DEBUG_ORIENTATION) Slog.d(TAG,
+ if (DEBUG_ORIENTATION) Slog.d(TAG_WM,
"Performing post-rotate rotation");
if (mService.updateRotationUncheckedLocked(false)) {
mService.mH.sendEmptyMessage(SEND_NEW_CONFIGURATION);
@@ -540,7 +544,7 @@
mService.scheduleAnimationLocked();
- if (DEBUG_WINDOW_TRACE) Slog.e(TAG,
+ if (DEBUG_WINDOW_TRACE) Slog.e(TAG_WM,
"performSurfacePlacementInner exit: animating=" + mService.mAnimator.isAnimating());
}
@@ -584,7 +588,7 @@
do {
repeats++;
if (repeats > 6) {
- Slog.w(TAG, "Animation repeat aborted after too many iterations");
+ Slog.w(TAG_WM, "Animation repeat aborted after too many iterations");
displayContent.layoutNeeded = false;
break;
}
@@ -600,7 +604,7 @@
if (isDefaultDisplay
&& (displayContent.pendingLayoutChanges & FINISH_LAYOUT_REDO_CONFIG) != 0) {
- if (DEBUG_LAYOUT) Slog.v(TAG, "Computing new config from layout");
+ if (DEBUG_LAYOUT) Slog.v(TAG_WM, "Computing new config from layout");
if (mService.updateOrientationFromAppTokensLocked(true)) {
displayContent.layoutNeeded = true;
mService.mH.sendEmptyMessage(SEND_NEW_CONFIGURATION);
@@ -616,7 +620,7 @@
performLayoutLockedInner(displayContent, repeats == 1,
false /* updateInputWindows */);
} else {
- Slog.w(TAG, "Layout repeat skipped after too many iterations");
+ Slog.w(TAG_WM, "Layout repeat skipped after too many iterations");
}
// FIRST AND ONE HALF LOOP: Make WindowManagerPolicy think
@@ -702,7 +706,7 @@
}
}
- //Slog.i(TAG, "Window " + this + " clearing mContentChanged - done placing");
+ //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - done placing");
w.mContentChanged = false;
// Moved from updateWindowsAndWallpaperLocked().
@@ -724,7 +728,7 @@
}
if ((w.mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
if (DEBUG_WALLPAPER_LIGHT)
- Slog.v(TAG, "First draw done in potential wallpaper target " + w);
+ Slog.v(TAG_WM, "First draw done in potential wallpaper target " + w);
mWallpaperMayChange = true;
displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
if (DEBUG_LAYOUT_REPEATS) {
@@ -745,7 +749,7 @@
final AppWindowToken atoken = w.mAppToken;
if (DEBUG_STARTING_WINDOW && atoken != null && w == atoken.startingWindow) {
- Slog.d(TAG, "updateWindows: starting " + w
+ Slog.d(TAG_WM, "updateWindows: starting " + w
+ " isOnScreen=" + w.isOnScreen() + " allDrawn=" + atoken.allDrawn
+ " freezingScreen=" + atoken.mAppAnimator.freezingScreen);
}
@@ -759,11 +763,11 @@
|| winAnimator.mAttrType == TYPE_BASE_APPLICATION)
&& !w.mExiting && !w.mDestroying) {
if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) {
- Slog.v(TAG, "Eval win " + w + ": isDrawn="
+ Slog.v(TAG_WM, "Eval win " + w + ": isDrawn="
+ w.isDrawnLw()
+ ", isAnimating=" + winAnimator.isAnimating());
if (!w.isDrawnLw()) {
- Slog.v(TAG, "Not displayed: s="
+ Slog.v(TAG_WM, "Not displayed: s="
+ winAnimator.mSurfaceController
+ " pv=" + w.mPolicyVisibility
+ " mDrawState=" + winAnimator.drawStateToString()
@@ -778,7 +782,7 @@
if (w.isDrawnLw()) {
atoken.numDrawnWindows++;
if (DEBUG_VISIBILITY || DEBUG_ORIENTATION)
- Slog.v(TAG, "tokenMayBeDrawn: " + atoken
+ Slog.v(TAG_WM, "tokenMayBeDrawn: " + atoken
+ " freezingScreen="
+ atoken.mAppAnimator.freezingScreen
+ " mAppFreezing=" + w.mAppFreezing);
@@ -846,8 +850,8 @@
int i;
if (DEBUG_LAYOUT) {
- Slog.v(TAG, "-------------------------------------");
- Slog.v(TAG, "performLayout: needed="
+ Slog.v(TAG_WM, "-------------------------------------");
+ Slog.v(TAG_WM, "performLayout: needed="
+ displayContent.layoutNeeded + " dw=" + dw + " dh=" + dh);
}
@@ -880,18 +884,18 @@
|| win.isGoneForLayoutLw();
if (DEBUG_LAYOUT && !win.mLayoutAttached) {
- Slog.v(TAG, "1ST PASS " + win
+ Slog.v(TAG_WM, "1ST PASS " + win
+ ": gone=" + gone + " mHaveFrame=" + win.mHaveFrame
+ " mLayoutAttached=" + win.mLayoutAttached
+ " screen changed=" + win.isConfigChanged());
final AppWindowToken atoken = win.mAppToken;
- if (gone) Slog.v(TAG, " GONE: mViewVisibility="
+ if (gone) Slog.v(TAG_WM, " GONE: mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled="
+ win.mRelayoutCalled + " hidden="
+ win.mRootToken.hidden + " hiddenRequested="
+ (atoken != null && atoken.hiddenRequested)
+ " mAttachedHidden=" + win.mAttachedHidden);
- else Slog.v(TAG, " VIS: mViewVisibility="
+ else Slog.v(TAG_WM, " VIS: mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled="
+ win.mRelayoutCalled + " hidden="
+ win.mRootToken.hidden + " hiddenRequested="
@@ -911,7 +915,7 @@
win.mAppToken.layoutConfigChanges)))) {
if (!win.mLayoutAttached) {
if (initial) {
- //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
+ //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - initial");
win.mContentChanged = false;
}
if (win.mAttrs.type == TYPE_DREAM) {
@@ -931,7 +935,7 @@
displayContent.mDimLayerController.updateDimLayer(task);
}
- if (DEBUG_LAYOUT) Slog.v(TAG,
+ if (DEBUG_LAYOUT) Slog.v(TAG_WM,
" LAYOUT: mFrame="
+ win.mFrame + " mContainingFrame="
+ win.mContainingFrame + " mDisplayFrame="
@@ -952,7 +956,7 @@
final WindowState win = windows.get(i);
if (win.mLayoutAttached) {
- if (DEBUG_LAYOUT) Slog.v(TAG,
+ if (DEBUG_LAYOUT) Slog.v(TAG_WM,
"2ND PASS " + win + " mHaveFrame=" + win.mHaveFrame + " mViewVisibility="
+ win.mViewVisibility + " mRelayoutCalled=" + win.mRelayoutCalled);
// If this view is GONE, then skip it -- keep the current
@@ -966,14 +970,14 @@
if ((win.mViewVisibility != View.GONE && win.mRelayoutCalled)
|| !win.mHaveFrame || win.mLayoutNeeded) {
if (initial) {
- //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
+ //Slog.i(TAG_WM, "Window " + this + " clearing mContentChanged - initial");
win.mContentChanged = false;
}
win.mLayoutNeeded = false;
win.prelayout();
mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow);
win.mLayoutSeq = seq;
- if (DEBUG_LAYOUT) Slog.v(TAG,
+ if (DEBUG_LAYOUT) Slog.v(TAG_WM,
" LAYOUT: mFrame=" + win.mFrame + " mContainingFrame="
+ win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame);
}
@@ -1004,7 +1008,7 @@
if (!transitionGoodToGo(appsCount)) {
return 0;
}
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO");
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "**** GOOD TO GO");
int transit = mService.mAppTransition.getAppTransition();
if (mService.mSkipAppTransitionAnimation) {
transit = AppTransition.TRANSIT_UNSET;
@@ -1020,7 +1024,7 @@
// The top-most window will supply the layout params,
// and we will determine it below.
- WindowManager.LayoutParams animLp = null;
+ LayoutParams animLp = null;
int bestAnimLayer = -1;
boolean fullscreenAnim = false;
boolean voiceInteraction = false;
@@ -1096,21 +1100,127 @@
// example, when this transition is being done behind
// the lock screen.
if (!mService.mPolicy.allowAppAnimationsLw()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"Animations disallowed by keyguard or dream.");
animLp = null;
}
processApplicationsAnimatingInPlace(transit);
- AppWindowToken topClosingApp = null;
- int topClosingLayer = 0;
+ handleClosingApps(transit, animLp, voiceInteraction, mTmpLayerAndToken);
+ final AppWindowToken topClosingApp = mTmpLayerAndToken.token;
+ final int topClosingLayer = mTmpLayerAndToken.layer;
+
+ final AppWindowToken topOpeningApp = handleOpeningApps(transit,
+ animLp, voiceInteraction, topClosingLayer);
+
+ final AppWindowAnimator openingAppAnimator = (topOpeningApp == null) ? null :
+ topOpeningApp.mAppAnimator;
+ final AppWindowAnimator closingAppAnimator = (topClosingApp == null) ? null :
+ topClosingApp.mAppAnimator;
+
+ mService.mAppTransition.goodToGo(openingAppAnimator, closingAppAnimator);
+ mService.mAppTransition.postAnimationCallback();
+ mService.mAppTransition.clear();
+
+ mService.mOpeningApps.clear();
+ mService.mClosingApps.clear();
+
+ // This has changed the visibility of windows, so perform
+ // a new layout to get them all up-to-date.
+ mService.getDefaultDisplayContentLocked().layoutNeeded = true;
+
+ // TODO(multidisplay): IMEs are only supported on the default display.
+ if (windows == mService.getDefaultWindowListLocked()
+ && !mService.moveInputMethodWindowsIfNeededLocked(true)) {
+ mService.assignLayersLocked(windows);
+ }
+ mService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+ true /*updateInputWindows*/);
+ mService.mFocusMayChange = false;
+ mService.notifyActivityDrawnForKeyguard();
+ return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_CONFIG;
+ }
+
+ private AppWindowToken handleOpeningApps(int transit, LayoutParams animLp,
+ boolean voiceInteraction, int topClosingLayer) {
+ AppWindowToken topOpeningApp = null;
+ final int appsCount = mService.mOpeningApps.size();
+ for (int i = 0; i < appsCount; i++) {
+ AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
+ final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Now opening app" + wtoken);
+
+ if (!appAnimator.usingTransferredAnimation) {
+ appAnimator.clearThumbnail();
+ appAnimator.animation = null;
+ }
+ wtoken.inPendingTransaction = false;
+ if (!mService.setTokenVisibilityLocked(
+ wtoken, animLp, true, transit, false, voiceInteraction)){
+ // This token isn't going to be animating. Add it to the list of tokens to
+ // be notified of app transition complete since the notification will not be
+ // sent be the app window animator.
+ mService.mNoAnimationNotifyOnTransitionFinished.add(wtoken.token);
+ }
+ wtoken.updateReportedVisibilityLocked();
+ wtoken.waitingToShow = false;
+
+ appAnimator.mAllAppWinAnimators.clear();
+ final int windowsCount = wtoken.allAppWindows.size();
+ for (int j = 0; j < windowsCount; j++) {
+ appAnimator.mAllAppWinAnimators.add(wtoken.allAppWindows.get(j).mWinAnimator);
+ }
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ ">>> OPEN TRANSACTION handleAppTransitionReadyLocked()");
+ SurfaceControl.openTransaction();
+ try {
+ mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked());
+ } finally {
+ SurfaceControl.closeTransaction();
+ if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG_WM,
+ "<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()");
+ }
+ mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
+
+ int topOpeningLayer = 0;
+ if (animLp != null) {
+ int layer = -1;
+ for (int j = 0; j < wtoken.windows.size(); j++) {
+ final WindowState win = wtoken.windows.get(j);
+ // Clearing the mExiting flag before entering animation. It will be set to true
+ // if app window is removed, or window relayout to invisible. We don't want to
+ // clear it out for windows that get replaced, because the animation depends on
+ // the flag to remove the replaced window.
+ if (win.mAppToken == null || !win.mAppToken.mWillReplaceWindow) {
+ win.mExiting = false;
+ }
+ if (win.mWinAnimator.mAnimLayer > layer) {
+ layer = win.mWinAnimator.mAnimLayer;
+ }
+ }
+ if (topOpeningApp == null || layer > topOpeningLayer) {
+ topOpeningApp = wtoken;
+ topOpeningLayer = layer;
+ }
+ }
+ if (mService.mAppTransition.isNextAppTransitionThumbnailUp()) {
+ createThumbnailAppAnimator(transit, wtoken, topOpeningLayer, topClosingLayer);
+ }
+
+ wtoken.restoreSavedSurfaces();
+ }
+ return topOpeningApp;
+ }
+
+ private void handleClosingApps(int transit, LayoutParams animLp, boolean voiceInteraction,
+ LayerAndToken layerAndToken) {
+ final int appsCount;
appsCount = mService.mClosingApps.size();
- for (i = 0; i < appsCount; i++) {
+ for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mClosingApps.valueAt(i);
final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "Now closing app " + wtoken);
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "Now closing app " + wtoken);
appAnimator.clearThumbnail();
appAnimator.animation = null;
wtoken.inPendingTransaction = false;
@@ -1137,122 +1247,32 @@
layer = win.mWinAnimator.mAnimLayer;
}
}
- if (topClosingApp == null || layer > topClosingLayer) {
- topClosingApp = wtoken;
- topClosingLayer = layer;
+ if (layerAndToken.token == null || layer > layerAndToken.layer) {
+ layerAndToken.token = wtoken;
+ layerAndToken.layer = layer;
}
}
+ if (mService.mAppTransition.isNextAppTransitionThumbnailDown()) {
+ createThumbnailAppAnimator(transit, wtoken, 0, layerAndToken.layer);
+ }
}
-
- AppWindowToken topOpeningApp = null;
- appsCount = mService.mOpeningApps.size();
- for (i = 0; i < appsCount; i++) {
- AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
- "Now opening app" + wtoken);
-
- if (!appAnimator.usingTransferredAnimation) {
- appAnimator.clearThumbnail();
- appAnimator.animation = null;
- }
- wtoken.inPendingTransaction = false;
- if (!mService.setTokenVisibilityLocked(
- wtoken, animLp, true, transit, false, voiceInteraction)){
- // This token isn't going to be animating. Add it to the list of tokens to
- // be notified of app transition complete since the notification will not be
- // sent be the app window animator.
- mService.mNoAnimationNotifyOnTransitionFinished.add(wtoken.token);
- }
- wtoken.updateReportedVisibilityLocked();
- wtoken.waitingToShow = false;
-
- appAnimator.mAllAppWinAnimators.clear();
- final int windowsCount = wtoken.allAppWindows.size();
- for (int j = 0; j < windowsCount; j++) {
- appAnimator.mAllAppWinAnimators.add(wtoken.allAppWindows.get(j).mWinAnimator);
- }
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- ">>> OPEN TRANSACTION handleAppTransitionReadyLocked()");
- SurfaceControl.openTransaction();
- try {
- mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked());
- } finally {
- SurfaceControl.closeTransaction();
- if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
- "<<< CLOSE TRANSACTION handleAppTransitionReadyLocked()");
- }
- mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
-
- int topOpeningLayer = 0;
- if (animLp != null) {
- int layer = -1;
- for (int j = 0; j < wtoken.windows.size(); j++) {
- final WindowState win = wtoken.windows.get(j);
- // Clearing the mExiting flag before entering animation. It will be set to true
- // if app window is removed, or window relayout to invisible. We don't want to
- // clear it out for windows that get replaced, because the animation depends on
- // the flag to remove the replaced window.
- if (win.mAppToken == null || !win.mAppToken.mWillReplaceWindow) {
- win.mExiting = false;
- }
- if (win.mWinAnimator.mAnimLayer > layer) {
- layer = win.mWinAnimator.mAnimLayer;
- }
- }
- if (topOpeningApp == null || layer > topOpeningLayer) {
- topOpeningApp = wtoken;
- topOpeningLayer = layer;
- }
- }
- createThumbnailAppAnimator(transit, wtoken, topOpeningLayer, topClosingLayer);
-
- wtoken.restoreSavedSurfaces();
- }
-
- AppWindowAnimator openingAppAnimator = (topOpeningApp == null) ? null :
- topOpeningApp.mAppAnimator;
- AppWindowAnimator closingAppAnimator = (topClosingApp == null) ? null :
- topClosingApp.mAppAnimator;
-
- mService.mAppTransition.goodToGo(openingAppAnimator, closingAppAnimator);
- mService.mAppTransition.postAnimationCallback();
- mService.mAppTransition.clear();
-
- mService.mOpeningApps.clear();
- mService.mClosingApps.clear();
-
- // This has changed the visibility of windows, so perform
- // a new layout to get them all up-to-date.
- mService.getDefaultDisplayContentLocked().layoutNeeded = true;
-
- // TODO(multidisplay): IMEs are only supported on the default display.
- if (windows == mService.getDefaultWindowListLocked()
- && !mService.moveInputMethodWindowsIfNeededLocked(true)) {
- mService.assignLayersLocked(windows);
- }
- mService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
- true /*updateInputWindows*/);
- mService.mFocusMayChange = false;
- mService.notifyActivityDrawnForKeyguard();
- return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_CONFIG;
}
private boolean transitionGoodToGo(int appsCount) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"Checking " + appsCount + " opening apps (frozen="
+ mService.mDisplayFrozen + " timeout="
+ mService.mAppTransition.isTimeout() + ")...");
if (!mService.mAppTransition.isTimeout()) {
for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"Check opening app=" + wtoken + ": allDrawn="
+ wtoken.allDrawn + " startingDisplayed="
+ wtoken.startingDisplayed + " startingMoved="
+ wtoken.startingMoved);
- if (wtoken.mHasSavedSurface || wtoken.mAnimatingWithSavedSurface) {
+ if (wtoken.hasSavedSurface() || wtoken.mAnimatingWithSavedSurface) {
continue;
}
if (!wtoken.allDrawn && !wtoken.startingDisplayed && !wtoken.startingMoved) {
@@ -1262,7 +1282,7 @@
// We also need to wait for the specs to be fetched, if needed.
if (mService.mAppTransition.isFetchingAppTransitionsSpecs()) {
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "isFetchingAppTransitionSpecs=true");
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "isFetchingAppTransitionSpecs=true");
return false;
}
@@ -1283,7 +1303,7 @@
? null : wallpaperTarget;
final ArraySet<AppWindowToken> openingApps = mService.mOpeningApps;
final ArraySet<AppWindowToken> closingApps = mService.mClosingApps;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"New wallpaper target=" + wallpaperTarget
+ ", oldWallpaper=" + oldWallpaper
+ ", lower target=" + lowerWallpaperTarget
@@ -1293,7 +1313,7 @@
mService.mAnimateWallpaperWithTarget = false;
if (closingAppHasWallpaper && openingAppHasWallpaper) {
if (DEBUG_APP_TRANSITIONS)
- Slog.v(TAG, "Wallpaper animation!");
+ Slog.v(TAG_WM, "Wallpaper animation!");
switch (transit) {
case AppTransition.TRANSIT_ACTIVITY_OPEN:
case AppTransition.TRANSIT_TASK_OPEN:
@@ -1306,14 +1326,14 @@
transit = AppTransition.TRANSIT_WALLPAPER_INTRA_CLOSE;
break;
}
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"New transit: " + AppTransition.appTransitionToString(transit));
} else if (oldWallpaper != null && !mService.mOpeningApps.isEmpty()
&& !openingApps.contains(oldWallpaper.mAppToken)
&& closingApps.contains(oldWallpaper.mAppToken)) {
// We are transitioning from an activity with a wallpaper to one without.
transit = AppTransition.TRANSIT_WALLPAPER_CLOSE;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"New transit away from wallpaper: "
+ AppTransition.appTransitionToString(transit));
} else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw() &&
@@ -1321,7 +1341,7 @@
// We are transitioning from an activity without
// a wallpaper to now showing the wallpaper
transit = AppTransition.TRANSIT_WALLPAPER_OPEN;
- if (DEBUG_APP_TRANSITIONS) Slog.v(TAG,
+ if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM,
"New transit into wallpaper: "
+ AppTransition.appTransitionToString(transit));
} else {
@@ -1335,7 +1355,7 @@
* @param dispInfo info of the display that the window's obscuring state is checked against.
*/
private void handleNotObscuredLocked(final WindowState w, final DisplayInfo dispInfo) {
- final WindowManager.LayoutParams attrs = w.mAttrs;
+ final LayoutParams attrs = w.mAttrs;
final int attrFlags = attrs.flags;
final boolean canBeSeen = w.isDisplayedLw();
@@ -1416,7 +1436,7 @@
int numInteresting = wtoken.numInterestingWindows;
if (numInteresting > 0 && wtoken.numDrawnWindows >= numInteresting) {
if (DEBUG_VISIBILITY)
- Slog.v(TAG, "allDrawn: " + wtoken
+ Slog.v(TAG_WM, "allDrawn: " + wtoken
+ " interesting=" + numInteresting
+ " drawn=" + wtoken.numDrawnWindows);
wtoken.allDrawn = true;
@@ -1445,7 +1465,7 @@
final AppWindowToken wtoken = win.mAppToken;
final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
if (DEBUG_APP_TRANSITIONS)
- Slog.v(TAG, "Now animating app in place " + wtoken);
+ Slog.v(TAG_WM, "Now animating app in place " + wtoken);
appAnimator.clearThumbnail();
appAnimator.animation = null;
mService.updateTokenInPlaceLocked(wtoken, transit);
@@ -1471,7 +1491,7 @@
final int taskId = appToken.mTask.mTaskId;
Bitmap thumbnailHeader = mService.mAppTransition.getAppTransitionThumbnailHeader(taskId);
if (thumbnailHeader == null || thumbnailHeader.getConfig() == Bitmap.Config.ALPHA_8) {
- if (DEBUG_APP_TRANSITIONS) Slog.d(TAG, "No thumbnail header bitmap for: " + taskId);
+ if (DEBUG_APP_TRANSITIONS) Slog.d(TAG_WM, "No thumbnail header bitmap for: " + taskId);
return;
}
// This thumbnail animation is very special, we need to have
@@ -1489,7 +1509,7 @@
PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN);
surfaceControl.setLayerStack(display.getLayerStack());
if (SHOW_TRANSACTIONS) {
- Slog.i(TAG, " THUMBNAIL " + surfaceControl + ": CREATE");
+ Slog.i(TAG_WM, " THUMBNAIL " + surfaceControl + ": CREATE");
}
// Draw the thumbnail onto the surface
@@ -1532,7 +1552,7 @@
openingAppAnimator.thumbnailX = mTmpStartRect.left;
openingAppAnimator.thumbnailY = mTmpStartRect.top;
} catch (Surface.OutOfResourcesException e) {
- Slog.e(TAG, "Can't allocate thumbnail/Canvas surface w="
+ Slog.e(TAG_WM, "Can't allocate thumbnail/Canvas surface w="
+ dirty.width() + " h=" + dirty.height(), e);
openingAppAnimator.clearThumbnail();
}
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 4ac9135..7894ccf 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -16,6 +16,9 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
+import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
+
import android.os.IBinder;
import android.util.Slog;
@@ -77,8 +80,7 @@
void removeAllWindows() {
for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) {
WindowState win = windows.get(winNdx);
- if (WindowManagerService.DEBUG_WINDOW_MOVEMENT) Slog.w(WindowManagerService.TAG,
- "removeAllWindows: removing win=" + win);
+ if (DEBUG_WINDOW_MOVEMENT) Slog.w(TAG_WM, "removeAllWindows: removing win=" + win);
win.mService.removeWindowLocked(win);
}
windows.clear();
@@ -106,4 +108,4 @@
}
return stringName;
}
-}
\ No newline at end of file
+}
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index b5654ee..9c9a5da 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -205,6 +205,7 @@
void setInteractive(bool interactive);
void reloadCalibration();
void setPointerIconShape(int32_t iconId);
+ void reloadPointerIcons();
/* --- InputReaderPolicyInterface implementation --- */
@@ -242,6 +243,7 @@
/* --- PointerControllerPolicyInterface implementation --- */
+ virtual void loadPointerIcon(SpriteIcon* icon);
virtual void loadPointerResources(PointerResources* outResources);
virtual void loadAdditionalMouseResources(std::map<int32_t, SpriteIcon>* outResources,
std::map<int32_t, PointerAnimation>* outAnimationResources);
@@ -477,22 +479,6 @@
v.logicalBottom - v.logicalTop,
v.orientation);
- JNIEnv* env = jniEnv();
- jobject pointerIconObj = env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getPointerIcon);
- if (!checkAndClearExceptionFromCallback(env, "getPointerIcon")) {
- PointerIcon pointerIcon;
- status_t status = android_view_PointerIcon_load(env, pointerIconObj,
- mContextObj, &pointerIcon);
- if (!status && !pointerIcon.isNullIcon()) {
- controller->setPointerIcon(SpriteIcon(pointerIcon.bitmap,
- pointerIcon.hotSpotX, pointerIcon.hotSpotY));
- } else {
- controller->setPointerIcon(SpriteIcon());
- }
- env->DeleteLocalRef(pointerIconObj);
- }
-
updateInactivityTimeoutLocked(controller);
}
return controller;
@@ -789,12 +775,19 @@
}
void NativeInputManager::setPointerIconShape(int32_t iconId) {
- AutoMutex _l(mLock);
- sp<PointerController> controller = mLocked.pointerController.promote();
- if (controller != NULL) {
- // Use 0 (the default icon) for ARROW.
+ AutoMutex _l(mLock);
+ sp<PointerController> controller = mLocked.pointerController.promote();
+ if (controller != NULL) {
controller->updatePointerShape(iconId);
- }
+ }
+}
+
+void NativeInputManager::reloadPointerIcons() {
+ AutoMutex _l(mLock);
+ sp<PointerController> controller = mLocked.pointerController.promote();
+ if (controller != NULL) {
+ controller->reloadPointerResources();
+ }
}
TouchAffineTransformation NativeInputManager::getTouchAffineTransformation(
@@ -1036,6 +1029,25 @@
return result;
}
+void NativeInputManager::loadPointerIcon(SpriteIcon* icon) {
+ JNIEnv* env = jniEnv();
+
+ ScopedLocalRef<jobject> pointerIconObj(env, env->CallObjectMethod(
+ mServiceObj, gServiceClassInfo.getPointerIcon));
+ if (checkAndClearExceptionFromCallback(env, "getPointerIcon")) {
+ return;
+ }
+
+ PointerIcon pointerIcon;
+ status_t status = android_view_PointerIcon_load(env, pointerIconObj.get(),
+ mContextObj, &pointerIcon);
+ if (!status && !pointerIcon.isNullIcon()) {
+ *icon = SpriteIcon(pointerIcon.bitmap, pointerIcon.hotSpotX, pointerIcon.hotSpotY);
+ } else {
+ *icon = SpriteIcon();
+ }
+}
+
void NativeInputManager::loadPointerResources(PointerResources* outResources) {
JNIEnv* env = jniEnv();
@@ -1420,6 +1432,11 @@
im->setPointerIconShape(iconId);
}
+static void nativeReloadPointerIcons(JNIEnv* /* env */, jclass /* clazz */, jlong ptr) {
+ NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
+ im->reloadPointerIcons();
+}
+
// ----------------------------------------------------------------------------
static const JNINativeMethod gInputManagerMethods[] = {
@@ -1480,6 +1497,8 @@
(void*) nativeMonitor },
{ "nativeSetPointerIconShape", "(JI)V",
(void*) nativeSetPointerIconShape },
+ { "nativeReloadPointerIcons", "(J)V",
+ (void*) nativeReloadPointerIcons },
};
#define FIND_CLASS(var, className) \
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index dbfd80d..5cf8ac0 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -3095,12 +3095,7 @@
enforceCrossUserPermission(userHandle);
synchronized (this) {
-
- // The active password is stored in the user that runs the launcher
- // If the user this is called from is part of a profile group, that is the parent
- // of the group.
- UserInfo parent = getProfileParent(userHandle);
- int id = (parent == null) ? userHandle : parent.id;
+ int id = getCredentialOwner(userHandle);
DevicePolicyData policy = getUserDataUnchecked(id);
// This API can only be called by an active device admin,
@@ -3130,10 +3125,8 @@
getActiveAdminForCallerLocked(null,
DeviceAdminInfo.USES_POLICY_WATCH_LOGIN);
- // The active password is stored in the parent.
- UserInfo parent = getProfileParent(userHandle);
- int id = (parent == null) ? userHandle : parent.id;
- DevicePolicyData policy = getUserDataUnchecked(id);
+ int credentialOwnerId = getCredentialOwner(userHandle);
+ DevicePolicyData policy = getUserDataUnchecked(credentialOwnerId);
return policy.mFailedPasswordAttempts;
}
@@ -3224,7 +3217,7 @@
long ident = mInjector.binderClearCallingIdentity();
try {
- if (mUserManager.getCredentialOwnerProfile(userHandle) != userHandle) {
+ if (getCredentialOwner(userHandle) != userHandle) {
throw new SecurityException("You can not change password for this profile because"
+ " it shares the password with the owner profile");
}
@@ -3548,6 +3541,18 @@
}
}
+ private void enforceCanManageInstalledKeys(ComponentName who) {
+ if (who == null) {
+ if (!isCallerDelegatedCertInstaller()) {
+ throw new SecurityException("who == null, but caller is not cert installer");
+ }
+ } else {
+ synchronized (this) {
+ getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+ }
+ }
+ }
+
private boolean isCallerDelegatedCertInstaller() {
final int callingUid = mInjector.binderGetCallingUid();
final int userHandle = UserHandle.getUserId(callingUid);
@@ -3637,27 +3642,20 @@
@Override
public boolean installKeyPair(ComponentName who, byte[] privKey, byte[] cert, String alias) {
- if (who == null) {
- if (!isCallerDelegatedCertInstaller()) {
- throw new SecurityException("who == null, but caller is not cert installer");
- }
- } else {
- synchronized (this) {
- getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
- }
- }
+ enforceCanManageInstalledKeys(who);
+
final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId());
final long id = mInjector.binderClearCallingIdentity();
try {
- final KeyChainConnection keyChainConnection = KeyChain.bindAsUser(mContext, userHandle);
- try {
- IKeyChainService keyChain = keyChainConnection.getService();
- return keyChain.installKeyPair(privKey, cert, alias);
- } catch (RemoteException e) {
- Log.e(LOG_TAG, "Installing certificate", e);
- } finally {
- keyChainConnection.close();
- }
+ final KeyChainConnection keyChainConnection = KeyChain.bindAsUser(mContext, userHandle);
+ try {
+ IKeyChainService keyChain = keyChainConnection.getService();
+ return keyChain.installKeyPair(privKey, cert, alias);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "Installing certificate", e);
+ } finally {
+ keyChainConnection.close();
+ }
} catch (InterruptedException e) {
Log.w(LOG_TAG, "Interrupted while installing certificate", e);
Thread.currentThread().interrupt();
@@ -3668,6 +3666,31 @@
}
@Override
+ public boolean removeKeyPair(ComponentName who, String alias) {
+ enforceCanManageInstalledKeys(who);
+
+ final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId());
+ final long id = Binder.clearCallingIdentity();
+ try {
+ final KeyChainConnection keyChainConnection = KeyChain.bindAsUser(mContext, userHandle);
+ try {
+ IKeyChainService keyChain = keyChainConnection.getService();
+ return keyChain.removeKeyPair(alias);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "Removing keypair", e);
+ } finally {
+ keyChainConnection.close();
+ }
+ } catch (InterruptedException e) {
+ Log.w(LOG_TAG, "Interrupted while removing keypair", e);
+ Thread.currentThread().interrupt();
+ } finally {
+ Binder.restoreCallingIdentity(id);
+ }
+ return false;
+ }
+
+ @Override
public void choosePrivateKeyAlias(final int uid, final Uri uri, final String alias,
final IBinder response) {
// Caller UID needs to be trusted, so we restrict this method to SYSTEM_UID callers.
@@ -3879,7 +3902,7 @@
}
enforceCrossUserPermission(userHandle);
// Managed Profile password can only be changed when per user encryption is present.
- if (!StorageManager.isFileBasedEncryptionEnabled()) {
+ if (!LockPatternUtils.isSeparateWorkChallengeEnabled()) {
enforceNotManagedProfile(userHandle, "set the active password");
}
@@ -3904,9 +3927,17 @@
saveSettingsLocked(userHandle);
updatePasswordExpirationsLocked(userHandle);
setExpirationAlarmCheckLocked(mContext, policy);
- sendAdminCommandToSelfAndProfilesLocked(
- DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
- DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
+
+ // Send a broadcast to each profile using this password as its primary unlock.
+ if (LockPatternUtils.isSeparateWorkChallengeEnabled()) {
+ sendAdminCommandLocked(
+ DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
+ DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
+ } else {
+ sendAdminCommandToSelfAndProfilesLocked(
+ DeviceAdminReceiver.ACTION_PASSWORD_CHANGED,
+ DeviceAdminInfo.USES_POLICY_LIMIT_PASSWORD, userHandle);
+ }
}
} finally {
mInjector.binderRestoreCallingIdentity(ident);
@@ -4490,11 +4521,11 @@
UserInfo user = mUserManager.getUserInfo(userHandle);
final List<UserInfo> profiles;
- if (user.isManagedProfile()) {
- // If we are being asked about a managed profile just return
- // keyguard features disabled by admins in the profile.
- profiles = new ArrayList<UserInfo>(1);
- profiles.add(user);
+ if (user.isManagedProfile() || LockPatternUtils.isSeparateWorkChallengeEnabled()) {
+ // If we are being asked about a managed profile or the main user profile has a
+ // separate lock from the work profile, just return keyguard features disabled
+ // by admins in the profile.
+ profiles = Collections.singletonList(user);
} else {
// Otherwise return those set by admins in the user
// and its profiles.
@@ -5057,10 +5088,10 @@
}
}
- private UserInfo getProfileParent(int userHandle) {
+ private int getCredentialOwner(int userHandle) {
long ident = mInjector.binderClearCallingIdentity();
try {
- return mUserManager.getProfileParent(userHandle);
+ return mUserManager.getCredentialOwnerProfile(userHandle);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
diff --git a/services/net/java/android/net/dhcp/DhcpClient.java b/services/net/java/android/net/dhcp/DhcpClient.java
index e7e99c4..812d9b6 100644
--- a/services/net/java/android/net/dhcp/DhcpClient.java
+++ b/services/net/java/android/net/dhcp/DhcpClient.java
@@ -20,8 +20,8 @@
import com.android.internal.util.Protocol;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
+import com.android.internal.util.WakeupMessage;
-import android.app.AlarmManager;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -128,7 +128,6 @@
// System services / libraries we use.
private final Context mContext;
- private final AlarmManager mAlarmManager;
private final Random mRandom;
private final INetworkManagementService mNMService;
@@ -143,10 +142,10 @@
// State variables.
private final StateMachine mController;
- private final AlarmListener mKickAlarm;
- private final AlarmListener mTimeoutAlarm;
- private final AlarmListener mRenewAlarm;
- private final AlarmListener mOneshotTimeoutAlarm;
+ private final WakeupMessage mKickAlarm;
+ private final WakeupMessage mTimeoutAlarm;
+ private final WakeupMessage mRenewAlarm;
+ private final WakeupMessage mOneshotTimeoutAlarm;
private final String mIfaceName;
private boolean mRegisteredForPreDhcpNotification;
@@ -174,6 +173,11 @@
private State mWaitBeforeStartState = new WaitBeforeStartState(mDhcpInitState);
private State mWaitBeforeRenewalState = new WaitBeforeRenewalState(mDhcpRenewingState);
+ private WakeupMessage makeWakeupMessage(String cmdName, int cmd) {
+ cmdName = DhcpClient.class.getSimpleName() + "." + mIfaceName + "." + cmdName;
+ return new WakeupMessage(mContext, getHandler(), cmdName, cmd);
+ }
+
private DhcpClient(Context context, StateMachine controller, String iface) {
super(TAG);
@@ -197,22 +201,21 @@
setInitialState(mStoppedState);
- mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
mNMService = INetworkManagementService.Stub.asInterface(b);
mRandom = new Random();
// Used to schedule packet retransmissions.
- mKickAlarm = new AlarmListener("KICK", CMD_KICK);
+ mKickAlarm = makeWakeupMessage("KICK", CMD_KICK);
// Used to time out PacketRetransmittingStates.
- mTimeoutAlarm = new AlarmListener("TIMEOUT", CMD_TIMEOUT);
+ mTimeoutAlarm = makeWakeupMessage("TIMEOUT", CMD_TIMEOUT);
// Used to schedule DHCP renews.
- mRenewAlarm = new AlarmListener("RENEW", DhcpStateMachine.CMD_RENEW_DHCP);
+ mRenewAlarm = makeWakeupMessage("RENEW", DhcpStateMachine.CMD_RENEW_DHCP);
// Used to tell the caller when its request (CMD_START_DHCP or CMD_RENEW_DHCP) timed out.
// TODO: when the legacy DHCP client is gone, make the client fully asynchronous and
// remove this.
- mOneshotTimeoutAlarm = new AlarmListener("ONESHOT_TIMEOUT", CMD_ONESHOT_TIMEOUT);
+ mOneshotTimeoutAlarm = makeWakeupMessage("ONESHOT_TIMEOUT", CMD_ONESHOT_TIMEOUT);
}
@Override
@@ -227,32 +230,6 @@
return client;
}
- /**
- * An AlarmListener that sends the specified command to the state machine.
- */
- private class AlarmListener implements AlarmManager.OnAlarmListener {
- private final int cmd;
- private final String name;
-
- public AlarmListener(final String cmdName, final int cmd) {
- this.cmd = cmd;
- this.name = DhcpClient.class.getSimpleName() + "." + mIfaceName + "." + cmdName;
- }
-
- public void set(long alarmTime) {
- mAlarmManager.setExact(
- AlarmManager.ELAPSED_REALTIME_WAKEUP, alarmTime, name, this, getHandler());
- }
-
- public void cancel() {
- mAlarmManager.cancel(this);
- }
-
- public void onAlarm() {
- sendMessage(cmd);
- }
- }
-
private boolean initInterface() {
try {
mIface = NetworkInterface.getByName(mIfaceName);
@@ -412,11 +389,11 @@
}
private void scheduleRenew() {
- mAlarmManager.cancel(mRenewAlarm);
+ mRenewAlarm.cancel();
if (mDhcpLeaseExpiry != 0) {
long now = SystemClock.elapsedRealtime();
long alarmTime = (now + mDhcpLeaseExpiry) / 2;
- mRenewAlarm.set(alarmTime);
+ mRenewAlarm.schedule(alarmTime);
Log.d(TAG, "Scheduling renewal in " + ((alarmTime - now) / 1000) + "s");
} else {
Log.d(TAG, "Infinite lease, no renewal needed");
@@ -548,7 +525,7 @@
// one state, so we can just use the state timeout.
private void scheduleOneshotTimeout() {
final long alarmTime = SystemClock.elapsedRealtime() + DHCP_TIMEOUT_MS;
- mOneshotTimeoutAlarm.set(alarmTime);
+ mOneshotTimeoutAlarm.schedule(alarmTime);
}
class StoppedState extends LoggingState {
@@ -713,8 +690,7 @@
long now = SystemClock.elapsedRealtime();
long timeout = jitterTimer(mTimer);
long alarmTime = now + timeout;
- mKickAlarm.cancel();
- mKickAlarm.set(alarmTime);
+ mKickAlarm.schedule(alarmTime);
mTimer *= 2;
if (mTimer > MAX_TIMEOUT_MS) {
mTimer = MAX_TIMEOUT_MS;
@@ -724,7 +700,7 @@
protected void maybeInitTimeout() {
if (mTimeout > 0) {
long alarmTime = SystemClock.elapsedRealtime() + mTimeout;
- mTimeoutAlarm.set(alarmTime);
+ mTimeoutAlarm.schedule(alarmTime);
}
}
}
diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
index f9aa124..5b4803b 100644
--- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
@@ -195,8 +195,8 @@
mServices = new ArrayList<ServiceInfo<AuthenticatorDescription>>();
AuthenticatorDescription d1 = new AuthenticatorDescription("type1", "p1", 0, 0, 0, 0);
AuthenticatorDescription d2 = new AuthenticatorDescription("type2", "p2", 0, 0, 0, 0);
- mServices.add(new ServiceInfo<AuthenticatorDescription>(d1, null, 0));
- mServices.add(new ServiceInfo<AuthenticatorDescription>(d2, null, 0));
+ mServices.add(new ServiceInfo<AuthenticatorDescription>(d1, null, null));
+ mServices.add(new ServiceInfo<AuthenticatorDescription>(d2, null, null));
}
@Override
diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
index 0b73beb..312b1b0 100644
--- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
+++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java
@@ -183,6 +183,28 @@
}
/**
+ * Test that non persisted job is not written to disk.
+ */
+ public void testNonPersistedTaskIsNotPersisted() throws Exception {
+ JobInfo.Builder b = new Builder(42, mComponent)
+ .setOverrideDeadline(10000)
+ .setPersisted(false);
+ JobStatus jsNonPersisted = new JobStatus(b.build(), SOME_UID);
+ mTaskStoreUnderTest.add(jsNonPersisted);
+ b = new Builder(43, mComponent)
+ .setOverrideDeadline(10000)
+ .setPersisted(true);
+ JobStatus jsPersisted = new JobStatus(b.build(), SOME_UID);
+ mTaskStoreUnderTest.add(jsPersisted);
+ Thread.sleep(IO_WAIT);
+ final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>();
+ mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet);
+ assertEquals("Job count is incorrect.", 1, jobStatusSet.size());
+ JobStatus jobStatus = jobStatusSet.iterator().next();
+ assertEquals("Wrong job persisted.", 43, jobStatus.getJobId());
+ }
+
+ /**
* Helper function to throw an error if the provided task and TaskStatus objects are not equal.
*/
private void assertTasksEqual(JobInfo first, JobInfo second) {
diff --git a/services/tests/servicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/servicestests/src/com/android/server/notification/RankingHelperTest.java
index b40fd068..d0065cd 100644
--- a/services/tests/servicestests/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/notification/RankingHelperTest.java
@@ -15,10 +15,17 @@
*/
package com.android.server.notification;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_UNSPECIFIED;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_HIGH;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_LOW;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_MAX;
+import static android.service.notification.NotificationListenerService.Ranking.IMPORTANCE_NONE;
+
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import android.app.Notification;
+import android.os.Handler;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.test.AndroidTestCase;
@@ -28,6 +35,7 @@
public class RankingHelperTest extends AndroidTestCase {
@Mock NotificationUsageStats mUsageStats;
+ @Mock Handler handler;
private Notification mNotiGroupGSortA;
private Notification mNotiGroupGSortB;
@@ -46,13 +54,15 @@
MockitoAnnotations.initMocks(this);
UserHandle user = UserHandle.ALL;
- mHelper = new RankingHelper(getContext(), null, mUsageStats, new String[0]);
+ mHelper = new RankingHelper(getContext(), handler, mUsageStats,
+ new String[] {TopicImportanceExtractor.class.getName()});
mNotiGroupGSortA = new Notification.Builder(getContext())
.setContentTitle("A")
.setGroup("G")
.setSortKey("A")
.setWhen(1205)
+ .setTopic(new Notification.Topic("A", "a"))
.build();
mRecordGroupGSortA = new NotificationRecord(new StatusBarNotification(
"package", "package", 1, null, 0, 0, 0, mNotiGroupGSortA, user), 0);
@@ -62,6 +72,7 @@
.setGroup("G")
.setSortKey("B")
.setWhen(1200)
+ .setTopic(new Notification.Topic("A", "a"))
.build();
mRecordGroupGSortB = new NotificationRecord(new StatusBarNotification(
"package", "package", 1, null, 0, 0, 0, mNotiGroupGSortB, user), 0);
@@ -69,6 +80,7 @@
mNotiNoGroup = new Notification.Builder(getContext())
.setContentTitle("C")
.setWhen(1201)
+ .setTopic(new Notification.Topic("C", "c"))
.build();
mRecordNoGroup = new NotificationRecord(new StatusBarNotification(
"package", "package", 1, null, 0, 0, 0, mNotiNoGroup, user), 0);
@@ -76,6 +88,7 @@
mNotiNoGroup2 = new Notification.Builder(getContext())
.setContentTitle("D")
.setWhen(1202)
+ .setTopic(new Notification.Topic("D", "d"))
.build();
mRecordNoGroup2 = new NotificationRecord(new StatusBarNotification(
"package", "package", 1, null, 0, 0, 0, mNotiNoGroup2, user), 0);
@@ -84,6 +97,7 @@
.setContentTitle("E")
.setWhen(1201)
.setSortKey("A")
+ .setTopic(new Notification.Topic("E", "e"))
.build();
mRecordNoGroupSortA = new NotificationRecord(new StatusBarNotification(
"package", "package", 1, null, 0, 0, 0, mNotiNoGroupSortA, user), 0);
@@ -138,4 +152,30 @@
ArrayList<NotificationRecord> notificationList = new ArrayList<NotificationRecord>();
mHelper.sort(notificationList);
}
+
+ @SmallTest
+ public void testTopicImportanceExtractor() throws Exception {
+ mHelper.setTopicImportance("package", 0, new Notification.Topic("A", "a"),
+ IMPORTANCE_MAX);
+ // There is no B. There never was a b. Moving on...
+ mHelper.setTopicImportance("package", 0, new Notification.Topic("C", "c"),
+ IMPORTANCE_HIGH);
+ mHelper.setTopicImportance("package", 0, new Notification.Topic("D", "d"),
+ IMPORTANCE_LOW);
+ // watch out: different package.
+ mHelper.setTopicImportance("package2", 0, new Notification.Topic("E", "e"),
+ IMPORTANCE_NONE);
+
+ TopicImportanceExtractor validator = mHelper.findExtractor(TopicImportanceExtractor.class);
+ validator.process(mRecordGroupGSortA);
+ validator.process(mRecordGroupGSortB);
+ validator.process(mRecordNoGroup);
+ validator.process(mRecordNoGroup2);
+ validator.process(mRecordNoGroupSortA);
+ assertTrue(mRecordGroupGSortA.getTopicImportance() == IMPORTANCE_MAX);
+ assertTrue(mRecordGroupGSortB.getTopicImportance() == IMPORTANCE_MAX);
+ assertTrue(mRecordNoGroup.getTopicImportance() == IMPORTANCE_HIGH);
+ assertTrue(mRecordNoGroup2.getTopicImportance() == IMPORTANCE_LOW);
+ assertTrue(mRecordNoGroupSortA.getTopicImportance() == IMPORTANCE_UNSPECIFIED);
+ }
}
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
index 9e70138..48a11c5 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerServiceTest.java
@@ -16,9 +16,12 @@
package com.android.server.pm;
+import android.content.pm.UserInfo;
import android.os.Bundle;
import android.os.FileUtils;
import android.os.Parcelable;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.test.AndroidTestCase;
import android.util.AtomicFile;
@@ -29,6 +32,7 @@
public class UserManagerServiceTest extends AndroidTestCase {
private static String[] STRING_ARRAY = new String[] {"<tag", "<![CDATA["};
private File restrictionsFile;
+ private int tempUserId = UserHandle.USER_NULL;
@Override
protected void setUp() throws Exception {
@@ -40,6 +44,9 @@
@Override
protected void tearDown() throws Exception {
restrictionsFile.delete();
+ if (tempUserId != UserHandle.USER_NULL) {
+ UserManager.get(mContext).removeUser(tempUserId);
+ }
super.tearDown();
}
@@ -55,6 +62,16 @@
assertBundle(bundle);
}
+ public void testAddUserWithAccount() {
+ UserManager um = UserManager.get(mContext);
+ UserInfo user = um.createUser("Test User", 0);
+ assertNotNull(user);
+ tempUserId = user.id;
+ String accountName = "Test Account";
+ um.setUserAccount(tempUserId, accountName);
+ assertEquals(accountName, um.getUserAccount(tempUserId));
+ }
+
private Bundle createBundle() {
Bundle result = new Bundle();
// Tests for 6 allowed types: Integer, Boolean, String, String[], Bundle and Parcelable[]
diff --git a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
index 66c7dbb..b4bca3e 100644
--- a/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/UserManagerTest.java
@@ -31,7 +31,8 @@
/** Test {@link UserManager} functionality. */
public class UserManagerTest extends AndroidTestCase {
-
+ private static final int REMOVE_CHECK_INTERVAL = 500;
+ private static final int REMOVE_TIMEOUT = 60 * 1000;
private UserManager mUserManager = null;
private final Object mUserLock = new Object();
private List<Integer> usersToRemove;
@@ -227,10 +228,16 @@
private void removeUser(int userId) {
synchronized (mUserLock) {
mUserManager.removeUser(userId);
+ long time = System.currentTimeMillis();
while (mUserManager.getUserInfo(userId) != null) {
try {
- mUserLock.wait(500);
+ mUserLock.wait(REMOVE_CHECK_INTERVAL);
} catch (InterruptedException ie) {
+ Thread.currentThread().interrupt();
+ return;
+ }
+ if (System.currentTimeMillis() - time > REMOVE_TIMEOUT) {
+ fail("Timeout waiting for removeUser. userId = " + userId);
}
}
}
diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
index 154cbd3..7976cb8 100644
--- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
@@ -52,12 +52,10 @@
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.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
index 109d214..3efd0fb 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -266,8 +266,6 @@
pw.print(" Session service="); pw.println(mInfo.getSessionService());
pw.println(" Service info:");
mInfo.getServiceInfo().dump(new PrintWriterPrinter(pw), " ");
- pw.println(" Application info:");
- mInfo.getServiceInfo().applicationInfo.dump(new PrintWriterPrinter(pw), " ");
pw.print(" Recognition service="); pw.println(mInfo.getRecognitionService());
pw.print(" Settings activity="); pw.println(mInfo.getSettingsActivity());
pw.print(" Supports assist="); pw.println(mInfo.getSupportsAssist());
diff --git a/telecomm/java/android/telecom/InCallService.java b/telecomm/java/android/telecom/InCallService.java
index 19c613d..5087080 100644
--- a/telecomm/java/android/telecom/InCallService.java
+++ b/telecomm/java/android/telecom/InCallService.java
@@ -48,13 +48,13 @@
* {@code InCallService} implementation intends to replace the built-in in-call UI.
* <pre>
* {@code
- * <service android:name="your.package.YourInCallServiceImplementation"
- * android:permission="android.permission.BIND_IN_CALL_SERVICE">
- * <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
- * <intent-filter>
- * <action android:name="android.telecom.InCallService"/>
- * </intent-filter>
- * </service>
+ * <service android:name="your.package.YourInCallServiceImplementation"
+ * android:permission="android.permission.BIND_IN_CALL_SERVICE">
+ * <meta-data android:name="android.telecom.IN_CALL_SERVICE_UI" android:value="true" />
+ * <intent-filter>
+ * <action android:name="android.telecom.InCallService"/>
+ * </intent-filter>
+ * </service>
* }
* </pre>
*/
diff --git a/telecomm/java/android/telecom/TelecomManager.java b/telecomm/java/android/telecom/TelecomManager.java
index b5b4e5f..9eb1665 100644
--- a/telecomm/java/android/telecom/TelecomManager.java
+++ b/telecomm/java/android/telecom/TelecomManager.java
@@ -247,6 +247,14 @@
"android.telecom.extra.CONNECTION_SERVICE";
/**
+ * Optional extra for communicating the call technology used by a
+ * {@link com.android.internal.telephony.Connection} to Telecom
+ * @hide
+ */
+ public static final String EXTRA_CALL_TECHNOLOGY_TYPE =
+ "android.telecom.extra.CALL_TECHNOLOGY_TYPE";
+
+ /**
* An optional {@link android.content.Intent#ACTION_CALL} intent extra denoting the
* package name of the app specifying an alternative gateway for the call.
* The value is a string.
diff --git a/telecomm/java/android/telecom/VideoCallImpl.java b/telecomm/java/android/telecom/VideoCallImpl.java
index c8072d1..93484cd 100644
--- a/telecomm/java/android/telecom/VideoCallImpl.java
+++ b/telecomm/java/android/telecom/VideoCallImpl.java
@@ -57,13 +57,20 @@
private final class VideoCallListenerBinder extends IVideoCallback.Stub {
@Override
public void receiveSessionModifyRequest(VideoProfile videoProfile) {
+ if (mHandler == null) {
+ return;
+ }
mHandler.obtainMessage(MessageHandler.MSG_RECEIVE_SESSION_MODIFY_REQUEST,
videoProfile).sendToTarget();
+
}
@Override
public void receiveSessionModifyResponse(int status, VideoProfile requestProfile,
VideoProfile responseProfile) {
+ if (mHandler == null) {
+ return;
+ }
SomeArgs args = SomeArgs.obtain();
args.arg1 = status;
args.arg2 = requestProfile;
@@ -74,12 +81,18 @@
@Override
public void handleCallSessionEvent(int event) {
+ if (mHandler == null) {
+ return;
+ }
mHandler.obtainMessage(MessageHandler.MSG_HANDLE_CALL_SESSION_EVENT, event)
.sendToTarget();
}
@Override
public void changePeerDimensions(int width, int height) {
+ if (mHandler == null) {
+ return;
+ }
SomeArgs args = SomeArgs.obtain();
args.arg1 = width;
args.arg2 = height;
@@ -88,18 +101,27 @@
@Override
public void changeVideoQuality(int videoQuality) {
+ if (mHandler == null) {
+ return;
+ }
mHandler.obtainMessage(MessageHandler.MSG_CHANGE_VIDEO_QUALITY, videoQuality, 0)
.sendToTarget();
}
@Override
public void changeCallDataUsage(long dataUsage) {
+ if (mHandler == null) {
+ return;
+ }
mHandler.obtainMessage(MessageHandler.MSG_CHANGE_CALL_DATA_USAGE, dataUsage)
.sendToTarget();
}
@Override
public void changeCameraCapabilities(VideoProfile.CameraCapabilities cameraCapabilities) {
+ if (mHandler == null) {
+ return;
+ }
mHandler.obtainMessage(MessageHandler.MSG_CHANGE_CAMERA_CAPABILITIES,
cameraCapabilities).sendToTarget();
}
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 8ebef32..6ffc026 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -385,6 +385,11 @@
public static final String KEY_VVM_TYPE_STRING = "vvm_type_string";
/**
+ * Whether cellular data is required to access visual voicemail.
+ */
+ public static final String KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN = "vvm_cellular_data_required";
+
+ /**
* The package name of the carrier's visual voicemail app to ensure that dialer visual voicemail
* and carrier visual voicemail are not active at the same time.
*/
@@ -524,6 +529,30 @@
public static final String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL =
"allow_non_emergency_calls_in_ecm_bool";
+ /**
+ * Flag indicating whether to allow carrier video calls to emergency numbers.
+ * When {@code true}, video calls to emergency numbers will be allowed. When {@code false},
+ * video calls to emergency numbers will be initiated as audio-only calls instead.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String BOOL_ALLOW_EMERGENCY_VIDEO_CALLS =
+ "bool_allow_emergency_video_calls";
+
+ /**
+ * Flag indicating whether the carrier supports video pause signaling. When {@code true}, the
+ * carrier supports use of the {@link android.telecom.VideoProfile#STATE_PAUSED} video state
+ * to pause transmission of video when the In-Call app is sent to the background.
+ * When {@code false}, video pause signaling is not supported. {@code True} by default unless
+ * a carrier configuration overrides the default.
+ *
+ * @hide
+ */
+ @SystemApi
+ public static final String BOOL_ALLOW_VIDEO_PAUSE =
+ "bool_allow_video_pause";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -575,6 +604,7 @@
sDefaults.putString(KEY_VVM_DESTINATION_NUMBER_STRING, "");
sDefaults.putInt(KEY_VVM_PORT_NUMBER_INT, 0);
sDefaults.putString(KEY_VVM_TYPE_STRING, "");
+ sDefaults.putBoolean(KEY_VVM_CELLULAR_DATA_REQUIRED_BOOLEAN,false);
sDefaults.putString(KEY_CARRIER_VVM_PACKAGE_NAME_STRING, "");
sDefaults.putBoolean(KEY_CI_ACTION_ON_SYS_UPDATE_BOOL, false);
sDefaults.putString(KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING, "");
@@ -596,6 +626,8 @@
sDefaults.putBoolean(KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true);
sDefaults.putBoolean(KEY_HIDE_IMS_APN_BOOL, false);
sDefaults.putBoolean(KEY_HIDE_PREFERRED_NETWORK_TYPE_BOOL, false);
+ sDefaults.putBoolean(BOOL_ALLOW_EMERGENCY_VIDEO_CALLS, false);
+ sDefaults.putBoolean(BOOL_ALLOW_VIDEO_PAUSE, true);
// MMS defaults
sDefaults.putBoolean(KEY_MMS_ALIAS_ENABLED_BOOL, false);
@@ -647,12 +679,15 @@
@Nullable
public PersistableBundle getConfigForSubId(int subId) {
try {
- return getICarrierConfigLoader().getConfigForSubId(subId);
+ ICarrierConfigLoader loader = getICarrierConfigLoader();
+ if (loader == null) {
+ Rlog.w(TAG, "Error getting config for subId " + subId
+ + " ICarrierConfigLoader is null");
+ return null;
+ }
+ return loader.getConfigForSubId(subId);
} catch (RemoteException ex) {
- Rlog.e(TAG, "Error getting config for subId " + Integer.toString(subId) + ": "
- + ex.toString());
- } catch (NullPointerException ex) {
- Rlog.e(TAG, "Error getting config for subId " + Integer.toString(subId) + ": "
+ Rlog.e(TAG, "Error getting config for subId " + subId + ": "
+ ex.toString());
}
return null;
@@ -688,11 +723,15 @@
*/
public void notifyConfigChangedForSubId(int subId) {
try {
- getICarrierConfigLoader().notifyConfigChangedForSubId(subId);
+ ICarrierConfigLoader loader = getICarrierConfigLoader();
+ if (loader == null) {
+ Rlog.w(TAG, "Error reloading config for subId=" + subId
+ + " ICarrierConfigLoader is null");
+ return;
+ }
+ loader.notifyConfigChangedForSubId(subId);
} catch (RemoteException ex) {
Rlog.e(TAG, "Error reloading config for subId=" + subId + ": " + ex.toString());
- } catch (NullPointerException ex) {
- Rlog.e(TAG, "Error reloading config for subId=" + subId + ": " + ex.toString());
}
}
@@ -708,11 +747,15 @@
@SystemApi
public void updateConfigForPhoneId(int phoneId, String simState) {
try {
- getICarrierConfigLoader().updateConfigForPhoneId(phoneId, simState);
+ ICarrierConfigLoader loader = getICarrierConfigLoader();
+ if (loader == null) {
+ Rlog.w(TAG, "Error updating config for phoneId=" + phoneId
+ + " ICarrierConfigLoader is null");
+ return;
+ }
+ loader.updateConfigForPhoneId(phoneId, simState);
} catch (RemoteException ex) {
Rlog.e(TAG, "Error updating config for phoneId=" + phoneId + ": " + ex.toString());
- } catch (NullPointerException ex) {
- Rlog.e(TAG, "Error updating config for phoneId=" + phoneId + ": " + ex.toString());
}
}
@@ -728,6 +771,7 @@
}
/** @hide */
+ @Nullable
private ICarrierConfigLoader getICarrierConfigLoader() {
return ICarrierConfigLoader.Stub
.asInterface(ServiceManager.getService(Context.CARRIER_CONFIG_SERVICE));
diff --git a/telephony/java/android/telephony/CellLocation.java b/telephony/java/android/telephony/CellLocation.java
index f9a222f..5bcaa6e 100644
--- a/telephony/java/android/telephony/CellLocation.java
+++ b/telephony/java/android/telephony/CellLocation.java
@@ -81,6 +81,12 @@
public abstract boolean isEmpty();
/**
+ * Invalidate this object. The location area code and the cell id are set to -1.
+ * @hide
+ */
+ public abstract void setStateInvalid();
+
+ /**
* Return a new CellLocation object representing an unknown
* location, or null for unknown/none phone radio types.
*
diff --git a/telephony/java/android/telephony/CellSignalStrengthLte.java b/telephony/java/android/telephony/CellSignalStrengthLte.java
index 5a1559a..2606466 100644
--- a/telephony/java/android/telephony/CellSignalStrengthLte.java
+++ b/telephony/java/android/telephony/CellSignalStrengthLte.java
@@ -168,6 +168,20 @@
}
/**
+ * @hide
+ */
+ public int getRsrq() {
+ return mRsrq;
+ }
+
+ /**
+ * @hide
+ */
+ public int getRssnr() {
+ return mRssnr;
+ }
+
+ /**
* Get signal strength as dBm
*/
@Override
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index b430340..553221d 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -2354,7 +2354,7 @@
tempDialStr = postDialStr.substring(dialableIndex);
} else {
// Non-dialable character such as P/W should not be at the end of
- // the dial string after P/W processing in CdmaConnection.java
+ // the dial string after P/W processing in GsmCdmaConnection.java
// Set the postDialStr to "" to break out of the loop
if (dialableIndex < 0) {
postDialStr = "";
diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java
index 1337487..8537f9c 100644
--- a/telephony/java/android/telephony/ServiceState.java
+++ b/telephony/java/android/telephony/ServiceState.java
@@ -906,7 +906,7 @@
/**
* In CDMA, mOperatorAlphaLong can be set from the ERI text.
- * This is done from the CDMAPhone and not from the CdmaServiceStateTracker.
+ * This is done from the GsmCdmaPhone and not from the ServiceStateTracker.
*
* @hide
*/
diff --git a/telephony/java/android/telephony/cdma/CdmaCellLocation.java b/telephony/java/android/telephony/cdma/CdmaCellLocation.java
index 6cfae6a..7c10569 100644
--- a/telephony/java/android/telephony/cdma/CdmaCellLocation.java
+++ b/telephony/java/android/telephony/cdma/CdmaCellLocation.java
@@ -123,6 +123,7 @@
/**
* Invalidate this object. The cell location data is set to invalid values.
*/
+ @Override
public void setStateInvalid() {
this.mBaseStationId = -1;
this.mBaseStationLatitude = INVALID_LAT_LONG;
@@ -134,7 +135,7 @@
/**
* Set the cell location data.
*/
- public void setCellLocationData(int baseStationId, int baseStationLatitude,
+ public void setCellLocationData(int baseStationId, int baseStationLatitude,
int baseStationLongitude) {
// The following values have to be written in the correct sequence
this.mBaseStationId = baseStationId;
diff --git a/telephony/java/android/telephony/gsm/GsmCellLocation.java b/telephony/java/android/telephony/gsm/GsmCellLocation.java
index a3889b2..1717802 100644
--- a/telephony/java/android/telephony/gsm/GsmCellLocation.java
+++ b/telephony/java/android/telephony/gsm/GsmCellLocation.java
@@ -72,6 +72,7 @@
/**
* Invalidate this object. The location area code and the cell id are set to -1.
*/
+ @Override
public void setStateInvalid() {
mLac = -1;
mCid = -1;
diff --git a/telephony/java/com/android/ims/ImsStreamMediaProfile.java b/telephony/java/com/android/ims/ImsStreamMediaProfile.java
index 359b270..5a99212 100644
--- a/telephony/java/com/android/ims/ImsStreamMediaProfile.java
+++ b/telephony/java/com/android/ims/ImsStreamMediaProfile.java
@@ -76,7 +76,7 @@
}
public ImsStreamMediaProfile() {
- mAudioQuality = AUDIO_QUALITY_AMR_WB;
+ mAudioQuality = AUDIO_QUALITY_NONE;
mAudioDirection = DIRECTION_SEND_RECEIVE;
mVideoQuality = VIDEO_QUALITY_NONE;
mVideoDirection = DIRECTION_INVALID;
diff --git a/test-runner/src/android/test/mock/MockContext.java b/test-runner/src/android/test/mock/MockContext.java
index c967c2b..96c8185 100644
--- a/test-runner/src/android/test/mock/MockContext.java
+++ b/test-runner/src/android/test/mock/MockContext.java
@@ -130,12 +130,6 @@
throw new UnsupportedOperationException();
}
- /** @hide */
- @Override
- public File getSharedPrefsFile(String name) {
- throw new UnsupportedOperationException();
- }
-
@Override
public String getPackageCodePath() {
throw new UnsupportedOperationException();
@@ -172,6 +166,11 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public String[] fileList() {
throw new UnsupportedOperationException();
}
@@ -182,18 +181,6 @@
}
@Override
- public File getDeviceEncryptedFilesDir() {
- throw new UnsupportedOperationException();
- }
-
- /** {@hide} */
- @SystemApi
- @Override
- public File getCredentialEncryptedFilesDir() {
- throw new UnsupportedOperationException();
- }
-
- @Override
public File getNoBackupFilesDir() {
throw new UnsupportedOperationException();
}
@@ -706,4 +693,28 @@
public File[] getExternalMediaDirs() {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public Context createDeviceEncryptedStorageContext() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@hide} */
+ @SystemApi
+ @Override
+ public Context createCredentialEncryptedStorageContext() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isDeviceEncryptedStorage() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** {@hide} */
+ @SystemApi
+ @Override
+ public boolean isCredentialEncryptedStorage() {
+ throw new UnsupportedOperationException();
+ }
}
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 17c24af..f7c63d1 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -16,6 +16,7 @@
package android.test.mock;
+import android.annotation.NonNull;
import android.app.PackageInstallObserver;
import android.content.ComponentName;
import android.content.Intent;
@@ -24,6 +25,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ContainerEncryptionParams;
+import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -286,6 +288,38 @@
throw new UnsupportedOperationException();
}
+ /** @hide */
+ @Override
+ public List<EphemeralApplicationInfo> getEphemeralApplications() {
+ throw new UnsupportedOperationException();
+ }
+
+ /** @hide */
+ @Override
+ public Drawable getEphemeralApplicationIcon(String packageName) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public byte[] getEphemeralCookie() {
+ return new byte[0];
+ }
+
+ @Override
+ public boolean isEphemeralApplication() {
+ return false;
+ }
+
+ @Override
+ public int getEphemeralCookieMaxSizeBytes() {
+ return 0;
+ }
+
+ @Override
+ public boolean setEphemeralCookie(@NonNull byte[] cookie) {
+ return false;
+ }
+
@Override
public ResolveInfo resolveActivity(Intent intent, int flags) {
throw new UnsupportedOperationException();
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java
index 7628c5c..63fa3f9 100644
--- a/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/MultiProducerActivity.java
@@ -25,7 +25,7 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.DisplayListCanvas;
-import android.view.HardwareRenderer;
+import android.view.ThreadedRenderer;
import android.view.RenderNode;
import android.view.ThreadedRenderer;
import android.view.View;
@@ -120,7 +120,7 @@
if (view == null) {
view.postDelayed(mSetup, 50);
}
- HardwareRenderer renderer = view.getHardwareRenderer();
+ ThreadedRenderer renderer = view.getHardwareRenderer();
if (renderer == null || view.getWidth() == 0) {
view.postDelayed(mSetup, 50);
}
diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java
index 69b2a9d..0c36063 100644
--- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java
+++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/TestCertificateSource.java
@@ -44,4 +44,12 @@
}
return anchor.getTrustedCert();
}
+
+ public X509Certificate findByIssuerAndSignature(X509Certificate cert) {
+ java.security.cert.TrustAnchor anchor = mIndex.findByIssuerAndSignature(cert);
+ if (anchor == null) {
+ return null;
+ }
+ return anchor.getTrustedCert();
+ }
}
diff --git a/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java b/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java
index fc5426c..ee4c834 100644
--- a/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java
+++ b/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java
@@ -6,7 +6,6 @@
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
-import android.view.HardwareRenderer;
import android.view.RenderNodeAnimator;
import android.view.View;
import android.widget.AdapterView;
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 a390b0c..3c2659f 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -22,11 +22,10 @@
import android.os.ServiceManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.IWindowManager;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-
import junit.framework.TestCase;
+import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
+
/**
* TODO: Remove this. This is only a placeholder, need to implement this.
*/
@@ -104,7 +103,7 @@
}
try {
- mWm.setAppTask(null, 0, null, null);
+ mWm.setAppTask(null, 0, INVALID_STACK_ID, null, null);
fail("IWindowManager.setAppGroupId did not throw SecurityException as"
+ " expected");
} catch (SecurityException e) {
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index c29bb48..c449550 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -127,6 +127,12 @@
const android::String8& getPlatformBuildVersionName() { return mPlatformVersionName; }
void setPlatformBuildVersionName(const android::String8& name) { mPlatformVersionName = name; }
+ const android::String8& getPrivateSymbolsPackage() const { return mPrivateSymbolsPackage; }
+
+ void setPrivateSymbolsPackage(const android::String8& package) {
+ mPrivateSymbolsPackage = package;
+ }
+
bool getUTF16StringsOption() {
return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
}
@@ -333,6 +339,7 @@
bool mBuildAppAsSharedLibrary;
android::String8 mPlatformVersionCode;
android::String8 mPlatformVersionName;
+ android::String8 mPrivateSymbolsPackage;
/* file specification */
int mArgc;
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 6411286..c424cc5 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -220,7 +220,9 @@
" Prevents symbols from being generated for strings that do not have a default\n"
" localization\n"
" --no-version-vectors\n"
- " Do not automatically generate versioned copies of vector XML resources.\n",
+ " Do not automatically generate versioned copies of vector XML resources.\n"
+ " --private-symbols\n"
+ " Java package name to use when generating R.java for private resources.\n",
gDefaultIgnoreAssets);
}
@@ -689,6 +691,16 @@
bundle.setPseudolocalize(PSEUDO_ACCENTED | PSEUDO_BIDI);
} else if (strcmp(cp, "-no-version-vectors") == 0) {
bundle.setNoVersionVectors(true);
+ } else if (strcmp(cp, "-private-symbols") == 0) {
+ argc--;
+ argv++;
+ if (!argc) {
+ fprintf(stderr, "ERROR: No argument supplied for "
+ "'--private-symbols' option\n");
+ wantUsage = true;
+ goto bail;
+ }
+ bundle.setPrivateSymbolsPackage(String8(argv[0]));
} else {
fprintf(stderr, "ERROR: Unknown option '-%s'\n", cp);
wantUsage = true;
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index fb0fe38..576f076 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -1161,6 +1161,12 @@
printf("Creating resources for package %s\n", assets->getPackage().string());
}
+ // Set the private symbols package if it was declared.
+ // This can also be declared in XML as <private-symbols name="package" />
+ if (bundle->getPrivateSymbolsPackage().size() != 0) {
+ assets->setSymbolsPrivatePackage(bundle->getPrivateSymbolsPackage());
+ }
+
ResourceTable::PackageType packageType = ResourceTable::App;
if (bundle->getBuildSharedLibrary()) {
packageType = ResourceTable::SharedLibrary;
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 0e470d9..e87c7d40 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -1141,7 +1141,15 @@
}
pkg = String16(block.getAttributeStringValue(pkgIdx, &len));
if (!localHasErrors) {
- assets->setSymbolsPrivatePackage(String8(pkg));
+ SourcePos(in->getPrintableSource(), block.getLineNumber()).warning(
+ "<private-symbols> is deprecated. Use the command line flag "
+ "--private-symbols instead.\n");
+ if (assets->havePrivateSymbols()) {
+ SourcePos(in->getPrintableSource(), block.getLineNumber()).warning(
+ "private symbol package already specified. Ignoring...\n");
+ } else {
+ assets->setSymbolsPrivatePackage(String8(pkg));
+ }
}
while ((code=block.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
diff --git a/tools/aapt/pseudolocalize.h b/tools/aapt/pseudolocalize.h
index 71b974b..1faecd1 100644
--- a/tools/aapt/pseudolocalize.h
+++ b/tools/aapt/pseudolocalize.h
@@ -1,7 +1,7 @@
#ifndef HOST_PSEUDOLOCALIZE_H
#define HOST_PSEUDOLOCALIZE_H
-#include <base/macros.h>
+#include <android-base/macros.h>
#include "StringPool.h"
class PseudoMethodImpl {
diff --git a/tools/aapt2/flatten/TableFlattener.cpp b/tools/aapt2/flatten/TableFlattener.cpp
index f42e6b7..46ee914 100644
--- a/tools/aapt2/flatten/TableFlattener.cpp
+++ b/tools/aapt2/flatten/TableFlattener.cpp
@@ -23,7 +23,7 @@
#include "flatten/TableFlattener.h"
#include "util/BigBuffer.h"
-#include <base/macros.h>
+#include <android-base/macros.h>
#include <type_traits>
#include <numeric>
diff --git a/tools/aapt2/unflatten/BinaryResourceParser.cpp b/tools/aapt2/unflatten/BinaryResourceParser.cpp
index 5cc7aa7..46b5205 100644
--- a/tools/aapt2/unflatten/BinaryResourceParser.cpp
+++ b/tools/aapt2/unflatten/BinaryResourceParser.cpp
@@ -27,7 +27,7 @@
#include <androidfw/ResourceTypes.h>
#include <androidfw/TypeWrappers.h>
-#include <base/macros.h>
+#include <android-base/macros.h>
#include <map>
#include <string>
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index eea254b..40437fa 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -321,7 +321,7 @@
}
@Override
- public void setAppTask(IBinder arg0, int arg1, Rect arg2, Configuration arg3)
+ public void setAppTask(IBinder arg0, int arg1, int arg2, Rect arg3, Configuration arg4)
throws RemoteException {
// TODO Auto-generated method stub
}
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index ff15f3b..b09a14f 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -1365,24 +1365,18 @@
}
@Override
+ public File getSharedPreferencesPath(String name) {
+ // pass
+ return null;
+ }
+
+ @Override
public File getFilesDir() {
// pass
return null;
}
@Override
- public File getDeviceEncryptedFilesDir() {
- // pass
- return null;
- }
-
- @Override
- public File getCredentialEncryptedFilesDir() {
- // pass
- return null;
- }
-
- @Override
public File getNoBackupFilesDir() {
// pass
return null;
@@ -1424,12 +1418,6 @@
}
@Override
- public File getSharedPrefsFile(String name) {
- // pass
- return null;
- }
-
- @Override
public SharedPreferences getSharedPreferences(String arg0, int arg1) {
if (mSharedPreferences == null) {
mSharedPreferences = new BridgeSharedPreferences();
@@ -1814,4 +1802,26 @@
Integer pos = mScrollYPos.get(view);
return pos != null ? pos : 0;
}
+
+ @Override
+ public Context createDeviceEncryptedStorageContext() {
+ // pass
+ return null;
+ }
+
+ @Override
+ public Context createCredentialEncryptedStorageContext() {
+ // pass
+ return null;
+ }
+
+ @Override
+ public boolean isDeviceEncryptedStorage() {
+ return false;
+ }
+
+ @Override
+ public boolean isCredentialEncryptedStorage() {
+ return false;
+ }
}
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 e3a19e7..bab25c0 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
@@ -16,6 +16,7 @@
package com.android.layoutlib.bridge.android;
+import android.annotation.NonNull;
import android.app.PackageInstallObserver;
import android.content.ComponentName;
import android.content.Intent;
@@ -24,6 +25,7 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ContainerEncryptionParams;
+import android.content.pm.EphemeralApplicationInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
@@ -251,6 +253,36 @@
}
@Override
+ public List<EphemeralApplicationInfo> getEphemeralApplications() {
+ return null;
+ }
+
+ @Override
+ public Drawable getEphemeralApplicationIcon(String packageName) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public byte[] getEphemeralCookie() {
+ return new byte[0];
+ }
+
+ @Override
+ public boolean isEphemeralApplication() {
+ return false;
+ }
+
+ @Override
+ public int getEphemeralCookieMaxSizeBytes() {
+ return 0;
+ }
+
+ @Override
+ public boolean setEphemeralCookie(@NonNull byte[] cookie) {
+ return false;
+ }
+
+ @Override
public String[] getSystemSharedLibraryNames() {
return new String[0];
}
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index b054f7c..7a5a74f 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -188,6 +188,7 @@
*
* @hide
*/
+ @SystemApi
public static final String WIFI_AP_STATE_CHANGED_ACTION =
"android.net.wifi.WIFI_AP_STATE_CHANGED";
@@ -204,6 +205,7 @@
*
* @hide
*/
+ @SystemApi
public static final String EXTRA_WIFI_AP_STATE = "wifi_state";
/**
@@ -222,6 +224,7 @@
*
* @hide
*/
+ @SystemApi
public static final String EXTRA_PREVIOUS_WIFI_AP_STATE = "previous_wifi_state";
/**
* Wi-Fi AP is currently being disabled. The state will change to
@@ -232,6 +235,7 @@
*
* @hide
*/
+ @SystemApi
public static final int WIFI_AP_STATE_DISABLING = 10;
/**
* Wi-Fi AP is disabled.
@@ -241,6 +245,7 @@
*
* @hide
*/
+ @SystemApi
public static final int WIFI_AP_STATE_DISABLED = 11;
/**
* Wi-Fi AP is currently being enabled. The state will change to
@@ -251,6 +256,7 @@
*
* @hide
*/
+ @SystemApi
public static final int WIFI_AP_STATE_ENABLING = 12;
/**
* Wi-Fi AP is enabled.
@@ -260,6 +266,7 @@
*
* @hide
*/
+ @SystemApi
public static final int WIFI_AP_STATE_ENABLED = 13;
/**
* Wi-Fi AP is in a failed state. This state will occur when an error occurs during
@@ -270,6 +277,7 @@
*
* @hide
*/
+ @SystemApi
public static final int WIFI_AP_STATE_FAILED = 14;
/**
@@ -2173,7 +2181,7 @@
* is idle.
* <p>
* Any application using a WifiLock must request the {@code android.permission.WAKE_LOCK}
- * permission in an {@code <uses-permission>} element of the application's manifest.
+ * permission in an {@code <uses-permission>} element of the application's manifest.
*/
public class WifiLock {
private String mTag;
diff --git a/wifi/java/android/net/wifi/p2p/package.html b/wifi/java/android/net/wifi/p2p/package.html
index 94d695f..6a5e8e6 100644
--- a/wifi/java/android/net/wifi/p2p/package.html
+++ b/wifi/java/android/net/wifi/p2p/package.html
@@ -56,7 +56,7 @@
<p class="note"><strong>Note:</strong> Not all Android-powered devices support Wi-Fi
Direct. If your application uses Wi-Fi Direct, declare so with a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element in the manifest file:</p>
<pre>
<manifest ...>
diff --git a/wifi/java/android/net/wifi/package.html b/wifi/java/android/net/wifi/package.html
index 6f0d337..b21d39d 100644
--- a/wifi/java/android/net/wifi/package.html
+++ b/wifi/java/android/net/wifi/package.html
@@ -17,7 +17,7 @@
<p class="note"><strong>Note:</strong> Not all Android-powered devices provide Wi-Fi functionality.
If your application uses Wi-Fi, declare so with a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element in the manifest file:</p>
<pre>
<manifest ...>